dsPIC(dsPIC30F4011) Bootloader原理及应用
一.實現原理
?? 1.關于24位指令占用FLASH空間的說明
??? dsPIC是16位的單片機,每一個指令為24位固定長度,一條指令在FLASH內占用3個字節,但只占用2個字節的地址空間,如果指令字節
和地址空間一一對應來看,那個指令中最高的字節一直在夢游般的游蕩在FLASH中,只有一種特殊的辦法才能讀寫這個沒有地址的指令
數據。例如、一條指令的開始存放地址為0x000000,那么下一條指令的存儲地址是0x000002,一條指令實際為3個字節,為了方便計算xc16
生成的HEX文件中將一條指令占用4字節的線性地址(最高字節填充為0),也就是說xc16生成的HEX文件中的地址和實際
?? FLASH操作地址相差一倍。
?? 2.復位
dsPIC設計風格非常實用簡約、沒有重定向復位向量等功能,上電復位時始終從0x000000處開始執行,為此boot程序的復位地址必須
放在0地址處。 要注意的是app程序所生成的可執行文件也生成覆蓋0地址處的復位向量,boot程序必須想辦法在app下載過程中不讓app
?? 的復位向量覆蓋此地址,確保每次復位都先執行BOOT程序。
?? 3.中斷向量
??? 盡管dsPIC提供了一個備用的中斷向量表,但為了程序結構簡單化,BOOT程序禁止使用中斷,BOOT程序通過查詢方式使用
定時器和UART。由于boot程序功能比較簡單不使用中斷也可輕松實現。
?? 4.配置字節
??? 為了BOOT程序可重復的下載新的APP程序,配置字節只允許在BOOT程序中配置。
???
?? 5.boot和app程序的存放位置
理論上BOOT程序可放在flash內除中斷向量外的其它任意地址,但為了寫入APP時flash地址的連續性,把boot程序放到
??? FLASH 的尾部,0x7800(字節地址0xf000)處。這樣APP程序就可以沒有什么改動的使用默認鏈接腳本就可以。
?? 那么BOOT程序如何定位到0x7800處呢?從xc16編譯器目錄下找到dsPIC30F4011的默認鏈接腳本文件 mp30F4011.gld 并復制到項目目錄
并作如下的改動后添加到項目中。
二.程序說明
?? xc16提供的c庫不支持flash頁寫入,為此為了提高效率使用了官方bootloader示例中的寫flash接口函數
這些函數有:
?
?
三.示例代碼下載
下載
?
?
總結
以上是生活随笔為你收集整理的dsPIC(dsPIC30F4011) Bootloader原理及应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何向公众号添加的邮箱链接(已解决)
- 下一篇: Office Excel 学习