ASM 板


LINE

看板 ASM  RSS
轉載至: http://www.usblab.idv.tw/phpbb2/viewtopic.php?p=5758& sid=b0589d59e98dbb27ff2e618971794d53 首先...bootload的用意在於可以應用現有的介面(常見的有uart,spi,i2c,usb)來更新ap code...做法實在有很多種,再此說明整個bootload需要注意的地方 //------------------------------------------------------------------------------- 1.決定boot code的位址 在mcu的最開始0x00或是最後段的空間(例如 0xfe00)來擺放boot code的空間,不論在前或 是在後都可以. 2.使用何種介面來傳送資料 常見的有uart,spi,i2c,usb...但是不建議使用USB,因為USB的通訊協定太複雜 ,並不是判斷中斷旗標就可以完成的事情,所以並不建議,最常用的介面是uart 3.進入boot code的判斷方式 有硬體(io判斷), 也有軟體(eeprom or flash)判斷.兩種各有好處.最常用的應該是軟體 吧. 4.mcu一定要能夠自己存取mcu內部的flash. 這是基本概念,某些mcu就不能自己存取mcu內部的flash,那就不能做bootload的功能. //-------------------------------------------------------------------------------- 以下是bootload的其中一種方式 BOOT ROM 在FLASH的最前面 +-----------------+------------------------------------+ | BOOT | APPLICATION | +-----------------+------------------------------------+ 00 0X200 END 其中boot code佔用flash 位址 0x00~0x1ff 而ap code佔用的flash位址 0x200~end //--------------------------------------------------------------------------------- ap code撰寫 如同一般程式寫法,將整個電路板需要的功能透過程式表達出來. 完成之後需加入兩件事: A. 判斷boot code進入方式 硬體:判斷io後,hi==>進入boot code, low==>就進入ap code 軟體:判斷介面接收資料為進入boot code的command則,設定內部的eeprom or flash (例 如:設定eeprom addr 0x00 data=0x5a),然後就進入boot code B. 進入boot code 可以為reset or LJMP 0000h 之後設定compiler的hex產生偏移位址從0x200開始.(幾乎所有的 compiler都會有此設定 ) //---------------------------------------------------------------------------------- boot code撰寫 A.設定int vector的位置 因為mcu所以int vector最在mcu的最前端,所以ap code產生的任何中斷都會跳到mcu的最 前端位置,所以必須再boot code中定義將int vector指定到其他地方,例如0x03指定到 0x203, 0x0B指定到0x20B....依序類推,讓ap的中斷發生時會先跳到0x03的位址,但是 boot code已經將0x03的位址指定到0x203(AP的0x03中斷常式,因為compiler的hex偏移位 址,所以變成0x203)的位置去.(組合語言中會看到0x03的位址程式碼為 LJMP 203H). B.判斷boot code進入方式 硬體:判斷io後,hi==>進入boot code, low==>就進入ap code 軟體:讀取 eeprom addr 0x00 data=0x5a,判斷是否為0x5a, yes==>進入boot code, no==>就進入ap code C.判斷介面中斷旗標 輪詢bootload介面的中斷旗標(例如 uart的接收旗標RI),接收資料後可以先將資料放在 ram中,之後清除一個block的flash空間,再將資料從ram中寫入flash理,等完全接受完畢後 ,必須設定eeprom addr 0x00 data=0x00,然後mcu自我reset,從新判斷是否要進入boot code //--------------------------------------------------------------------------------- 注意事項: 1.boot code的大小必須注意不可超過boot code的擺放空間. 2.hex file的產生是不連續的,您可以將hex file先透過燒錄器讀取後,之後另存相檔,這 樣hex file就會變成連續的,這樣的好處讓可以減少寫boot code的負擔.(可以依照flash 的位址0x200開始連續寫入) 3.您也可以將 boot hex 與 ap hex整合在一起後透過燒錄器燒錄 //--------------------------------------------------------------------------------- 以上只是說明整個bootload製作的大致流程,歡迎有興趣或是有問題的先進提出疑問,謝謝 -- ████████████████ █ █████████████ ██████████████ █ ██████████████ ██████████████ --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.250.190.103







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP