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灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP