歷時(shí)兩天寫PIC32的bootloader程序,一直想寫,今天終于靜下心來寫了
1,,編譯環(huán)境:MPLAB X IDE V3.55? pickit3? XC32 V1.42
2,,波特率115200 8N1 上位機(jī)用的官方的,單片機(jī)是PIC32MX695F512L
3,,直接運(yùn)用harmony里的bootloader程序,因?yàn)椴皇怯玫墓俜介_發(fā)板,當(dāng)然要根據(jù)自己的板子來修改按鍵,LED,和bootloader存放位置,UART口等;
D:Microchipharmonyv1_06_02appsbootloaderbasic_695_boot bootloader程序
D:Microchipharmonyv1_06_02appsbootloaderbasic_695_app app程序
4,,bootloader和app的配置字要一模一樣,不要有任何區(qū)別,否則可能會(huì)出錯(cuò);
5.,,bootloader的位置要在boot區(qū);需要修改linker script來放置bootloader,下面是bootloader鏈接腳本部分.注意:_RESET_ADDR =kseg1_boot_mem !!
/*************************************************************************
* _RESET_ADDR? ? ? -- Reset Vector
* _BEV_EXCPT_ADDR? -- Boot exception Vector
* _DBG_EXCPT_ADDR? -- In-circuit Debugging Exception Vector
* _DBG_CODE_ADDR? ?-- In-circuit Debug Executive address
* _DBG_CODE_SIZE? ?-- In-circuit Debug Executive size
* _GEN_EXCPT_ADDR? -- General Exception Vector
*************************************************************************/
_RESET_ADDR? ? ? ? ? ? ? = 0xBFC00000;
_BEV_EXCPT_ADDR? ? ? ? ? = (0xBFC00000 + 0x380);
_DBG_EXCPT_ADDR? ? ? ? ? = (0xBFC00000 + 0x480);
_DBG_CODE_ADDR? ? ? ? ? = 0xBFC02000;
_DBG_CODE_SIZE? ? ? ? ? ?= 0xFF0;
_GEN_EXCPT_ADDR? ? ? ? ? = _ebase_address + 0x180;
6,,.修改bootloader 主程序,改為按鍵啟動(dòng)bootloader
7,,.通過harmony配置為UART4,并且用的是485自動(dòng)收發(fā),這樣就不用在bootloader里面增加485使能控制腳了,并且485距離更遠(yuǎn);
8,,.bootloader編譯完就OK了,用pickit3下載到單片機(jī)里,按住按鍵重啟就進(jìn)入bootloader了,黃燈和藍(lán)燈亮,綠燈閃爍,紅燈是電源燈,因?yàn)榘存I不方便,所以我換成撥碼盤上的一位了,接反雙手,下面是板子
9,,.以后就可以在線升級(jí)了,不需要燒寫器了,描述一下具體步驟,接上USB485轉(zhuǎn)換器,485的A,B線接上單片機(jī)板子,撥碼盤第六位撥上去,上電(如果已經(jīng)上電的話,可以按復(fù)位鍵復(fù)位),打開PIC32UBL.exe,選擇相應(yīng)的串口,點(diǎn)擊connect,出現(xiàn)bootloader版本號(hào)后,load hex,選擇你的app程序,然后直接點(diǎn)擊erase-program-verify 至此就成功了,撥碼盤撥下來,單片機(jī)復(fù)位或者重啟就好了,就會(huì)直接運(yùn)行app程序哈哈,開心!!
后記:
1,,我是先在MPLAB X IDE V4.00上實(shí)現(xiàn)的,但是由于不習(xí)慣4.0的環(huán)境和harmonyv2_04,改編成MPLAB IDE V3.55了,
2,,之前搞過PIC32MX230F064的,沒成功,看手冊(cè)上是比較特殊,況且用的USB,可能空間不夠,下次有時(shí)間在升級(jí)考慮考慮吧.
3,,另外要注意進(jìn)不了app的情況,查找出的原因是bootloader里面有個(gè)判斷,如果按鍵沒按下就要進(jìn)去app里,而不是一直繼續(xù)等待,源程序問題,要修改哈.另:485自動(dòng)收發(fā)受波特率的限制最高115200,切記
4..經(jīng)檢驗(yàn)debug后會(huì)擦除所有程序,,包括bootloader,,并且調(diào)試時(shí)要把鏈接文件app.ld移除,調(diào)試好了,再放進(jìn)去,一定要看AN1338文檔,非常有用哈
5,,這次就先寫bootloader的了,下次寫app的,由于是很少寫博客,寫的不好請(qǐng)見諒,肯定有部分描述的不是很清楚,有任何疑問聯(lián)系我或者留言哈
審核編輯?黃昊宇
評(píng)論
查看更多