MCF51JM128的類U盤方式在線編程設(shè)計
引 言
在線編程(In-Circuit Programming,ICP)是目前普遍應(yīng)用的一種速度較快的MCU編程方式。對于筆者使用的Freescale半導(dǎo)體公司的8位MCU來講,通過芯片本身的串行通信接口進行在線編程的速度比使用芯片自帶的MON08或BDM接口進行編程的速度要快得多。除了使用串行通信接口進行編程,由于自帶USB 模塊的芯片增多,使用USB接口進行在線編程速度更快。同時,由于可以使用USB供電,所以使用的電纜更少。
但筆者也發(fā)現(xiàn),大部分在線編程系統(tǒng)都包含了PC方程序和MCU方程序兩部分,在線編程時需要運行PC方的程序方可進行,但很多時候會遇到因主機或操作系統(tǒng)平臺更換而引起PC方程序無法運行的情況。針對此種問題,筆者嘗試在Freescale半導(dǎo)體公司新推出的帶有USB模塊的MCF51JM128芯片上實現(xiàn)了類U盤方式的在線編程功能:像U盤一樣直接將目標文件放入便可實現(xiàn)編程,省卻了PC方程序,方便了用戶實際使用。
MCF51JM128(以下簡稱“JM128”)是Freescale半導(dǎo)體公司于2008年推出的一款Coldfire V1內(nèi)核系列的微控制器,該芯片主要特點是內(nèi)含一個集成的USB控制器,支持USB2.0全速主機、設(shè)備和On-The-Go。這種配置一般出現(xiàn)在高端微處理器中,在其他微處理器中很少出現(xiàn),可以說是JM128非常有競爭力的特色。
1 設(shè)計思路
實現(xiàn)類U盤方式的在線編程功能,主要的工作在于實現(xiàn)JM128的類U盤功能。筆者在學習期間參與過在線編程系統(tǒng)的開發(fā),其中一些已有的功能模塊可以借鑒使用。該設(shè)計的主要思路是,通過開發(fā)板上的某引腳狀態(tài)判斷是否進入在線編程狀態(tài),若進入則對USB模塊進行初始化,完成與PC機的U盤枚舉的交互工作。 JM128不斷查詢PC方對U盤的操作,用戶此時可打開U盤將目標文件粘貼,JM128一邊接收目標代碼數(shù)據(jù)包一邊對數(shù)據(jù)包進行分析,若符合要求則對 Flash編程操作,編程結(jié)束后再接收下一包數(shù)據(jù)。這種U盤可以稱為“類U盤”而不是真正的U盤,因其并不具有與U盤相同的存儲功能。
2 軟件設(shè)計
在線編程系統(tǒng)的軟件部分主要包括Mass Storage類協(xié)議、FAT16文件系統(tǒng)、S19文件解析和Flash驅(qū)動模塊的設(shè)計。Mass Storage類協(xié)議和FAT16文件系統(tǒng)用于實現(xiàn)U盤功能,是軟件實現(xiàn)的重點。Flash驅(qū)動代碼的編寫可以參考JM128參考手冊“Flash存儲器”一節(jié)。
2.1 Mass Storage類協(xié)議的實現(xiàn)
Mass Storage類協(xié)議需要實現(xiàn)以下部分:一是在設(shè)備枚舉階段,提供Mass Storage-類協(xié)議描述符,這樣主機就可識別該設(shè)備為海量存儲型設(shè)備;二是在數(shù)據(jù)傳輸階段,實現(xiàn)Bulk-Only(批量傳輸)協(xié)議;三是實現(xiàn)SCSI命令集。
2.1.1 Mass Storage類協(xié)議描述符
USB主機通過枚舉過程獲得的USB設(shè)備描述符來獲得設(shè)備類型和其他信息,并根據(jù)這些信息建立通信。這些描述符包括:設(shè)備描述符、配置描述符、接口描述符和端點描述符。
JM128芯片USB模塊作為設(shè)備控制器時共有16個雙向端點(endpoint),每個端點的每個方向都使用雙緩沖區(qū)來達到最大的傳輸吞吐量。本設(shè)計中使用了3個端點。其中端點0為雙向控制端點,用于控制傳輸,枚舉過程中USB主機僅與該端點進行交互,獲得信息。端點1和端點2用于Bulk-Only傳輸:端點1為IN端點,用來傳輸數(shù)據(jù)至PC方;端點2為OUT端點,用來接收PC方發(fā)送過來的數(shù)據(jù)。這些在描述符中都有體現(xiàn)。
2.1.2 批量傳輸協(xié)議的實現(xiàn)
當設(shè)備被識別為Bulk-Only的海量存儲設(shè)備后即進入批量傳輸方式。在此方式下,USB主機與設(shè)備間的所有數(shù)據(jù)均通過Bulk-In和Bulk-Out來進行傳輸,不再通過控制端點傳輸數(shù)據(jù)。
在Bulk-Only傳輸方式中,USB主機和設(shè)備之間傳送3種數(shù)據(jù),CBW(Command Block Wrapper,命令塊包)、CSW(Command Status Wrapper,命令狀態(tài)包)和普通數(shù)據(jù)。CBW中的命令格式遵從SCSI傳輸命令集,USB設(shè)備需要分解CBW中包含的指令并執(zhí)行相應(yīng)命令,并向主機返回反映當前命令執(zhí)行狀態(tài)的CSW。USB設(shè)備方Bulk-Only傳輸流程如圖1所示。
評論