很多人认为,现在是32位单片机烂大街的时代,不用再折腾8位机了,豆腐搞成肉价钱。
Anyway …
——我觉得正是时代赋予我们的GEEK精神造的就我们。
言归正传,在arduino里面添加通用avr的board支持。这已经不是什么新鲜的话题,但通过百毒到的资料都不能一把成功,于是有了这次的尝试记录分享给大家。
开始之前,先明确几个要点:
1,arduino里自带有两种bootloader(另一个是optiboot)固件及源代码和相应的makefile;目录为
*\arduino-1.8.4\hardware\arduino\avr\bootloaders
*\arduino-1.8.4\hardware\arduino\avr\bootloaders\optiboot
2,arduino中支持的board类型目录
*\arduino-1.8.4\hardware\arduino\avr\variants
实际上上面两个目录为avr系列在arduino IDE内相关的配置目录,当然也可以根据自己需要增加像stm32的基于arduino开发包的目录,这样让stm32在arduino中进行。如图:
该目录下的boards.txt即是这次需要修改的配置文件。打开可以看到一些板的配置信息,如图:
里面支持的board是按IDE中显示的顺序排列,如需增加新board支持,在
后面接着添加即可,这里以mega32为例进行一些关键参数的解释,需要指出的是:IDE支持的配置关键字可以参照已有的board进行增加,需要根据实际情况作相应增删来满足不同的需要,eg代码见下:
atmega32.name=Custom ATmega 32 Board using AVRISP
#atmega32.upload.using=avrispmkii
atmega32.upload.tool=avrdude
atmega32.upload.maximum_size=32256
atmega32.upload.maximum_data_size=2048
atmega32.upload.speed=115200
atmega32.bootloader.low_fuses=0xFF
atmega32.bootloader.high_fuses=0xCA
#atmega32.bootloader.extended_fuses=0xFF
atmega32.bootloader.path=atmega
atmega32.bootloader.file=atmega/ATmegaBOOT_168_anio32.hex
atmega32.bootloader.unlock_bits=0x3F
atmega32.bootloader.lock_bits=0x0F
atmega32.build.mcu=atmega32
atmega32.build.f_cpu=11059200L
atmega32.build.core=arduino
atmega32.build.variant=mega32
atmega32.build.board=AVR_MEGA32_DEV
总共可以分为4段信息,且每一段都以 A.B.C=D的结构类型给出:
A:代表为整个配置段的类型名称
B:不同功能段的类型
C:具体功能段的参数名称
D:相应的参数值
比如第一段,
atmega32.name=Custom ATmega 32 Board using AVRISP
“Custom ATmega 32 Board using AVRISP”为IDE里菜单里显示的可选择board类型,
如图:
第二段为通过IDE经过串口upload用户代码对应mcu配置,比如下载工具、协议、可用的flash大小、下载速率;
第三段为通过IDE为mcu写入bootloader的相关配置,如AVR高低字节熔丝、bootloader路径、文件名称;
第四段为通过IDE编译代码时,告知编译器的配置,如mcu型号、外部晶振频率、配置目录中avriants目录下对应的board类型文件名;
这里需要说明几点:
1.upload段中的几个跟flash及ram有关的空间大小设置需要根据mcu相应空间大小和bootloader大小来确定,这就是为什么官方的配置里面upload段数值上有些微差异;
2.bootloader熔丝需要参考对应的mcu DS手册内进行修改;
3.build段的mcu、f_cpu、variant等需要与bootloader里面的参数保持一致,
(关于arduino bootloader的一些相关择日再研究),avriant目录中对应的ins_arduino.h需要与硬件开发板保持一致。
另外,总共4段配置字相关的信息还有许多,如果有兴趣的朋友可以继续研究,根据需要酌情添加,这里就不再赘述了。
下面为参考mega32重新写的一个mega128的board描述,测试可以使用。
Xatmega128.name=Custom ATmega 128 Board
Xatmega128.upload.using=avrispmkii
Xatmega128.upload.tool=avrdude
Xatmega128.upload.maximum_size=126976
#Xatmega128.upload.maximum_data_size=2048
Xatmega128.upload.speed=115200
Xatmega128.bootloader.low_fuses=0xFF
Xatmega128.bootloader.high_fuses=0xCA
Xatmega128.bootloader.extended_fuses=0xFF
Xatmega128.bootloader.path=atmega
Xatmega128.bootloader.file=atmega/ATmegaBOOT_168_mega.hex
Xatmega128.bootloader.unlock_bits=0x3F
Xatmega128.bootloader.lock_bits=0x0F
Xatmega128.build.mcu=atmega128
Xatmega128.build.f_cpu=16000000L
Xatmega128.build.core=arduino
Xatmega128.build.variant=mega128
Xatmega128.build.board=AVR_MEGA32_DEV
需要说明的是,每个段里’=’后面的参数修改不需要重新关闭工程初始化操作,但修改其它的信息内容,均需要重启工程进行初始化才会生效,可能这是arduino的编译系统的特色。后续会把关于arduino的bootloader相应的笔记整理出来再作讨论。
(全文完)