MOLY-DO 分為兩個部分,,其一為上位機,,即常用的 Windows 應(yīng)用程序,提供對 LPC3250的各種操作;其二為下位機,,即可獨立運行在 LPC3250 上的固件程序,,它包括 LPC3250 各種外圍設(shè)備的驅(qū)動程序以及下位機主體 USB Device 子系統(tǒng)。
硬件工具:
○ ARM9 參考板一塊(本文以 LPC3250 終端設(shè)備為例);
○ 一臺有串口和 USB 接口的 PC 機;
○ 串口線(直連)和 USB 打印線各一根,。
工作原理
使用串口線和 USB 打印線分別連接LPC3250 終端設(shè)備的 UART5 插槽和 USB-B 型接口到 PC 機,。運行上位機 MOLY-DO 彈出一個登陸框,,可選擇串口以及參考板類型,然后連接登錄 MOLY-DO 上位機主界面,,其中在登錄的過程中通過串口下載usb_burn.bin 映像文件到LPC3250 SRAM,,此時 LPC3250 終端運行 usb_burn.bin 映像中的固件程序,完成 LPC3250 下位機的初始化,。
在上位機主界面,,可以對LPC3250 終端設(shè)備上的 SRAM、SDRAM,、NANDFlash,、NORFlash 以及 SPIFlash 進行讀寫操作。如:燒寫一級啟動代碼 restore.bin 到 NANDFlash 的第 0 塊,,燒寫 u-boot 映像,、linux 內(nèi)核和文件系統(tǒng)映像到 NANDFlash 中。
1.下位機
開發(fā)工具:KEIL MDK 3.22a 或 GCC
難點:LPC3250 中斷處理,、USB Device 驅(qū)動程序以及 restore 等啟動程序的頭文件的燒寫,。
在 IRAM 中運行固件程序,自定義 USB Device 類型,,配合 PC 機 USB Device 驅(qū)動程序與上位機通信,。在下位機中實現(xiàn)各種外圍設(shè)備模塊的功能,特別是某種存儲器的讀寫操作,。USB Device 子系統(tǒng)
1.LPC3250 USB 設(shè)備控制器
USB 是一種 4 線總線,,它支持一個主機同時與多個外設(shè)(最多可達 127 個)之間的通信。主機控制器通過基于令牌的協(xié)議給相應(yīng)的設(shè)備分配 USB 帶寬,。USB 總線支持設(shè)備的熱插撥和動態(tài)配置,。所有傳輸都由主機控制器來啟動。主機定義 1ms 幀的數(shù)據(jù)傳輸,。每幀包含 SoF 標記和與設(shè)備端點之間傳輸?shù)臄?shù)據(jù)處理,。每個設(shè)備最多包含有 16 個邏輯或 32 個物理端點。定義了 4 種類型的端點傳輸方式,??刂苽鬏斨饕糜谠谠O(shè)備連接時對設(shè)備進行枚舉以及其他因設(shè)備而已的特定操作。中斷傳輸用于對延遲要求嚴格,、小量數(shù)據(jù)的可靠傳輸,,如鍵盤、游戲手柄等,。批量傳輸用于對延遲要求寬松,,大量數(shù)據(jù)的可靠傳輸,,如U 盤等,。同步傳輸用于對可靠性要求不高的實時數(shù)據(jù)傳輸,,如攝像頭、USB 音響等,。
設(shè)備控制器使能與 USB 主機控制器之間的 12 Mb/s 的數(shù)據(jù)傳輸,。它由寄存器接口、串行接口引擎,、端點緩沖存儲器和 DMA 控制器組成,。串行接口引擎對 USB 數(shù)據(jù)流進行譯碼,并將數(shù)據(jù)寫入相應(yīng)的端點緩沖存儲器,。結(jié)束后的 USB 傳輸或錯誤條件的狀態(tài)由狀態(tài)寄存器來指示,,產(chǎn)生中斷(如果能中斷使能)。使能時,,DMA 控制器將控制端點緩沖區(qū)和 USB RAM 之間的數(shù)據(jù)傳輸,。MOLY-DO 下位機 USB
MOLY-DO 采用 USB Full Speed 協(xié)議。邏輯端口 0 用于初始化 USB Device,,在 USB 設(shè)備描述符中,,我們采用自定義設(shè)備。選用邏輯端口 1,、2 用于數(shù)據(jù)傳輸;其中邏輯端口 1 發(fā)送命令字,,邏輯端口 2 用于數(shù)據(jù)傳輸。
使用 DMA 模式傳輸,,有關(guān) DMA 模式傳輸,,詳情請見 LPC32x0 用戶手冊。
通過 USB 能夠?qū)?SDRAM,、SRAM,、NANDFlash、NORFlash,、SPIFlash 等存儲器外設(shè)進行操作,,下面將對 NANDFlash 操作進行簡單介紹。
1.NANDFlash 操作
LPC3250 有兩個 NAND Flash 控制器,,一個用于 multi level NAND Flash 設(shè)備而另外一個用于 single level NAND Flash 設(shè)備,。
在 MOLY-DO 下位機中,完全實現(xiàn) SLC,、MLC NAND 設(shè)備驅(qū)動程序,,以供 application() 程序所調(diào)用。例如使用nand_write_sector() 函數(shù)燒寫 kickstart.bin 至 NANDFlash 中,。
目前,,下位機系統(tǒng)已支持三星 K9F2808、K9F5608等小頁和 K9F1G08,、K9F2G08等大頁以及 ST NAND128-A,、NAND256-A,、NAND512-A、NAND01G-A等多種 NANDFlash,。
同時,,下位機還支持 SST 39VF6401B 等 NORFlash 以及 MX25L1605D 等 SPIFlash。
2.USB Device 驅(qū)動程序
開發(fā)工具:
○ DDK或WDK,、BusHound 5.0,、DriverStudio_3.0 和 VC++ 6.0
原理:
實現(xiàn)LPC3250 USB Device自定義設(shè)備類型驅(qū)動,開辟兩個邏輯端點分別用于指令和數(shù)據(jù)的傳輸,。API 如下:Usb_Link_Data_Write,、Usb_Link_Data_Read、Usb_Link_CMD_Write,、Usb_Link_CMD_Read,。
生成:
MOLY_DO_LIB.dll、MOLY_DO_LIB.lib,、usb_link.inf,、usb_link.sys上位機
開發(fā)工具:Microsoft Visual Studio 2005、BusHound 5.0
原理:通過串口使用 CComPort 類與 LPC3250 通信,,完成固件代碼搬移;配置 USB 設(shè)備驅(qū)動程序,,查找 LPC3250 USB 設(shè)備,實現(xiàn)與下位機通信,,完成對各種存儲設(shè)備的操作,。注:有關(guān)UART啟動握手,詳見上文或 LPC3250 用戶手冊,。
難點:CComPort類,、主界面控件移動處理如:CControlPos、CSplitCtrl,、CPTabCtrl等類的實現(xiàn),。
1.LPC3250 UART5 啟動
LPC3250 支持多種啟動方式。啟動程序可以識別,、復制到內(nèi)部 SRAM(IRAM)并從如下外部源上執(zhí)行一個外部程序:
○ 使用UART5 或 USB 收發(fā)器的 UART 啟動,。
○ SLC/MLC NAND Fflash 啟動。
○ 使用 SSP0 的 SPI 啟動,。
UART5 啟動
UART 數(shù)據(jù)下載協(xié)議假設(shè)一個外部設(shè)備已經(jīng)連接到 UART5 或 設(shè)置為 UART 模式的 USB 收發(fā)器,。數(shù)據(jù)下載協(xié)議的第一個動作就是從 UART5 發(fā)送一個 boot_id,外圍設(shè)備預計回應(yīng)一個 ‘A’(0x41),。如果收到一個 ‘A’,,UART5 再發(fā) boot_id。外圍設(shè)備預計回應(yīng)一個 ‘U’(0x55)和一個 ‘3’(0x33),。如果 ‘U’ 和 ‘3’ 被接收到,,之后 UART5 回應(yīng)一個 ‘R’(0x52),。外圍設(shè)備然后會預計發(fā)送一個起始地址(32 位值;以 4 個 UART 字節(jié)連續(xù)發(fā)送),接下來是代碼數(shù)量(32 位值;以 4 個 UART 字節(jié)連續(xù)發(fā)送)的傳輸,。在此時,代碼將被傳輸,。傳遞的代碼按字節(jié)高低順序存放在起始地址,,且當接收到正確數(shù)量的代碼后,開機程序跳轉(zhuǎn)到傳輸代碼的起始地址并退出,。開機程序已經(jīng)放棄控制并轉(zhuǎn)移到開始執(zhí)行下載的程序,。
如果 ‘A’、’U’,、’3’ 不是在 1 秒之內(nèi)被接收到,,超時,開機程序跳至正常啟動程序,。
主應(yīng)用程序
MOLY-DO 主窗口類CMOLYDODlg 同樣是一個 CDialog 類,。在 CMOLYDODlg 類中,實現(xiàn) CScrollBar(滾動條),、CLRichEditCtrl(控制臺),、CControlPos(控制控件)、CSplitCtrl 等公用子類以及各種存儲器的操作窗口類:CTabNANDDlg,、CTabNORDlg,、CTabSPIDlg、CTabSDRAMDly,、CTabSRAMDlg,。
自定義類 CMainOpt 用于 MOLY-DO 的主操作。在此類中,,通過 USB 完成與下位機的各種通信任務(wù),,如:執(zhí)行操作(發(fā)命令字)、發(fā)送文件,、接收文件,、對比文件等等。主應(yīng)用程序結(jié)構(gòu)圖如圖3,。