搜索
bottom↓
回复: 91

正式发布 AVR 通用Bootloader V1.0

[复制链接]

出0入0汤圆

发表于 2007-3-26 20:33:39 | 显示全部楼层 |阅读模式
很抱歉让大家就等了。昨天是因为忘记将一个文件拷回家了。而我们上班的地方不能上网,所以就到晚上了。



使用前,请仔细阅读一下说明:使用说明



AVR通用Bootloader文件:点击此处下载AVR通用Bootloader 385K



已经完全测试过的型号:

   ATmega8

   ATmeag64

   ATmega168

   ATmega169(Bufferfly)



希望大家能够将自己测试通过,并且不再上面列表中的型号通知我,以便增加到列表中。如果你在使用中发现任何问题,也欢迎发EMAIL给我。



压缩文件中的例子是以Butterfly编写的,可以不用修改直接使用。如果你使用其他的实验板,请根据具体硬件配置修改参数。建议使用前详细的阅读readme.txt文件。





目前已知问题:

PC下载程序不支持大于64K的HEX文件(BIN的没有问题),这个问题将很快得到解决。

出0入0汤圆

发表于 2007-3-26 21:03:26 | 显示全部楼层
好东西 当然要顶

出0入0汤圆

发表于 2007-3-26 21:15:27 | 显示全部楼层
顶!

出0入0汤圆

发表于 2007-3-26 21:16:22 | 显示全部楼层
谢谢分享

出0入0汤圆

发表于 2007-3-26 21:45:05 | 显示全部楼层
谢谢楼主

出0入0汤圆

发表于 2007-3-26 22:35:36 | 显示全部楼层
特意来顶一下~~~

感谢楼主~~~

出0入0汤圆

发表于 2007-3-26 22:52:52 | 显示全部楼层
支持一下!!

出0入0汤圆

发表于 2007-3-26 23:01:35 | 显示全部楼层
d~~~~~~~

出0入0汤圆

发表于 2007-3-26 23:24:12 | 显示全部楼层
顶楼主!感谢!

出0入0汤圆

发表于 2007-3-27 08:40:37 | 显示全部楼层
谢谢了

出0入0汤圆

发表于 2007-3-27 08:53:01 | 显示全部楼层
不错!

出0入0汤圆

发表于 2007-3-27 09:10:28 | 显示全部楼层

出0入0汤圆

发表于 2007-3-27 09:11:37 | 显示全部楼层
顶楼主

出0入0汤圆

发表于 2007-3-27 14:37:26 | 显示全部楼层
下来研究研究

出0入0汤圆

发表于 2007-3-27 15:59:40 | 显示全部楼层
下来,好好看看.

出0入0汤圆

发表于 2007-3-27 16:44:04 | 显示全部楼层
收下,顶

出0入8汤圆

发表于 2007-3-27 17:29:29 | 显示全部楼层
hao dong xi

出0入0汤圆

发表于 2007-3-27 21:23:45 | 显示全部楼层
太帅了 谢谢

出0入0汤圆

发表于 2007-3-27 23:41:46 | 显示全部楼层
试试再说.

出0入0汤圆

发表于 2007-3-28 10:36:24 | 显示全部楼层
好东西啊

出0入0汤圆

发表于 2007-3-28 11:54:34 | 显示全部楼层
那几个立体字很酷啊

出0入0汤圆

发表于 2007-3-28 15:16:19 | 显示全部楼层
这个帖子不顶不行啊!

出0入0汤圆

 楼主| 发表于 2007-3-28 20:29:34 | 显示全部楼层
希望大家可以将自己的测试结果帖出来,或发EMAIL给我。如果某个型号有两人次以上被确认,就可以添加到测试过的型号列表中。



也希望大家可以多提提建议,发掘问题,使其更加完善。

出0入0汤圆

发表于 2007-3-28 22:39:32 | 显示全部楼层
顶下~~~

出0入0汤圆

发表于 2007-3-29 20:35:35 | 显示全部楼层
顶一下…晚上回去试试

出0入0汤圆

发表于 2007-3-29 21:05:59 | 显示全部楼层
测试过mega162,串口0,

串口初始化不对

需要自己写串口初始化,

(难道是我的pc端软件设置有问题?)



程序占用954

ram     154



速度很快,很好用, 但是用超级终端好象不行

出0入0汤圆

发表于 2007-3-29 21:10:21 | 显示全部楼层
楼主能否提供些 xmodem 的资料 和 hex 2 bin 方面的资料 ?

出0入0汤圆

 楼主| 发表于 2007-3-30 22:29:46 | 显示全部楼层
串口初始化应当没有问题的。需要注意的是,对于串口0,有的型号AVR单片机必须设置为0,有的必须设置为空。



标准XModem协议:

定长,每个包133字节



SOH PackNo ~PackNo Buf CRC



SOH:控制字 1Byte

PackNo:包序号 1Byte

~PackNo:包序号取反 1Byte

Buf: 数据 128Byte

CRC: CRC16检验 2Byte



BIN格式没有什么可以说的,就是16进制的缓冲区直接保存到文件。HEX稍微复杂一点,每一行以冒号开始,后面每两个字节表示一个16进制数。每一行包含了数据、地址、校验等信息。



更详细的说明可以在Google上搜索一下。

出0入0汤圆

 楼主| 发表于 2007-3-30 22:31:49 | 显示全部楼层
希望大家可以把测试的结果告诉我,以便改进。



另外,今天我测试通过了M128。

出0入0汤圆

发表于 2007-3-31 10:19:37 | 显示全部楼层
顶啊!

出0入0汤圆

发表于 2007-3-31 11:16:10 | 显示全部楼层
我 用在 MEGA64上,可以正常把应用程序装载进去,但是应用程序运行几妙钟就自动复位。硬件用的是阿永的MP3第三板。不知道是什么问题,如果不要BOOT,应用程序运行没有问题的。

出0入0汤圆

发表于 2007-3-31 15:33:34 | 显示全部楼层
牛人

出0入0汤圆

 楼主| 发表于 2007-3-31 18:09:02 | 显示全部楼层
关于30楼复位的问题,可能是因为Bootloader将看门狗打开了,而用户程序中没有使用看门狗,没有清除看门狗的缘故。

出0入0汤圆

发表于 2007-5-15 00:49:24 | 显示全部楼层
有在ATMEGA32上移植成功的朋友么?

需要修改哪些参数?



谢谢。

出0入0汤圆

发表于 2007-5-15 06:35:36 | 显示全部楼层
学习

出0入0汤圆

发表于 2007-5-15 10:45:30 | 显示全部楼层
还不太明白,学习中

出0入0汤圆

发表于 2007-5-15 20:07:20 | 显示全部楼层
我在MEGA32上移植不成功啊。



BOOTLOADER是烧上了, 可是跳不到主程序0x0000中。

出0入0汤圆

 楼主| 发表于 2007-5-15 20:17:21 | 显示全部楼层
M32上已经有成功使用的例子了。如果不能跳转,多半是编译器版本、熔丝位等造成的,可以查看一下反汇编指令,看是否指向了0x0000.有的时候还与使用的编程器有关,有的编程器好像有些问题,或者是编程器软件的问题,可以换一个试试看。



请参考一下说明文件。

出0入0汤圆

发表于 2007-11-13 15:35:57 | 显示全部楼层
我到现在才开始对其感兴趣,落伍了阿~~~~~

出0入0汤圆

发表于 2007-11-13 20:03:16 | 显示全部楼层
下下来看看。

出0入12汤圆

发表于 2007-11-13 21:14:28 | 显示全部楼层
多谢,学习一下

出0入0汤圆

发表于 2007-11-13 21:45:44 | 显示全部楼层
高手

出0入0汤圆

发表于 2008-1-18 15:01:17 | 显示全部楼层
先谢谢了
正常运行了并且提示:升级成功了
但是读出FLASH的数据好象还是FF,没写成功,不知道什么原因

出0入0汤圆

 楼主| 发表于 2008-1-18 15:31:41 | 显示全部楼层
请换用最新版本试试,目前最后的稳定版本是3.1

出0入0汤圆

发表于 2008-1-18 16:05:42 | 显示全部楼层
还是不行,不知道是什么原因,最新版本的也不好用,郁闷
应用区的FLASH为空
为了验证FLASH好坏,用编程器下载就没问题

出0入0汤圆

发表于 2008-1-18 16:06:24 | 显示全部楼层
再搞不定,我就试试其他的

出0入0汤圆

发表于 2008-1-18 16:56:27 | 显示全部楼层
顶,厉害厉害.

出0入0汤圆

发表于 2008-1-19 10:46:50 | 显示全部楼层
下了,谢谢,高手。

出0入0汤圆

发表于 2008-1-19 13:53:55 | 显示全部楼层
有用M64调试成功的吗?给点指导,谢谢

我还没调通:现象是FLASH应用区内没写入数据,但是上位机显示下载成功

出0入0汤圆

 楼主| 发表于 2008-1-19 15:02:54 | 显示全部楼层
目前我将能够测试的型号都试过,在M8、M88、M168、M162、M32、M64、M128、M169上都成功应用。如果你使用中遇到问题,一是可以仔细看看说明和网友写的使用教程,在就是把你使用的步骤和参数配置发上来大家看看,一起讨论一下。

出0入0汤圆

发表于 2008-1-19 15:20:57 | 显示全部楼层
void write_one_page(unsigned char *buf)
{
        boot_spm_busy_wait();
        boot_page_erase(FlashAddr);                  //²Á³ýÒ»¸öFlashÒ³
        boot_spm_busy_wait();
        for(pagptr = 0; pagptr < SPM_PAGESIZE; pagptr += 2) //&frac12;&laquo;&Ecirc;&yacute;&frac34;&Yacute;&Igrave;&icirc;&Egrave;&euml;Flash&raquo;&ordm;&sup3;&aring;&Ograve;&sup3;&Ouml;&ETH;
        {
                boot_page_fill(pagptr, buf[pagptr] + (buf[pagptr + 1] << 8));
        }
        boot_page_write(FlashAddr);                  //&frac12;&laquo;&raquo;&ordm;&sup3;&aring;&Ograve;&sup3;&Ecirc;&yacute;&frac34;&Yacute;&ETH;&acute;&Egrave;&euml;&Ograve;&raquo;&cedil;&ouml;Flash&Ograve;&sup3;
        boot_spm_busy_wait();                        //&micro;&Egrave;&acute;&yacute;&Ograve;&sup3;±à&sup3;&Igrave;&Iacute;ê&sup3;&Eacute;
}
1、在这个地方您定义的是一个指针对吧,在程序里面能当作数组来操作?可能是我知识不够吧,我一般这样用*(buf+pagptr)不知道对不对?

现在我用仿真看了下,主要问题集中在BUF能正常接受数据,就是这个函数写数据的时候写不到FLASH里面

我绝的其他人的不能转到应用程序里面也是同样的问题,因为不能写到应用区的FLASH,所以看起来好象是没转到应用程序一样

所以希望楼主帮忙解决一下

出0入0汤圆

发表于 2008-1-19 15:23:21 | 显示全部楼层
羡慕 强人  牛  感谢

出0入0汤圆

发表于 2008-1-24 09:32:54 | 显示全部楼层
没成功这是我的配置:
#ifndef _BOOTCFG_H_
#define _BOOTCFG_H_        1

//&para;¨&Ograve;&aring;&acute;&reg;&iquest;&Uacute;&frac12;&Oacute;&Ecirc;&Otilde;&raquo;&ordm;&sup3;&aring;&Ccedil;&oslash;&sup3;¤&para;&Egrave;
#define BUFFERSIZE         256

//&Iuml;&micro;&Iacute;&sup3;&Ecirc;±&Ouml;&Oacute;MHz
#ifndef F_CPU
#define F_CPU              14745600UL
#endif

//&sup2;¨&Igrave;&Oslash;&Acirc;&Ecirc;
#define BAUDRATE           9600

//Bootloader&acute;&yen;·&cent;&Auml;&pound;&Ecirc;&frac12;  0:&acute;&reg;&iquest;&Uacute;  1:&micro;&ccedil;&AElig;&frac12;
#define LEVELMODE          0

#define LEVELPORT          C
#define LEVELPIN           PC3
//&acute;&yen;·&cent;&micro;&ccedil;&AElig;&frac12; 1:&cedil;&szlig;  0:&micro;&Iacute;
#define PINLEVEL           0

//&micro;&Egrave;&acute;&yacute;&Atilde;&Uuml;&Acirc;&euml;&micro;&Auml;&sup3;&not;&Ecirc;±&Ecirc;±&frac14;&auml; = TimeOutCnt * timeclk
//&sup3;&not;&Ecirc;±&acute;&Icirc;&Ecirc;&yacute;
#define TimeOutCnt         10

//&Iacute;&not;&sup2;&frac12;&Ecirc;±&frac14;&auml;&frac14;&auml;&cedil;&ocirc;(ms)
#define timeclk            100

//&micro;&Egrave;&acute;&yacute;&Icirc;&Auml;&frac14;&thorn;&micro;&Auml;&sup3;&not;&Ecirc;±&Ecirc;±&frac14;&auml; = TimeOutCntC * timeclk
//·&cent;&Euml;&Iacute;'C'&micro;&Auml;×&icirc;&acute;ó&acute;&Icirc;&Ecirc;&yacute;
#define TimeOutCntC        100

//&Iacute;&not;&sup2;&frac12;&Atilde;&Uuml;&Acirc;&euml;&sup3;¤&para;&Egrave;
#define CONNECTCNT         1

//&Iacute;&not;&sup2;&frac12;&Atilde;&Uuml;&Acirc;&euml;
unsigned char KEY[] = {'d', 0x0E, 0x1C, 0x39, 0x14, 0x28, 0x57, 0xAA};

//&acute;&reg;&iquest;&Uacute;&ordm;&Aring;
#define COMPORTNo          0

//&iquest;&acute;&Atilde;&Aring;&sup1;·&Ecirc;&sup1;&Auml;&Uuml;
#define WDGEn              0

//&Ecirc;&sup1;&Oacute;&Atilde;485&Auml;&pound;&Ecirc;&frac12;
#define RS485              0
//485&iquest;&Oslash;&Ouml;&AElig;&para;&Euml;&iquest;&Uacute;&ordm;&Iacute;&Ograve;&yacute;&frac12;&Aring;
#define RS485PORT          C
#define RS485TXEn          PC1

//&Ecirc;&sup1;&Oacute;&Atilde;LED&Ouml;&cedil;&Ecirc;&frac34;×&acute;&Igrave;&not;
#define LEDEn              0
//LED&iquest;&Oslash;&Ouml;&AElig;&para;&Euml;&iquest;&Uacute;&ordm;&Iacute;&Ograve;&yacute;&frac12;&Aring;
#define LEDPORT            D
#define LEDPORTNo          PD6

//&Auml;&sup3;&ETH;&copy;&ETH;&Iacute;&ordm;&Aring;&micro;&Auml;&micro;&yen;&AElig;&not;&raquo;ú&Ocirc;&Uacute;&sup3;&otilde;&Ecirc;&frac14;&raquo;&macr;&ordm;ó&ETH;è&Ograve;&ordf;&Ntilde;&Oacute;&Ecirc;±
#define InitDelay          200

//&ETH;&pound;&Ntilde;é&Auml;&pound;&Ecirc;&frac12;  0:CRC16  1:&Agrave;&Ucirc;&frac14;&Oacute;&ordm;&Iacute;
#define CRCMODE            0

//&Igrave;á&Ecirc;&frac34;&Auml;&pound;&Ecirc;&frac12;: &Iuml;&Ocirc;&Ecirc;&frac34;&cedil;ü&para;à&frac12;&raquo;&raquo;&yen;&Igrave;á&Ecirc;&frac34;&ETH;&Aring;&Iuml;&cent;&pound;&not;&sup2;&raquo;&Oacute;&Atilde;&iquest;&Eacute;&Ograve;&Ocirc;&frac12;&Uacute;&Ecirc;&iexcl;&iquest;&Otilde;&frac14;&auml;
#define VERBOSE            1

#endif

出0入0汤圆

发表于 2008-1-24 11:03:21 | 显示全部楼层
好东西一定要顶!

出0入0汤圆

发表于 2008-1-24 11:10:58 | 显示全部楼层
无法写BOOT 到1C00区,写到0000,BOOTLOADER程序显示下载成功,修改HEX文件将BOOT程序放到1C00写入,BOOTLOADER无法下栽
配置
mega88,bootblock 512words

#ifndef F_CPU
#define F_CPU              12000000UL
#endif

#define BAUDRATE           19200

#define BootStart          0x1C00

avr-gcc.exe -mmcu=atmega88 -Wl,-Map=mega88boot.map -Wl,-section-start==0x1c00 bootldr.o     -o mega88boot.elf
avr-objcopy -O ihex -R .eeprom  mega88boot.elf mega88boot.hex
avr-objcopy -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 --no-change-warnings -O ihex mega88boot.elf mega88boot.eep || exit 0
avr-objdump -h -S mega88boot.elf > mega88boot.lss

AVR Memory Usage
----------------
Device: atmega88

Program:     828 bytes (10.1% Full)
(.text + .data + .bootloader)

Data:        136 bytes (13.3% Full)
(.data + .bss + .noinit)

出0入0汤圆

 楼主| 发表于 2008-1-24 11:54:18 | 显示全部楼层
答52楼的,好像你用的还是老版本的,可以试试新版本。

答54楼:不能写入到1C00,是不是你的段地址没有在项目文件中设置。

出0入0汤圆

发表于 2008-1-24 14:47:59 | 显示全部楼层
菜鸟只能说一个顶字了

出0入0汤圆

发表于 2008-1-24 18:55:44 | 显示全部楼层
1
这是我的配置,
AVR STUDIO 4.13 SP1 557
WINAVR20071221

出0入4汤圆

发表于 2008-1-25 08:41:41 | 显示全部楼层
好东西,谢谢楼主!

出0入0汤圆

发表于 2008-1-25 09:49:08 | 显示全部楼层
呵呵,有机会试试看

出0入0汤圆

发表于 2008-1-25 13:23:00 | 显示全部楼层
花了三天终于移植成功了(菜鸟一只!),感谢shaoziyang的详细资料 。
软件:
     bootldr编译软件 AVRStdio+GCC
     bootldr.hex烧录软件PonyProg2000 -  Version  2.07a Beta  May  3 2007     
  
芯片:MEGA88A

在这个过程中主要遇到两个问题
1.bootldr.hex无法下载到0x0C00(M88 4K boot熔丝1k位置是3k 3*1024=0xC00)位置。
需要在Project->Configration Option打开Momery Setting设置如图

1

  这个是很容易解决的但是对软件不熟悉找了半天才找到,也看见论坛的有人问这个。
  确认bootloader程序是否下载到指定位置可以用小马头(PonyProg2000)等读出Flash内容看看

2.上位机AVRUBD v3.1下载程序后,程序quit()无法跳到0x0000执行应用程序。
  试了半天后来发现下载完程序后bootldr程序里设置的LED还在闪个不停,就知道程序没有跳到应用程序来。
实在没有办法查看一下汇编代码发现1
rcall或者rjmp是相对跳转代码不是跳到0x0000而是跳到bootldr程序的开始。
不知道为什么程序在mega168\169上面相同的代码(*((void(*)(void))PROG_START))();编译是 Call 0x0000而在mega88上市rcall pc-xxxx
后来看到论坛上有人用改为
  asm("ldi r30,00");
  asm("ldi r31,00");
  asm("ijmp");
代替(*((void(*)(void))PROG_START))();
好啦!

出0入0汤圆

 楼主| 发表于 2008-1-25 15:44:47 | 显示全部楼层
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=853847&bbs_page_no=1&bbs_id=9999

这是网友stephon1写的一篇使用教程,非常详细,可以参考一下。

上面Jonathan反映的M88的跳转问题我的确没有试过,因为一直没有机会在M88上使用,最近用了一次M88却是不能使用串口的,所以也没有办法实际验证。我使用软件仿真看了一下,(*((void(*)(void))PROG_START))()的汇编代码是正确的,如下图。不知道是不是与你使用的WinAVR的Gcc版本有关。我使用的是WinAVR20070525版。使用(*((void(*)(void))PROG_START))()的好处是对于不同的芯片不需要修改代码(不然M128等芯片就需要使用长跳转)。

1

出0入0汤圆

发表于 2009-5-14 14:33:24 | 显示全部楼层

出0入0汤圆

发表于 2009-5-14 16:23:34 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-5-14 17:09:00 | 显示全部楼层
谢谢!虽然不知道还有什么用,下了再说

出0入0汤圆

发表于 2009-7-29 13:36:02 | 显示全部楼层
谢谢  顶一下 呵呵

出0入0汤圆

发表于 2009-8-11 11:45:20 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-8-11 11:48:56 | 显示全部楼层
好东西 顶一下

出0入0汤圆

发表于 2009-8-11 19:46:48 | 显示全部楼层
好东西,顶!

出0入0汤圆

发表于 2009-9-23 11:25:21 | 显示全部楼层
AVR 通用Bootloader V1.0
我有一个问题,就是在设定了flash保护后,就再也没法bootload了!!!

出0入96汤圆

发表于 2010-5-12 13:26:19 | 显示全部楼层
AVR 通用Bootloader V1.0
记号

出0入0汤圆

发表于 2010-5-19 20:14:43 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-5-19 22:32:40 | 显示全部楼层
学习

出0入0汤圆

发表于 2010-5-20 04:48:46 | 显示全部楼层
AVR bootloader

出0入0汤圆

发表于 2010-6-3 16:11:52 | 显示全部楼层
云里雾里看了半天

出0入0汤圆

发表于 2010-11-7 19:29:07 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-7 19:56:24 | 显示全部楼层
MARK

出0入0汤圆

发表于 2010-11-8 10:30:55 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-11-9 21:57:35 | 显示全部楼层
好东西 顶

出0入0汤圆

发表于 2010-12-31 21:25:58 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-1-13 01:21:20 | 显示全部楼层
MARK

出0入0汤圆

发表于 2011-1-13 20:02:40 | 显示全部楼层
好东西,顶

出0入0汤圆

发表于 2011-1-13 22:08:07 | 显示全部楼层
学习了,学习了。
顶!!!!

出0入0汤圆

发表于 2011-1-14 09:14:31 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-4-21 13:01:02 | 显示全部楼层
当然要顶

出0入0汤圆

发表于 2011-5-4 20:07:17 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-5 21:14:11 | 显示全部楼层
mark

出0入0汤圆

发表于 2011-5-5 21:35:10 | 显示全部楼层
标记下

出0入0汤圆

发表于 2011-12-1 22:55:19 | 显示全部楼层
mark

出0入0汤圆

发表于 2012-6-15 00:01:47 | 显示全部楼层
我也是来学习的!

出0入0汤圆

发表于 2012-6-15 07:46:16 | 显示全部楼层
下载不了?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-8 11:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表