引言 在線編程(In-Circuit Programming,ICP)是目前普遍應用的一種速度較快的MCU編程方式。對于筆者使用的Freescale半導體公司的8位MCU來講,通過芯片本身的串行通信接口進行在線編程的速度比使用芯片自帶的MON08或BDM接口進行編程的速度要快得多。除了使用串行通信接口進行編程,由于自帶USB 模塊的芯片增多,使用USB接口進行在線編程速度更快。同時,由于可以使用USB供電,所以使用的電纜更少。 但筆者也發現,大部分在線編程系統都包含了PC方程序和MCU方程序兩部分,在線編程時需要運行PC方的程序方可進行,但很多時候會遇到因主機或操作系統平臺更換而引起PC方程序無法運行的情況。針對此種問題,筆者嘗試在Freescale半導體公司新推出的帶有USB模塊的MCF51JM128芯片上實現了類U盤方式的在線編程功能:像U盤一樣直接將目標文件放入便可實現編程,省卻了PC方程序,方便了用戶實際使用。 MCF51JM128(以下簡稱“JM128”)是Freescale半導體公司于2008年推出的一款Coldfire V1內核系列的微控制器,該芯片主要特點是內含一個集成的USB控制器,支持USB2.0全速主機、設備和On-The-Go。這種配置一般出現在高端微處理器中,在其他微處理器中很少出現,可以說是JM128非常有競爭力的特色。 1 設計思路 實現類U盤方式的在線編程功能,主要的工作在于實現JM128的類U盤功能。筆者在學習期間參與過在線編程系統的開發,其中一些已有的功能模塊可以借鑒使用。該設計的主要思路是,通過開發板上的某引腳狀態判斷是否進入在線編程狀態,若進入則對USB模塊進行初始化,完成與PC機的U盤枚舉的交互工作。 JM128不斷查詢PC方對U盤的操作,用戶此時可打開U盤將目標文件粘貼,JM128一邊接收目標代碼數據包一邊對數據包進行分析,若符合要求則對 Flash編程操作,編程結束后再接收下一包數據。這種U盤可以稱為“類U盤”而不是真正的U盤,因其并不具有與U盤相同的存儲功能。 2 軟件設計 在線編程系統的軟件部分主要包括Mass Storage類協議、FAT16文件系統、S19文件解析和Flash驅動模塊的設計。Mass Storage類協議和FAT16文件系統用于實現U盤功能,是軟件實現的重點。Flash驅動代碼的編寫可以參考JM128參考手冊“Flash存儲器”一節。 2.1 Mass Storage類協議的實現 Mass Storage類協議需要實現以下部分:一是在設備枚舉階段,提供Mass Storage-類協議描述符,這樣主機就可識別該設備為海量存儲型設備;二是在數據傳輸階段,實現Bulk-Only(批量傳輸)協議;三是實現 SCSI命令集。 2.1.1 Mass Storage類協議描述符 USB主機通過枚舉過程獲得的USB設備描述符來獲得設備類型和其他信息,并根據這些信息建立通信。這些描述符包括:設備描述符、配置描述符、接口描述符和端點描述符。 JM128芯片USB模塊作為設備控制器時共有16個雙向端點(endpoint),每個端點的每個方向都使用雙緩沖區來達到最大的傳輸吞吐量。本設計中使用了3個端點。其中端點0為雙向控制端點,用于控制傳輸,枚舉過程中USB主機僅與該端點進行交互,獲得信息。端點1和端點2用于 Bulk-Only傳輸:端點1為IN端點,用來傳輸數據至PC方;端點2為OUT端點,用來接收PC方發送過來的數據。這些在描述符中都有體現。 2.1.2 批量傳輸協議的實現 當設備被識別為Bulk-Only的海量存儲設備后即進入批量傳輸方式。在此方式下,USB主機與設備間的所有數據均通過Bulk-In和 Bulk-Out來進行傳輸,不再通過控制端點傳輸數據。 在Bulk-Only傳輸方式中,USB主機和設備之間傳送3種數據,CBW(Command Block Wrapper,命令塊包)、CSW(Command Status Wrapper,命令狀態包)和普通數據。CBW中的命令格式遵從SCSI傳輸命令集,USB設備需要分解CBW中包含的指令并執行相應命令,并向主機返回反映當前命令執行狀態的CSW。USB設備方Bulk-Only傳輸流程如圖1所示。 2.1.3 SCSI命令集的實現 SCSI有3種字長的命令:6字節、10字節和12字節。Microsoft Windows環境支持12字節的命令。SCSI命令集包含了對多種存儲設備的操作命令,對U盤而言,并不是所有的SCSI命令都要進行應答和處理,實際用到的SCSI命令如表1所列。 2.2 FAT16文件系統的實現 當開發板插入USB總線并枚舉成功后,USB主機會發送前面提到的SCSI命令。若這些命令的返回結果正確,主機接下來進入文件識別階段;如果文件系統信息出錯,則會導致USB總線復位,通信中止。 本設計中采用的是FAT16文件系統。FAT即“文件分配表”,是用來記錄存儲器中文件所在位置的表格,一旦文件分配表丟失,存儲器中的數據就會因為無法定位而不能使用。FAT16文件系統的磁盤可以分為保留區、FAT區、根目錄區和數據區。其中保留區的第1個扇區稱為引導扇區,包含對文件系統進行識別的關鍵信息;FAT區用來存放文件分配表,由于FAT表非常重要,所以通常在FAT區之后有1個相同內容的備份;根目錄區中存放目錄項,每個目錄項為32字節,記錄1個文件或目錄的信息;在根目錄區之后的數據區便是真正意義上的存放文件數據或目錄的位置,占據了存儲器大部分數據空間。 本設計功能相對固定,無需實現與普通U盤同樣復雜的文件系統,如文件存儲、動態創建/刪除等功能都可以省略,在實現功能的同時也節省了代碼空間。筆者利用常量數組定義了引導扇區、FAT區和根目錄區。 操作系統按簇來分配磁盤空間,FAT表是一一對應數據區簇號的列表,反映了所有簇的使用情況。FAT區結構如表2所列。在設計FAT區的數組時,筆者采取了簡化措施,由于無需在Flash中存儲目標S19文件和磁盤信息,所以僅僅設置了FAT表數組的表項O和表項1,其余表項做清零處理。 結語 MCF51JM128是集成了USB主機、設備和OTG功能的新款MCU,適合數據采集、數據交換等多個領域,是一款集成度非常高的芯片。利用其集成 USB模塊的特點實現的類U盤方式在線編程系統時,提高了在線編程系統的平臺適應性,提高了易用性,降低了在線編程系統的開發成本。開發其他任何帶有 USB模塊的MCU的在線編程系統時,都可借鑒本方法。同時,也可將本方法擴展到各種基于USB的編程器中,如筆者擬開發的基于MCF51JM128的 Freescale 56F8xxx系列DSP編程器。 參考文獻 1. Freescale.MCF51JM128 Data Sheet 2008 2. Freescale.MCF51JM128 Coldfire Integrated Microcontroller Reference Manual 2008 3. Freescale.AN3748 USB Bootloader for MCF51JM128 2008 4. 王宜懷.劉曉升 嵌入式技術基礎與實踐 2007 5. 馬偉 計算機USB系統原理及其主/從機設計 2004 作者:田宏偉 (江蘇省泰州市華通消防裝備廠) 劉雪蘭 (江蘇畜牧獸醫職業技術學院) 來源:《單片機與嵌入式系統應用》2009(6) |