AVR的bootloader的设置步骤教程及注意事项

一些注意事项:
1.熔丝位的烧写:bootrst要进行编程,这样单片机在复位后自动跳转到bootloader区执行bootloader的代码,然后要根据自己bootloader的大小设置boot区的的熔丝位:具体设置如下图,这里我选择的是1024大小(注意1代表为编程,0代表已编程):
2.设置引导区锁定位:为了保护bootloader不被应用程序修改或者擦除,所以要对其进行保护,atmega提供了熔丝位的保护方式,具体设置如下图(我设置的为blb0为11,blb1为00):
3.flash页的设定:因flash的擦除和写入是按照页来操作的,看手册上说是1页有128个字节,但实际调试时候发现需要一次写入256个字节才有效的,如果按照128来写入,会将第二个128的内容覆盖掉第一个128字节的内容,那就按照实际为准了。
4.xmodem协议的注意事项:具体的xmodem不在本文叙述了,只说一下要注意的地方,校验和是可以选择的,我使用的是checksum(就是单纯的累加),也可以选择16为的crc,这个是根据单片机第一次返回的响应字节来确定的,另外当包的序列号超过255时会重新从0开始而不是从1开始,首次传输是从1开始编号的,这个要注意一下。
5.文件格式文件:和网上好多人一样,遇到同样的文件,在bootloader将应用程序烧写到flash中后,发现没有执行应用程序,开始我也以为是跳转不成成功的问题,上网查了半天都没找到答案,都是问问题的l。没办法,靠自己了,一致纳闷,烧写到flash中的程序和原始文件内容一模一样怎么就不能执行啊,后来偶然用烧写软件打开要烧写的固件,发现内容和我用16进制工具打开的并不一样,oh my god,豁然想到了问题的关键,原来用icc生成的hex文件是intel hex形式,intel hex文件是由一行行符合intel hex文件格式的文本所构成的ascii文本文件。在intel hex文件中,每一行包含一个hex记录。这些记录由对应机器语言码和/或常量数据的十六进制编码数字组成。intel hex文件通常用于传输将被存于rom或者eprom中的程序和数据。大多数eprom编程器或模拟器使用intel hex文件。而实际存储到flash中的数据是要从这个hex文件中提取出来,然后在通过xmodem发送到单片机,不要直接发送icc生成的hex文件,转换的话可以自己写一个小工具或者上网搜类似功能的工具,为了省事,我找了一个叫hex2bin的工具做的转换。

东进统一安全认证平台 安全服务需持续更新
华为荣耀V9今日发布:麒麟960+4000mah+6g内存,荣耀V9你会买吗?
音质好性价比高的蓝牙耳机有哪些,无线蓝牙耳机推荐高性价比
瑞为智慧零售解决方案 助力构建起了“AI+零售”的全新业态
求一种3D目标检测中点云的稀疏性问题及解决方案
AVR的bootloader的设置步骤教程及注意事项
icmp和ping的区别
Ixia推出CloudStorm网络安全测试平台
双十一预售5大数码家电推荐,你的购物车添加了么
锂电隔膜在线缺陷检测系统的相关功能说明
微软Surface Laptop怎么样?Surface Laptop配置表出炉
基于LF2407A芯片和CAN总线实现分布式工业监控局域网络解决方案
以AI为基础的药物研发公司成为最受青睐的投资对象
modelsim波形仿真的基本操作了解
苹果无人驾驶研究成果 VoxeNet可助探测3D物体
节省和存放数码相机电池的方法与技巧
关于压降式并行电源供应特点介绍
芯片法案通过对全球半导体影响剧烈,中国内地语音芯片或将受阻!
聊聊芯片设计、流片那些事
只有一个输出端的时钟信号线能够实现差分线吗