发表于:2010-02-20 07:56:04
楼主
前些日子做了个Xmega板子,开始学习XMEGA,第一步就移植了AVR的bootloader,使用Shaoziyang做的AVRUBD下载程序,非常方便,欢迎大家移植,但是这不针对AVR,AVR和XMEGA还是有很大的差别的。下面说说移植办法:
假如,你已经有XMEGA系统,并且想移植这个bootloader程序到你的系统中,使用串口升级你的应用程序!
你要做的:
1.确定你的设备型号,也就是XMEGA型号,查找以下参数:
1.1 芯片的页容量,把写到下面定义
#define BUFFERSIZE 256 (把你查到的数值写到这里 XMEGA64A3的页容量是256 bytes )
1.2 芯片的bootload 起始地址
#define BootStart 2 * 0x8000UL(XMEGA的boot是从0x10000 bytes开始)
同时把以上的数值 写到项目配置中 具体是:
菜单: Project -> Configuration Option -> Memory Settings
把 .text 的地址改到 BootStart (也就是把这些程序放置在boot区)
(注意这里的.text 的地址是以字算的,也就是说单位是word. (1 word =2 bytes))
以上的参数可以从芯片的数据手册或者对应的头文件得到,比如
atxmega64a3 对应的头文件是 iox64a3.h
atxmega64a1 对应的头文件是 iox64a1.h
atxmega128a1 对应的头文件是 iox128a1.h
atxmega128a3 对应的头文件是 iox128a3.h
以上这些文件都可以在winavr目录下找到\avr\include\avr
找到对应的头文件后查找 关键字: SPM_PAGESIZE 、 BOOT_SECTION_START 你得到的是以bytes为单位
2.修改你的串口,找到 Xmega_Boot.c 在程序开头有如下定义:
//使用UARTE1 这里定义你的下载串口
#define USART USARTE1 把这个改成你板子上用的串口
#define USART_PORT PORTE 串口对应的端口
#define USART_TX PIN7_bm 发送端口号
#define USART_RX PIN6_bm 接收端口号
3.修改你的LED显示状态,找到LED.h这文件,里面是LED控制程序,自行修改相关代码,或者直接把
#define LED_En 1 这个值定义为0,关掉LED指示!
4.如果你要修改波特率,请自行修改代码
修改 void USART_initial(void) 串口初始化子程序中的 USART_Baudrate_Set(&USART, 25 , 0);
32M RC中38400的波特率误差很小 0.16% 可以满足要求
//-------------------------------------------------------------------------------------------------------
系统:
联机密码:41 56 52 55 42 (HEX)
通信协议:标准XModem协议
数据帧长:256字节
串口波特率:38400,8,n,1
测试:
> 包 【242/242】, 数据 【60.5k/60.5k】, 重试 【0/0】
V 升级成功: 用时: 【20.8s】, 速度: 2.9k/s.
编译环境:
winavr + AvrStudio
使用AvrStudio打开bootloader.aps 项目移植办法讲看bootcfg.h
(注,这个是AVR XMEGA 的引导程序)
如果你在移植到XMEGA时碰到问题可以通过 lisn3188@163.com 得到帮助
感谢源程序作者 Shaoziyang 给我的帮助,让我能快速把这个程序移植到XMEGA上