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