原先是用RAMTRON的铁电作为存储单元,数据量有限,如果数据量大上去就要增大容量,价格昂贵。外挂一个海量存储上G的U盘。有专用的USB HOST芯片,譬如FTDI新出品的VNC1L家族芯片,资料少,全是E文;国内的南京沁恒,CH375芯片。出于节省开发时间的原则考虑,直接选用南京沁恒的基于CH375 这款USB HOST芯片的U盘读写模块。MCU与U盘模块之间是三线制异步串口通讯。
硬件连接U盘模块的16pin和9pin(INT#)——GND,15pin和14pin(STA#)——+5V,12pin(SIN)——TXD(MCU或MAX232),11pin(SOUT)——RXD(MCU或MAX232)。具体参考南京沁恒资料。 U盘读写模块一开始运行CH37XDL.EXE模块参数设置文件,设置成三线异步串口,数据的字节顺序为大端模式(小端模式对于以MCU作为访问来说不方便),U盘插拔时自动中断通知,添加数据后自动更新文件长度(实际做还是连续保存几次数据后再程序自动更新,否则数据每变动一次就更新文件长度,FLASH擦写10W次后就OVER了,延长使用寿命),看门狗数据间隔超时启动,默认的BAUD除数是120,只有4800的波特率,改为60,调试时是9600,以后正式做改为10,使通信波特率为57600),然后点击“重新配置模块”,将新参数烧录进去。 因为本本没有COM口,以前用FT232BL自制一个VCP电路出来,现在用深圳埃网通的MS1001S的串口服务器虚拟了个串口出来,插上U盘测试。然后用南京沁恒的模块调试V1.5摸索测试。 插上U盘,串口自动接收到0x15,查CH375HM.H头文件里的定义是#define ERR_USB_CONNECT 0x15,即是检测到USB设备连接事件磁盘已连接,拔掉接收到0x82,是ERR_DISK_DISCON,磁盘断开或尚未连接的状态码。 点击DISKSIZE命令,#define CMD_DiskSize 0x72,串口发送0x57 0xAB 0x72 0x00, 0x57 0xAB是三线制时的同步码,3+1串口模式通讯时有STA#线通知MCU是命令还是数据。 手头正好有个KINGMAX的2G U盘,DISKSIZE命令发出后,返回的数据是0x00 0x04 0x00 0x3c 0x3F 0XFF,其中第一个0x00代表命令发送状态成功,第二个0x04代表返回的参数有4个字节,接下来的4个字节的参数0x003C3FFF是该物理磁盘的总扇区数,每扇区通常为512字节,即该U盘总空间物理容量是(0x3C3FFF+1)*512 = 2,021,654,528。即是通常所说2G容量U盘。 为验证,把U盘插上电脑,用专业的WINHEX 15.1 SR-8软件查看该U盘的一些基本物理信息,如图(1)所示。Total Capacity 2,021,654,528 bytes,与使用U盘读写模块DISKSIZE查询后的信息一致。另外借助专业的WINHEX分析软件,开始全面了解FAT16/FAT32文件系统存储机制。
|