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。上述步骤执行之后,芯片初始化的工作就完成了。