黃瀟劍
重慶邁科唯醫(yī)療科技有限公司 重慶 400714
當設備需要維護時,傳統(tǒng)的方法是通過實地,打開設備蓋子,然后連接仿真器來更新程序,但是這樣會給維護人員或者客戶帶來很多的不方便。此時通過把待升級的程序放入放在U盤,然后通過USB接口插到設備上,等待幾分鐘就完成設備的更新,這樣對產(chǎn)品的維護就帶來了極大便利。
本文是通過U盤來實現(xiàn)在線編程的,基本思路如下:
1、將主程序文件里的CMD文件中的BEGIN_FLASH的地址改為FLASH A區(qū)以外的地址;
2、把CCS生成的.out格式的主程序文件先轉(zhuǎn)換成.bin格式的主程序文件;
3、把需要更新的.bin格式的主程序文件放入U盤;
4、升級程序的編寫:①調(diào)用TI公司提供的庫函數(shù)(Flash2812_API_V210.lib)對內(nèi)部FLASH除A區(qū)以外的其他區(qū)進行擦除,擦除完畢后,調(diào)用燒寫函數(shù)將接收到的數(shù)據(jù)一段一段地燒寫進FLASH除A區(qū)以外的其他區(qū)段里,最后調(diào)用校驗函數(shù)對每一段的數(shù)據(jù)進行校驗;②需要在升級程序的末尾添加一個匯編語句指向主程序文件里的CMD文件中的BEGIN_FLASH的地址;
5、通過仿真器把升級程序下載到T MS320F2812的FLASH A區(qū);
6、將U盤插到設備USB口,通過SCIA串口通訊方式將.bin格式的主程序文件一段一段地傳輸?shù)絋MS320F2812的接收全局變量數(shù)組里;
為了實現(xiàn)程序升級,應合理規(guī)劃編譯所用的CMD文件。在本系統(tǒng)中,將程序劃分為2個模塊,一個是主程序,另一個是升級程序,用于接收U盤的更新程序數(shù)據(jù)流及FLASH燒寫等;
1、更改主程序文件里的CMD文件中的BEGIN_FLASH的地址
為了方便記憶,我將0x3F5FFE定義為主程序的起始地址
2、.bin文件的生成
1)利用hex2000.exe將?.out和?.map(定位文件)轉(zhuǎn)換成ASCII格式文件,并將flash的空白區(qū)域填充成0x FFFF。也就是說.out文件中的程序只是占據(jù)了flash的幾個部分區(qū)域,那么利用.map文件將.out的程序分配到整個flash文件的指定區(qū)域,那么其他沒有程序的地方就是0x FFFF。
2)利用FileIOShell.exe將HEX2000產(chǎn)出的ASCII格式轉(zhuǎn)換為二進制格式,這個文件的大小剛好是256 K字節(jié),對應dsp2812的整個flash(128K16位)。正如前面所述,只有幾個區(qū)段有數(shù)據(jù),其他都是0x FFFF。這里要注意的是,我用UltraEdit查看二進制文件,比如文件開頭的4個字節(jié)是這樣的12 34 56 78,那么對應的是flash的首個地址0x3D8000的內(nèi)容是0x1234(不是0x3412),第2地址0x3D8001的內(nèi)容是0x5678(不是0x7856)。
3、拷貝進U盤
4、升級程序的編寫
1)在程序中包含F(xiàn)LASH_API庫和相應的頭文件;
2)修改頭文件,選擇適合的目標芯片,如CPU時鐘頻率等;
3)初始化Flash_CPUScaleFactor;
4)初始化PLL控制寄存器PLLCR(由于我選用的架構是:升級程序,用匯編語言進行地址跳轉(zhuǎn)->主程序,故不需要,這里寫下只是為以后查看時有更多的注意點);
應用函數(shù)必須使用軟件延時或其他延時來保證PLL有足夠的時間來鎖定新的頻率;
5)初始化CALLBACK函數(shù)指針(我沒有用到,因為架構決定不需要);
當用戶在API函數(shù)執(zhí)行期間必須要完成一些其他的功能,例如系統(tǒng)有外部看門狗必須要定期清除或者必須發(fā)送信息給通信端口,此時用戶可以在CALLBACK函數(shù)中插入相應的代碼完成。
6)代碼拷貝;
①在CMD文件中添加Flash_API的庫的代碼,將Load放在Flash區(qū)間里,將Run放在RA M里;
②memcpy()函數(shù)放在系統(tǒng)初始化函數(shù)后;7)芯片解鎖;
需要在運行API函數(shù)前解鎖CSM單元;
8)配置CMD文件;
①初始化的數(shù)據(jù)、代碼必須要存放到非易失性存儲器
②未初始化的數(shù)據(jù)、代碼可以放在RAM里;
③將升級程序只能放入FLASH A扇區(qū),因為芯片啟動默認地址是0x3F7FF6,這個地址在FLASHA扇區(qū);
9)在升級程序的末尾添加一句匯編語言指向主程序的起始地址,即:asm("LB 0x3F5FFE");
5、將升級程序下載到TMS320F2812的FLASH A區(qū)
6、將U盤插到主機的USB接口,即可自動完成升級
本文提供的方案在第一次使用時,需通過仿真器燒入更新所需的升級程序,以后對程序的改動均可通過U盤更新來完成。方案的主程序大小均為256KB,需要6分鐘即可完畢。
該種方案可以滿足所有基于TI公司的TMS320F2812的嵌入式系統(tǒng)的升級開發(fā)需要,并且十分簡單,易操作。