采用CH375的USB接口芯片实现机车智能测温系统的设计

引 言
本文来源于一机车智能测温项目(功能模块如图1所示)。在列车或其他重要电工场合,重要部件的温度变化是极需重视的安全参数,必须为其设计智能温度监测系统。当温度超标时,不但要能及时报警,还要实时记录并保存精确的时间、温度数据。通过对危险时刻及该时刻对应温度数据进行统计分析,可以检出不安全因素发生的规律,以制定有效的预防措施。
在图1中,数据存储模块采用usb总线接口方式,主要是由于usb具有可“热插拔”的特性,使保存数据的操作更为简便。采用ch375作usb接口芯片,则是基于以下因素的考虑。
一般情况下,单片机或嵌入式系统处理usb存储设备的文件系统需要实现usb-host硬件接口数据交换层、传输协议层、scsi/ufi/rbc命令层及文件系统管理4个层次。ch375的长处在于它内置了相关固件程序,包含了以上提到4个层次中的前3个。利用该芯片进行usb存储设备操作开发,就只需集中处理fat文件系统层,大大缩短了开发的周期,对项目开发无疑是很好的选择。
ch375厂商已将文件系统管理层封包成库,对其进行开发时这一层可以忽略。然而,由于厂商未对一般用户提供此方面源码,开发过程中也带来了一些问题,例如:由于没有文件管理的c源码,进行程序调试就只能查看编译后的汇编代码,导致调试工作繁复,收效甚微;其次,尽管编译器已经作了优化,但编译后所占的系统资源仍远比用户自编文件管理子程序的大,这对资源极其有限的单片机非常不利;再次,由于开发平台不尽相同,芯片厂商提供的库子程序并不总有效,例如系统选用不同晶振时,库函数中的内嵌延时段的实现效果也会发生变化,往往造成usb设备与主机失去同步,这对于avr等高档单片机更是如此。
由此可见,利用ch375操作usb存储设备,开发者很有必要熟悉fat文件系统的格式。下文将从项目开发的实际出发,着重介绍进行文件管理的原理及编程步骤,以解决上文提及的困难。
1、 usb总线接口的设计
1.1 硬件电路设计
如图2所示,ch375芯片的txd引脚接地,从而使其工作于并口模式。ch375芯片的8位双向数据总线直接与mcu数据口相连,rd#和wr#分别连接到单片机的读选通输出引脚和写选通输出引脚。片选信号cs#、中断引脚int#以及地址输入线a0分别与mcu任意分配的引脚相连。当cs#为低电平时,选通ch375芯片;ch375向mcu请求中断时,将int#引脚电平拉低;当a0引脚为高电平时,选择ch375的命令端口,可以写入命令,为低电平时选择数据端口,可以读写数据。
1.2 软件设计及实现
本系统要求当普通u盘接入时,系统自动在其根目录下创建名为“data.txt”的文件,将mcu内置ram已记录的温度、时刻数据以字符串格式写入该文件;若文件已存在,则将数据追加至文件末尾;最后返回主程序。软件按图3所示流程进行设计, 电路上电后,先测试芯片是否能对单片机输出指令正确做出反应,必要时进行硬件复位,接着将芯片工作模式设置为模式6,即自动发送sof包的主机模式,这样,ch375与单片机就构成了最基本的usb-host,当usb设备接人时,接收到该包,就会让该包通过。ch375检测到设备连接上后会向mcu发中断信号,接着以查询ch375中断状态的方式等待u盘插入,若检测到表征设备接入的中断状态,则表明u盘已连接。接着向ch375输出cmd_disk_init,该命令将复位usb总线、读取并分析设备的描述符,然后自动配置,并建立起与设备之间的连接,完成后返回中断状态usb_int_success。上述步骤执行之后,芯片初始化的工作就完成了。
接着编写扇区读写程序。对于存储设备来说,文件管理几乎都是“块操作”方式,即使只修改存储设备中一比特的数据,也必须将包含该比特的整个扇区读出,找到相应位置进行修改,再把修改好的扇区数据写回原位置。对于大多数usb接口芯片,读写扇区的阶段要求我们熟悉scsi或ufo协议指令,利用特定指令来完成操作。而ch375内嵌了支持此方面指令的固件,当读扇区时,发cmd_disk_read,与cmd_disk_rd_go配合使用,则可在usb存储设备中任意读取1至255个扇区的数据;只需将cmd_disk_write与cmd_disk_wr_go指令结合使用,则可在u盘中任意写入1至255个扇区数据。
进行文件读写前,必须完成以下工作:
根据dos文件管理系统格式,声明必要的结构体,用于增强程序的跨平台可操作性及可读性。需要定义的结构体为dpt(dos分区表)、mbr(主引导记录)、bpb16(bios参数块,仅适合于fat12及fat16)、bpb32(仅适合于fat32)、fdt(文件目录表)、lfdt(长文件名fdt)等。除dpt、mbr外,其它结构体的内容在fat硬件白皮书中均有专门表格详细说明。
声明并初始化必要的全局变量。首先必须读取首个物理扇区,即mbr扇区,取得dbr的相对起始地址,然后读取dbr的内容。有些u盘没有mbr,首个物理扇区就是dbr区,因此必须进行判断:若扇区首字节为0xeb或0xe9,则为dbr区,否则为mbr区。其次设置重要变量,并计算dos各分区的起始lba值。需要处理的变量按先后顺序如下:每扇区字节数、每簇扇区数、fat表起始地址、单fat表扇区数、根目录区扇区数(fat32为0)、数据区起始地址、数据区总簇数、fat类型及根目录的起始地址等。fat类型按如下标准进行判定,如果数据区总簇数少于4085,则为fat12类型;否则,若少于65525,则为fat16;大于或等于65535为fat32。
定义大小端模式转换程序。单片机对于字或双字数据的存储多采用大端模式,而绝大多数pc机为小端模式。u盘中的文件管理由于要兼容pc机,存储格式几乎均为小端格式。因此进行u盘数据操作时,如果读写字或双字数据,则必须进行大小端模式转换。
fat表基本操作,包括查找空簇、读写指定簇内容。可编写子函数来解决查找空簇的问题,设计思路为读取fat表特定扇区,然后按fat类型不同分情况讨论。从第2簇开始,将代表特定簇的单元逐个与0比较,若不为0,则偏移地址作相应移动,例如fat16每次移动2字节,而fat32为4字节;至于fat12,由于每12比特表征一簇,必须考虑fat扇区的“边界问题”(如图4所示),需判断簇的奇偶性、设置边界校验标志,以解决边界问题。对给定簇号以读写fat表对应单元的问题,也可编写子函数进行解决,该函数需要指定簇号、待写内容,还要给定输出指针变量。执行时根据簇号计算指定簇号所在扇区地址,将其读出,然后另存指定簇的内容,写入新内容,最后将修改后的扇区数据重新写入u盘原位置。为了使程序精简,还可将读指定簇内容的子程序与该函数并成单个子函数,考虑到待写内容即使在fat32下,其有效值也不会超过0x0fffffff,因此编写程序时,可以均将其定义为双字类型,然后设定某值,例如0xf0000000,若待写内容为此值时,则不写入该簇内容,这样就保证了对fat表只读不写。
最后,对fdt表进行基本操作及文件的创建、读写。根据文件系统有无根目录区,分情况读取fdt特定扇区。分析扇区数据时,如果待查看文件与待写入文件重名,则要读出文件首簇号及大小,到fat表找到文件末簇,接着根据文件大小,判断待添加内容在簇中哪个扇区、扇区的哪个位置,读出并修改该扇区内容,然后重新写入,最后修改文件大小。
2 、c语言移植
由于c语言具有良好的可移植性,编写文件管理程序,推荐在pc机上先实现,再移植至单片机平台。在pc机实现,硬件上只要求pc机有usb口;而软件方面,pc机编程具有以下特点:(1)读写扇区有专用函数;(2)要使用伪指令#pragma pack(1),使编译后的结构体字节对齐;(3)读写字或双字数据不必进行大小端模式的转换。
对于读写扇区,主要有以下两种方案:
其一,调用windows api函数进行基本扇区读写。开发工具dev—c++,包含头文件windows.h。方法是调用createfile( )打开设备端口;接着用setfilepointer( )调整字节位置;最后用readfile( )或writefile( )进行扇区读写。
其二,调用dos函数进行扇区读写。有两组函数供调用:(1)biosdisk( ),功能是使用中断0x13,直接调用bios进行磁盘操作;(2)absread( )及abswrite( ),可读写u盘的逻辑扇区,调用前须确定存储设备盘符,需指定待操作的逻辑扇区号。
在pc机上编写文件管理程序,无需外接硬件,操作简易;软件调试通过之后,代码可高效移植至单片机平台,极大提高了项目的开发效率。
3、 结果比较
项目中本部分程序篇幅670行,文件管理层自编程序进行调试,在型号atmega64的avr单片机平台上测试通过。表1为采用iccavr编译后资源占用情况的对比,可见自编代码占用资源仅占后者的70%,远胜于后者。至于执行单步调试、修改延时等方面,其直观灵活性更明显。
4 、结束语
在所涉及项目中,通过自编文件管理操作代码,使程序更为优化,极大减小了主系统的负担。按此方法设计的测温系统,能实时记录危险时刻的温度、时间数据,操作者只需往usb接口插入存储设备,系统即将数据以文本写入设备,简单实用,易于推广。通过分析读取到的数据,对确定电力部件发热状况、找出危险因素并进行预防,均有实用价值。


小鹏汽车P7“全场景语音功能”体验好,好在哪?
DnPort RJ45 封装的嵌入式串口服务器
详解接近传感芯片的工作原理及应用领域
电网互操作性现状和未来发展方向
Voury卓华新产品新科技成功面市,尽显产品本色!
采用CH375的USB接口芯片实现机车智能测温系统的设计
诺基亚Nokia8京东开售: 定价3188元, 你买么?
曝win10X的任务栏居中显示
招投标资讯│所有的幸运,其实都是厚积薄发!项目也是!
小米的成长需要经历专利诉讼
信号发生器自检和自校准汇总
碳化硅MOSFET芯片设计及发展趋势
人工智能预测能力超级棒:神经网络学习算法助力罪案预警
【回顾往年CES】Verizon展示首批运行在Verizon 4G网络上的谷歌Android产品
Apple AirTags将于今年3月发布,而且日期似乎不会改变
2012全球半导体设备支出 台湾第二大
市场看好电路板维修技术 电路板维修技术未来可期
基于51单片机的GPS公交自动报站系统
基于动态编译(Just-in-Time)的全新深度学习框架
Android手机的两种内存:RAM和内部存储器