原先是用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文件系統存儲機制。
|