AVR通用Bootloader
(目前最新版本是v4.5)基本介绍
========
这个程序的主要目的是为了提供一个具有通用性的 AVR Bootloader,不同型号的AVR单片机只需要修改一下几个简单的配置参数就可以直接使用了,不需要再修改主程序。因为现在网上流传的很多 Bootloader程序都是针对某个或几个特定型号的,在换用其它型号后,需要对程序进行较多的修改;而且很多Bootloader程序虽然实现了基本功能,但是存在着一些缺陷或隐患,或者使用起来不够方便,所以我写了这个程序。它是在网上流传的马潮老师的ATmega128 Bootloader程序的基础上,结合了我以前在PIC18单片机中使用Bootloader的一点经验,以及学习自AVR USB中一些使用宏定义的技巧,再经过多次优化和反复测试后得出的。
这个通用的Bootloader可以支持大部分具有自编程功能、带有Boot区和UART串口的AVR单片机(主要是Mega系列)。如果是多串口的单片机,可以任意选择使用其中的一个串口。程序支持RS232/RS485/RS422方式,如果程序稍加修改,也应当可以很容易的支持USI、SPI、I2C等接口。
整个Bootloader最大占用不到1K Word的空间。在最小情况下,占用的空间不到300 Word(具体占用空间的大小与单片机的型号、配置的参数、功能裁剪的多少以及程序的优化等级有关)。
主要特点
========
* 支持多种型号的AVR单片机
* 支持多串口的AVR单片机
* 支持RS232/RS485/RS422模式
* 支持多种通信波特率和时钟频率
* 自动计算波特率误差,如果波特率误差>2%,将给出错误提示
* 完全C语言编写,容易修改
* 代码高度优化,占用空间小
* 方便的功能裁剪,适应不同的要求
* 支持看门狗
* 支持使用LED指示升级状态
* 支持使用超级终端做为上位机下载软件
* 支持Flash写入校验
* 可以自定义用户程序区大小
* ...
更多内容请参考文件里带有的说明文档。
* 增加了安全升级模式
GCC源码
点击此处下载 ourdev_388493.zip(文件大小:27K) (原文件名:avrub_cn.zip)
上位机软件(Win32)
点击此处下载 ourdev_388494.zip(文件大小:341K) (原文件名:avrubd.zip)
上位机软件源码(Delphi7)
点击此处下载 ourdev_388495.zip(文件大小:139K) (原文件名:avrubd_src.zip)
* 增加了128/256位AES加密解密算法
* 修正了看门狗初始化的宏定义笔误
* 修正了LED初始化在某些情况下造成RS485错误的问题
* 优化了部分代码,减少了代码大小
上位机软件(Win32)
点击此处下载 ourdev_325785.zip(文件大小:341K) (原文件名:avrubd_v42.zip)
上位机软件源码(Delphi7)
点击此处下载 ourdev_325784.zip(文件大小:140K) (原文件名:avrubd_src_v42.zip)
(谢谢zxq6 小马哈帮助上传文件!)
GCC源码(中文版)
点击此处下载 ourdev_325322.zip(文件大小:26K) (原文件名:avrub_cn.zip)
GCC源码(英文版)
点击此处下载 ourdev_325323.zip(文件大小:25K) (原文件名:avrub_en.zip)
* 修正了MCUSR宏定义的问题
* AVRUBD中一处缓冲区调用的错误
感谢seu gab发现并解决了这个问题
上位机软件(Win32)
点击此处下载 ourdev_285382.zip(文件大小:338K) (原文件名:avrubd.zip)
上位机软件源码(Delphi7)
点击此处下载 ourdev_285383.zip(文件大小:134K) (原文件名:avrubd_src.zip)
GCC源码(中文版)
点击此处下载 ourdev_285384.zip(文件大小:23K) (原文件名:avrub_cn.zip)
GCC源码(英文版)
点击此处下载 ourdev_285385.zip(文件大小:21K) (原文件名:avrub_en.zip)
此外Jerry Jacobs建立了一个Linux下的上位机下载软件的项目, 因为我没有使用Linux, 所以请有条件的网友试用一下并提出意见.
http://code.google.com/p/avr-ub/
* 增加了128/256位PC1加密解密算法
* 修正了一个下载大文件时出错的问题
GCC源码(中文版)ourdev_271222.zip(文件大小:23K) (原文件名:avrub_cn.zip)
GCC源码(英文版)ourdev_271223.zip(文件大小:21K) (原文件名:avrub_en.zip)
上位机软件ourdev_271224.zip(文件大小:338K) (原文件名:avrubd.zip)
上位机软件源码(Delphi7)ourdev_271225.zip(文件大小:133K) (原文件名:avrubd_src.zip)
AVR通用Bootloader中文版:点击此处下载ourdev_229535.zip(文件大小:21K)
AVR通用Bootloader英文版:点击此处下载ourdev_229436.zip(文件大小:19K)
AVR通用Bootloader上位机软件:点击此处下载ourdev_229437.zip(文件大小:330K)
AVR通用Bootloader上位机软件源代码(Delphi7):点击此处下载ourdev_229438.zip(文件大小:124K)
AVR通用Bootloader中文版:点击此处下载ourdev_222855.zip(文件大小:41K)
AVR通用Bootloader英文版:点击此处下载ourdev_222856.zip(文件大小:39K)
AVR通用Bootloader上位机软件(带有中文帮助):点击此处下载ourdev_222857.zip(文件大小:477K)
AVR通用Bootloader上位机软件源代码(Delphi7):点击此处下载ourdev_222858.zip(文件大小:239K)
AVR通用Bootloader中文使用教程:点击此处打开ourdev_222859.pdf(文件大小:405K)
特别感谢网友stephon1编写此中文教程
AVR通用Bootloader英文使用教程:
http://www.scienceprog.com/testing-avr-universal-bootloader-on-atmega128/ 这个不错啊 多谢分享 谢谢。顶! 好东西啊,谢谢楼主 非常感谢,我正在找这方面的资料。 不错! 好东西!需要好好看看! 哇赛,天底下还有这么好的东东啊:)
一定要顶!感谢楼主啦! 顶,昨天刚刚测试通过了m16,在楼主帮助文件的指导下,2次通过。 计划用在产品中,谢谢楼主! 好东西 下了3.5,顶一下 顶!m32中已使用
顺便问问,大家Boot 锁定位是怎么编程的?
我一般是BLB1模式3(0.0),BLB0模式4(0.1)。 我需要1280 2560的啊 顶啊 好东西,留个记号!! 好东西,谢谢分享! 记号,谢谢分享 非常好,正在找,准备用到我们的一个产品中.谢谢楼主. 一直跟进中....,谢了 mark 太好,谢谢! 太好了,谢谢。 算然已经工作了,但在bootloader方面了解的并不多,謝謝shaoziyang ,只从有了网络我就认为网上的东西只是索取,付出与否并不重要,但在我发现了ouravr以后,这种观点渐渐有了改变,到现在,我感觉自己已经成为了我们网站的一个成员,就好像是一家人一样,只要是在电脑旁我都会每天浏览我们的论坛,无论是业界高手还是稚嫩的新手,能在这样一方空间相互交流,单单这种做法就是一种享受!在每天的工作之后,轻松的浏览我们的网页,似乎这都成了习惯!谢谢站长,也谢谢shaoziyang ,我代表喜欢我们这个家园的所有主人说声:我爱你Ouravr! 谢谢hmqxj的支持。在技术飞速更新的时代,保守只会使自己固步自封,交流才会使大家一起提高。 好东东,顶一下!! 谢谢 好用,谢谢! 留着了 顶,收藏了 谢谢楼主 留个记号 收藏,谢谢! 好好研究一下 好东西,又更新了,顶 谢谢 都下载下来了。谢谢! 顶啊!
希望能有更多人来用 正好用上,谢谢lz 楼主牛B!多谢了。。 不错
收藏了
谢谢楼主!!! 站位, good 谢谢,学习 顶一个,呵呵 顶一个! 标记 太好了,很方便,谢谢LZ mark 4.1 版本放在哪里呢??? 好东东,不要沉下去 正好要用,谢谢lz 顶一下 不错,下了备用,谢谢 顶! 顶 问下
//Bootloader触发模式0:串口1:电平
#define LEVELMODE 0
#define LEVELPORT D
#define LEVELPIN PD7
//触发电平 1:高0:低
#define PINLEVEL 0
//这个是干嘛的 ?看了几个版本 都不一样啊
#define LEVELPORT D
#define LEVELPIN PD7
//触发电平 1:高0:低
#define PINLEVEL 0 OK了 带AES256bit的编译后占多大ROM? 留个记号!! 反映一个问题:当使用4.2版的上位机软件AVRUBD时发现一个问题,当需下载的程序量很小时会报Floating point divison by zero!错误。而下比较的程序时却没有这个问题,我使用的是MEGA128,RS485方式。 To 58楼,编译后的大小与芯片的型号、编译器的版本有关。但是肯定在4KB之内。使用AES时,winavr20071221编译器编译的代码比winavr20080610小200多字节。如果希望AES编译后小于2KB,需要去掉中断向量表。
To 60楼,这个问题我在仔细检查一下,最好可以提供一个参考的文件。 发现上位机源代码4.2版的在DELPHI里面加载后缺东西啊。
http://cache.amobbs.com/bbs_upload782111/files_10/ourdev_364533.jpg
(原文件名:tt1.jpg)
请教如何在DELPHI7里面能成功编译那个源代码? 留个记号 今天在M128上的小程序已经通过,感谢感谢
但是大的程序还没通过
我有一个问题想请教一下:
假如我用bootloader下栽程序正在运行,怎么样才能用bootloader更新程序?
需要在我的应用程序里加什么语句吗? LS
我用在M8力也通过了,非常不错
我的思路是:自动更新时在我的程序里如果收到联机密码(联机密码需要复杂点) 马上就自动进入死循环(开启看门狗 1s钟定时),然后看门狗溢出复位,进入bootloader(还没试验过,正在改程序,还不知道看门狗复位会不会进入bootloader),
然后bootloader程序收到联机密码 就可以自动升级咯 To 62 楼:TGauge是标准的Delphi控件,在Sample组下面,对应的控件文件是dclsmp70.bpl。可能你安装的是简化版,完整版中包含有这个文件。
To 64楼:65楼的思路是正确的,我一般也是这么做的。使能BOOTRST熔丝位后,单片机复位时就会先进入Bootloader。在avrubd中有一个选项,就是在发送联机密码前先发送复位命令,就是干这个用的。也可以不等待看门狗复位,直接跳转到Bootloader程序。比如:
(*((void(*)(void))BootStart))();
上面BootStart就是Bootloader程序的入口地址,比如0x3800. 感谢楼主,BOOTLOADER,调试过了
请教,假如联机密码修了,在单片机程序怎样修改联机密码? to 【66楼】 shaoziyang
您好!
问一下 BOOTLOADER 上位机软件编译问题 我所有的组件都装好了,打开也没有提示哪个组件找不到
编译也成功了 但是运行的时候 出现如下错误提示:
注:程序代码没有任何更改
http://cache.amobbs.com/bbs_upload782111/files_10/ourdev_366693.JPG
(原文件名:ERROR1.JPG)
http://cache.amobbs.com/bbs_upload782111/files_10/ourdev_366694.JPG
(原文件名:ERROR2.JPG)
经过设置断点跟踪,发现主界面的创建出现问题,好像式 mmoHEX这个控件创建出了问题
但是组件TsnyMemo 安装应该是没有问题的,应为我从新创建一个应用程序 ,放上此控件,编译和运行式正常的
出现上面的错误提示后 点击确定,然后强制再次接着运行,又出现如下错误提示,然后自动关闭了
http://cache.amobbs.com/bbs_upload782111/files_10/ourdev_366695.jpg
(原文件名:ERROR3.jpg)
http://cache.amobbs.com/bbs_upload782111/files_10/ourdev_366696.jpg
(原文件名:ERROR4.jpg) 不从DELPHI7运行,而直接打开编译出来的执行文件,也会出现最后一个错误提示。
后来发现,自己编译的程序有1.18M 而 邵老师那里下载来的程序文件却只有349KB. To 【67楼】 lcqqcl,计算机的联机密码必须是和单片机中一致的。一般是先确定单片机程序的参数,然后再设置计算机的通信参数。反过来当然也行,但是参数必须是对应一致的,不如就会产生错误。
不知道是不是HEX控件版本的问题。不同版本的控件有时因为缺少一些属性造成问题。下面是我使用的HEX控件,已经在Delphi7中编译。
我编译的文件也有1M多,为了减少下载的时间,用upx进行了压缩,所以看起来比较小。
HexEdit控件ourdev_366813.zip(文件大小:93K) (原文件名:HexEdit.zip) 根据错误提示 右问题的是名字为 memohex控件 它是属于TsnyMemo 而不是 HexEdit
按提示所说是可能memohex的 rightedge 属性不存在;我下载的是http://synedit.sourceforge.net上的最新版本SynEdit-2_0_6.zipMirror 在家里电脑上已编译通过 可以运行了 发图庆贺 以下是运行效果图
http://cache.amobbs.com/bbs_upload782111/files_10/ourdev_367357.JPG
(原文件名:未命名.JPG)
一样控件 就是不知道为什么 在公司的电脑上编译后运行就是出错 需要将原有控件完全删除后,再次安装才能成功。否则可能还是旧文件,造成编译失败。 请问搂主有关AES 的问题,我有试用你的软件,发现同样的 明文数据块 经过你的程序加密后出来不同的 密文数据块,而这个特点非常有利于MCU 中未使用数据空间的填充数据 或 相同数据块 的隐蔽操作,但我很是困惑,因为我的程序只调用MCU 厂家写的标准AES 程序(我拿来与AES 规格资料上的程序对比过,发现是程序写法功能是一样的),其执行结果是:同样的 明文数据块 经过你的程序加密后而是出来相同的 密文数据块,而你的程序中使用了PC1, AES 两种加解密算法,是否你的程序结果是两种加密算法的结合出来的,而单独使用AES 算法就是出我的程序的结果。AES 算法的资料也找了一些来看,但还未理解到上述问题的原因,还望楼主指教!
另外如果真是PC1 算法加入的贡献,请问哪里有这个算法的介绍吗?我现在只找到了其代码,而像AES 那样的算法说明文件没有找到。
心里在想,AES 的算法这么高深,如果真是同样的 明文数据块 出 同样的密文,那不是相当于一个复杂化了的 XOR 运算了。
看到资料上有个 密钥调度表 的概念,是否在加解密过程中,每个数据块使用的密钥是按一定的顺序性取得 扩展密钥中的一部分,而解密就利用逆序 取得密钥? 谢谢楼主,收藏下! 留个脚印 顶 MARK 请问:bootloader下载到Boot Flash中的大小,最大为1K吗?如果超出1K怎么办? Boot区的大小与单片机型号有关,Mega8有2K,Mega128有8K。同时在熔丝位中,可以选择4种不同大小的Boot区。 好东西啊,谢谢楼主 我怎么不行啊,晕死。
下面是我的操作步骤:
1、在AVR STUDION 新建工程,添加bootldr.c、bootldr.h、bootcfg.h三个文件到项目中。
2、打开AVRUBD,选择M8,点推荐,点创建。
3、在AVR STUDIO 窗口下,编译文件,用SLISP烧写程序。
然后就观察到,led闪烁。
4、AVRUBD载入HEX文件(选择一个简单的HEX文件,控制LED闪烁)。
在窗口看到;发送联机密码:64
发送10次后,联机失败。
是哪里有问题啊。搞很久了,是我哪里设置不对吗? 好 好资料,下载研究研究后发现有个疑问:对于ATmega48的bootloader应该怎么处理? ATmega48没有专门的boot区,不能直接使用avrub。 得好好看看 能否将CPort, SynEdit传上来,谢谢!
本贴被 Joyce 编辑过,最后修改时间:2008-12-20,16:58:50. 已经将delphi写的上位机改成用VC写的,应用在我的LED点阵屏控制卡上了,非常好有,严重感谢楼主,另外程序中用到的CRC16的校验法很好,不但起到校验作用还起到检验通信是否正常,谢谢! 好东西…… 试一试 请问显示这个错误是怎么回事啊??http://cache.amobbs.com/bbs_upload782111/files_11/ourdev_565244.JPG
(原文件名:New Bitmap Image.JPG) 你选择的单片机型号是Mega8,但是没有PORTA。默认LED使用了PA4,这是Mega169的设置,你需要修改一下。 好东西正想学. 没有问题的,问题是你没有认真看源代码,看懂源代码就会解决问题,那来这么多问题啊!问题都是来源于自身! MARK mark 支持一个,以后用得着,哈哈 mark! 这个要顶了