陶春榮,游新望,秦 雅
(中國船舶重工集團公司第七二四研究所,南京 211153)
TMS320F2833x(以下簡稱F2833x)是德州儀器公司(TI)推出的支持高性能集成外設的32位微控制器,廣泛應用于實時控制領域。該系列芯片一般通過JTAG接口進行軟件程序的加載,能夠滿足調試需求,但在進行現(xiàn)場軟件的升級時可能存在現(xiàn)場環(huán)境惡劣難以到達、結構件拆卸困難等問題。所以,研究基于遠程控制的DSP芯片網絡加載方法可提高程序更改升級的便利性和靈活性,具有重要的實用和推廣價值。
F2833x系列DSP集成了大量的外設供控制使用,具有改進的哈佛結構,還兼有RISC處理器的代碼密度和DSP的執(zhí)行速度,其最高主頻可達150 MHz,內部集成了一個單精度浮點單元,并配置了一定容量的閃存(FLASH),可用于DSP程序的存儲及執(zhí)行。該系列芯片支持軟件引導模式,通過引腳配置可以實現(xiàn)SCI、SPI、CAN、I2C、McBSP、XINTF和并行I/O等加載方式。
本文設計了一種基于TM4C129x系列ARM芯片的網絡加載方法。通過SCI-A口將TM4C129x芯片與F2833x連接,采用了SCI-A的引導模式,并結合F2833x的Bootloader實現(xiàn)其網絡在線燒寫和加載,進行了具體的硬件設計、TM4C129X軟件設計、二次引導程序設計及上位機程序設計,實現(xiàn)了F2833x芯片程序的網絡加載升級功能。
F2833x系列DSP內部都固化了ROM存儲器。ROM資源里包含了Bootloader程序。Bootloader程序在系統(tǒng)通電后能自動將存放在外部載體的用戶代碼引導到FLASH存儲器的任何空間或片內SARAM中。對于F2833x系列DSP來說,當上電復位后,芯片自動運行引導加載程序。該程序將判斷GPIO84~87引腳的電平狀態(tài),根據引腳電平狀態(tài)選擇相對應的引導方式,然后引導加載程序將外部的程序加載到芯片內部的SARAM中,最后根據引導加載程序指定的程序入口地址在片內SARAM中運行相應的程序,完成芯片的引導啟動。
F2833x上電后,首先處于復位狀態(tài),當復位引腳置高時器件退出復位狀態(tài),器件從復位向量(0x3FFFC0)處開始運行。該處存放著BootROM的初始引導程序InitBoot程序的入口地址。InitBoot程序是由廠家固化到BootROM中的。此時,程序跳轉到0x3FFC00處運行InitBoot程序。該程序首先讀取安全保護模塊的密碼,然后初始化例程調用模式選擇功能函數(shù)(SelectBootMode)。該函數(shù)根據GPIO引腳84~87的狀態(tài)確定DSP的引導方式,引導方式與控制引腳間的關系見表1。上電復位后,默認使能這4個GPIO引腳內的上拉功能。此時,必須設定好相應控制引腳的電平狀態(tài),在引導加載程序中將會對相應的引腳電平進行采樣,之后決定進入何種引導方式。SCI、SPI、并行引導等幾個啟動模式還需要進一步調用Bootloader搬移程序。一旦完成SelectBootMode將會把入口地址返回給初始化引導程序(InitBoot),然后初始化引導程序調用恢復CPU寄存器的退出例程(ExitBoot)并退出到由引導模式確定的程序入口地址,從而完成硬件引導進入用戶程序引導并開始運行用戶程序。
表1 引導模式與控制引腳的關系
從F2833x引導模式可以看出,由于該芯片本身不具備網絡引導的功能,所以要完成程序的網絡燒寫及加載需要具備下面兩個條件:
(1) 需要有一塊具備網絡接口和SCI、I2C、CAN等數(shù)字接口的MCU來實現(xiàn)網絡通信,以及對F2833x的引腳控制和數(shù)據加載工作。
(2) 需要制作專用的二次引導程序,以此來實現(xiàn)F2833x與MCU的數(shù)字通信,以及對其內部的FLASH進行燒寫的工作。
只有具備了上述兩個條件才能實現(xiàn)F2833x的網絡燒寫、加載功能。因此,本方案采用了TI公司的TM4C129x芯片作為網絡加載的主控MCU。該芯片采用的是ARM-M0結構,具備以太網、USB、CAN、I2C、SCI的豐富的電路接口功能,同時在該芯片上可以運行TI公司專用的實時操作系統(tǒng)。該芯片功能強大到完全可以滿足與上位機的以太網通信,以及對F2833x的引腳控制和數(shù)據交互功能,從而實現(xiàn)F2833x的網絡燒寫、加載功能。在本方案中F2833x采用的是SCI-A引導模式。這種異步串口引導模式具有實現(xiàn)簡單、穩(wěn)定可靠的特點。
F2833x的SCI引導模式采用的是異步方式從SCI-A端口將代碼引導到F2833x中。這種方式使用的是8位的數(shù)據模式。F2833x通過SCI-A口同主機進行通信,其波特率自動檢測功能可以用來鎖定主機的通信速率。當完成通信速率鎖定后F2833x和主機開始進行數(shù)據傳輸。每接收到一幀主機傳來的8位數(shù)據,F(xiàn)2833x都會將此幀8位數(shù)據再返回給主機。通過這種方式,主機可以檢驗F2833x接收到的字符與發(fā)送的字符是否一致,從而保證通信數(shù)據的完整性。SCI-A的引導流程圖如圖1所示。
圖1 SCI-A引導流程圖
根據F2833x引導流程要實現(xiàn)該芯片引導模式的變化需要GPIO84~GPIO87,以及復位管腳這5根控制管腳的共同作用。本文采用的是SCI-A的引導模式。因此,主控的MCU不僅要控制這5根控制管腳,而且還需要異步串口與F2833x相連接從而完成對F2833x的數(shù)據流控制及傳輸。電路設計圖如圖2所示。
圖2 硬件電路示意圖
由于TM4C129x接口豐富,包含有多路物理GPIO端口和多路UART異步串行數(shù)據總線接口,其每個物理GPIO端口均可編程為輸入/輸出管腳。在本方案中采用TM4C129x芯片的GPIOA3~GPIOA7端口作為控制管腳與F2833x的5根控制管腳相連接,采用UART0接口與F2833x的SCI-A接口相連,以此來實現(xiàn)對DSP引導模式的控制及程序的加載。利用TM4C129x的以太網控制器實現(xiàn)與上位機的網絡通信,通過專用上位機軟件來實現(xiàn)對DSP的引導及程序加載。
2.2.1 TM4C129x軟件設計
TM4C129x主要完成從網絡接收上位機發(fā)來的網絡加載命令及需要加載的程序。為了確保加載程序在網絡傳輸中不發(fā)生丟幀等錯誤,TM4C129x與上位機采用的是可靠的TCP協(xié)議進行通信。接收到上位機的網絡加載命令后TM4C129x通過5根控制管腳控制F2833x進入到SCI-A引導模式,然后TM4C129x將二次引導程序通過SCI-A口加載到F2833x中。加載完畢后復位F2833x讓其運行加載好的二次引導程序。二次引導程序將與TM4C129x進行SCI-A串口的握手通信。握手成功后TM4C129x將上網機發(fā)來的需要加載的程序通過SCI-A串口傳輸?shù)紽2833x中。傳輸完成后F2833x的二次引導程序將進行對F2833x內部FLASH空間的擦除及重新燒寫接收到的加載程序工作。上述工作完成后,F(xiàn)2833x通過串口發(fā)送加載完成信號。這時,TM4C129x將控制管腳置為FLASH引導狀態(tài),同時復位F2833x完成對其的網絡加載。
2.2.2 二次引導程序設計
從F2833x的引導方式可以知道,SCI-A引導模式只能實現(xiàn)從外部加載程序到F2833x內部并開始運行,并不能實現(xiàn)將程序燒寫到F2833x的FLASH內。若要實現(xiàn)在線的FLASH燒寫必須采用二次引導的模式,即編寫一段二次引導程序。該程序可以實現(xiàn)F2833x與TM4C129x的數(shù)據通信功能,同時能將接收到的加載數(shù)據按照F2833x的指定格式燒寫到其內部相應的FLASH空間中去。通過閱讀F2833x的數(shù)據手冊發(fā)現(xiàn)TI公司提供了在線燒寫F2833x內部FLASH的API函數(shù)。利用該函數(shù)可以實現(xiàn)在線燒寫F2833x程序的功能。二次引導程序首先初始化F2833x的時鐘,然后配置其SCI-A串口(實現(xiàn)與TM4C129x的通信),隨后等待TM4C129x的握手信號。收到握手信號后發(fā)送握手成功信號至TM4C129x,然后等待TM4C129x的燒寫命令。當接收到燒寫命令后F2833x將先接收需要燒寫的加載程序,而后調用燒寫FLASH的API函數(shù)擦除FLASH的相應區(qū)塊并完成最終的加載程序燒寫。具體的程序流程如圖3所示。
圖3 二次引導程序流程圖
二次引導程序在設計中有幾個需要特別注意的要點:
(1) 二次引導程序在配置編譯所需的CMD文件時需要將其工作模式配置成RAM工作模式,因為只有這樣專用的燒寫FLASH的API函數(shù)才能正常運行,否則會無法完成對FLASH的正常燒寫。
(2) 在需要燒寫的加載程序的CMD文件的地址空間分配應與二次引導程序設定的燒寫地址相匹配,否則會產生燒寫成功但無法正常實現(xiàn)FLASH引導的問題。
(3) 在二次引導程序中一定要注意對CSM區(qū)塊的檢查及保護。因為該區(qū)塊是F2833x的保護區(qū)塊,一旦被燒寫了數(shù)據便會造成F2833x內部FLASH的鎖死保護。如果不知道燒寫數(shù)據的內容,F(xiàn)2833x芯片將無法再次進行FLASH的燒寫,從而造成芯片的報廢。
(4) 二次引導程序是由TM4C129x通過F2833x的SCI-A引導模式加載到F2833x并運行的,因此這段程序是以SCI-A引導模式的數(shù)據格式存儲在TM4C129x內部的,而F2833x編譯完成的數(shù)據格式無法直接用在SCI-A引導模式上,需要利用TI公司提供的hex2000軟件將其轉換成標準SCI-A引導格式后才能使用。
2.2.3 上位機程序設計
上位機程序采用Visual C++編制而成的,主要是完成對TM4C129x的網絡地址掃描,與TM4C129x建立起TCP連接,發(fā)出相關的控制指令,控制TM4C129x對F2833x進行相關的操作(CSM保護塊檢查、FLASH區(qū)塊擦除等操作),將需要加載的程序通過TCP連接傳輸?shù)絋M4C129x上從而實現(xiàn)對F2833x的網絡加載和燒寫。該程序采用的是多進程的體系架構,由獨立的通信進程負責網絡數(shù)據的傳輸,從而避免了單一進程大數(shù)據量傳輸時界面會假死的現(xiàn)象。同時,為了保證傳輸數(shù)據的一致性,上位機程序與TM4C129x采用的是帶數(shù)據校驗的傳輸模式。傳輸?shù)拿繋瑪?shù)據均會回傳給上位機進行數(shù)據校驗,當出現(xiàn)數(shù)據不一致時將會給出報錯信息,進一步對傳輸?shù)臄?shù)據起到了保護作用。
通過上述方法可實現(xiàn)對F2833x的網絡加載和燒寫,只需要一臺上位機通過一根網線就可以實現(xiàn)對F2833x的程序更新。該方法已經在多型產品的伺服控制平臺上使用,應用穩(wěn)定可靠、效果良好,進一步改善了調試環(huán)境并簡化了調試步驟,具有很好的實際應用和推廣價值。