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