数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 15493|回复: 30

[AVR] bootloader不再神秘 AVR单片机折腾 教小白如何在ArduinoIDE制作适合自己的开发板

    [复制链接]
发表于 2021-4-17 21:10:18 | 显示全部楼层 |阅读模式
之前项目上不能使用的ATmega168(以下称168)为了对其测试,做了一个AVR并行熔丝恢复器 ,经过一系列的测试,原来是芯片的时钟有点问题了。

过程:
选用并行编程将熔丝位恢复为默认(Lfuse,Hfuse,Efuse:)62DFF9,这时ISP可以对其进行读写了,用的软件是progisp1.72版本。说明芯片没有完全坏掉。想写个测试程序测试下芯片工作情况,由于是使用内部1MHz的RC振荡作为时钟,没有对应的Bootloader,所以没法在ArduinoIDE里直接下载程序,但,可以用ArduinoIDE编译成HEX文件,用progisp写入到芯片FLASH里。测试程序是使用Arduino数字口0、1、11、13来做个分频的闪灯。


下图是好芯片在NANO板的运行结果,熔丝值为FFDDF8,外部16M晶振,以此为参考。


占空比都是50%,脉宽分别是:0口是125ms、1口是250ms、11口是500ms(0.5s)、13口是1s。以11口(第三行)脉宽0.5秒为参照。

下面进行坏芯片测试:
熔丝值:62DFF9,4 个LED规律、稳定闪烁。



测得第三行脉宽为8秒。8/0.5=16倍,时钟由标准的16M降为1M,默认熔丝设定也是内部1M的RC振荡。熔丝值:E2DFF9,只有数字13口的LED微亮,其它LED不亮。芯片应该没有工作起来。此为内部8MRC振荡。熔丝值:FFDFF9,使用外部晶体振荡,晶振为16M,与使用内部8M一样,芯片不工作。熔丝值:7FDFF9,使用外部晶体振荡,且设置8分频。


下面使用不同的晶振测试,先来4M,4 个LED规律、稳定闪烁。


第三行脉宽为16秒。16/0.5=32倍,时钟由标准的16M降为0.5M(16/32=0.5)。使用8M晶振,4 个LED规律、稳定闪烁。


第三行脉宽为8秒。8/0.5=16倍,实际时钟是1M。使用16M晶振,4 个LED规律、稳定闪烁。


第三行脉宽为5秒。4/0.5=8倍,实际时钟是2M。使用20M晶振,4 个LED规律、稳定闪烁。


第三行脉宽为3.2秒。3.2/0.5=6.4倍,实际时钟是2.5M。使用22M晶振,4 个LED规律、稳定闪烁。


第三行脉宽为2.89秒。2.89/0.5=5.78倍,实际时钟是2.768M。使用24M晶振,4 个LED规律、稳定闪烁。


第三行脉宽为2.667秒。2.667/0.5=5.334倍,实际时钟约为3M。如果这个规律成立,芯片工作在4M时,外接32M晶振就可以。手头没有。直接上个48M晶振,4 个LED规律、稳定闪烁。依规律计算,芯片应该工作在6M。然而,


第三行脉宽为4秒。4/0.5=8倍,实际时钟是2M。正如手册说明,当CKSEL3..1为111时,低功率晶体振荡器可用8.0 - 16.0M满振幅晶体振荡器可用0.4-25M。48M不在范围内。通过测试,可见芯片的时钟在3M以下时工作是正常的。 接下来就是重新编译一个适合这个芯片的Bootloader了。这里又要确定两个值:一个是串口的波特率;另一个是Bootloader的起始地址。因为这个芯片不能工作在较高的时钟下了,计划使用内部8M的RC振荡进行8分频,实际工作时钟就是1M,这样熔丝位也可以使用出厂的默认值。查了下Arduino各种板的串口波特率(每秒的位传输速度),大部分使用的是115200的波特率,这时的时钟为外置16M晶振,若使用1M时钟,是不是波特率也要降16倍,变为7200呢?根据AVR的波特率计算公式算出时钟为1M时,各种波特率的误差,从表中查到,误差小的可以使用4800,这样的速度是很慢的,9600的波特率也是可以接受的。


另外,1M的时钟,一个时钟周期是1us。当9600的波特率传输时,传输一位所用时间约是(1s/9600=)104us,完全可以的,所以取9600测试。Bootloader的起始地址需要配置相关的熔丝位,不要害怕,只要配置BOOTSZ和BOOTRST,168芯片是熔丝扩展位。


设<BOOTSZ=10>,这样Boot区的大小(256Words),Boot区起始地址(0x1F00)。设<BOOTRST=0>,将复位向量移至Boot区起始地址处。这里的地址是以“字”为单位的,若换算为“字节”要乘以2,Boot区起始地址以字计算是0x1F00,以字节计算是0x3E00。在Mekefile文件中加入如下内容:



简单说明下:
-DBAUD_RATE=9600是使用9600波特率--section-start=.text=0x3e00 是BOOT区起始地址--section-start=.version=0x3ffe 是BOOT区结束地址AVR_FREQ= 1000000L是时钟频率为1Matmega168_1MRC.hex是输出bootloader的文件名LFUSE= 62 HFUSE = DD EFUSE = 04熔丝值,使用内部RC振荡1M时钟;掉电检测是2.7V;512字节空间的BOOT区。运行omake atmega168_1MRC命令进行编译,产生atmega168_1MRC.HEX文件。
在boards文件中加入如下内容:


一看就懂,不多讲。打开ArduinoIDE,看看开发板是不是多了一个使用内部RC振荡1M时钟的选项


测试程序可以直接上传了,说明以上的串口波特率和Bootloader的设置都没有问题。


现在是使用内部1M时钟,测试程序上传完成后,数字口0、1、11、13接着的LED规律、稳定闪烁,


从图中可见,占空比都是50%,脉宽分别是:0口125ms、1口250ms、11口500ms(0.5s)、13口1s。11口(第三行)脉宽0.5秒,与第一幅图的标准对比不差。说明芯片可以在低时钟下工作,可能坏在低位熔丝的“CLKDIV8”位上了,不能进行有效的8分频。推测可以使用外置24M晶振,进行8分频后得3M,用于芯片时钟。这时的波特率可选14400,可想速度快点可以选择38400。然后更换相应的Makefile和boards文件即可。


测试中使用到的硬件及工具





楼下讲讲怎样在ArduinoIDE中加入一个新的开发板,伸出小手点个赞


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 19家元 +1345 收起 理由
邢宝伟 + 20
hfsp + 20 謝謝分享
10655188 + 20
mydigit + 1000 恭喜获得原创文章热度奖励1000M.
玛德陛下 + 20 謝謝分享

查看全部打赏

本帖被以下淘专辑推荐:

 楼主| 发表于 2021-4-17 21:10:49 | 显示全部楼层

bootloader不再神秘 AVR单片机折腾 教小白如何在ArduinoIDE制作适合自己的开发板

游客请登录后查看回复内容

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 10家元 +210 收起 理由
hfsp + 20 優秀文章
有点不烧 + 20 謝謝分享
超级女生 + 20 謝謝分享
kkdkj + 20 謝謝分享
10655188 + 20

查看全部打赏

回复 支持 6 反对 0

使用道具 举报

发表于 2021-4-17 22:05:01 | 显示全部楼层
游客请登录后查看回复内容

打赏

参与人数 1家元 +2 收起 理由
jf201006 + 2 謝謝分享

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2021-4-18 08:18:53 来自手机浏览器 | 显示全部楼层
游客请登录后查看回复内容

打赏

参与人数 1家元 +2 收起 理由
jf201006 + 2 歡迎探討

查看全部打赏

回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-18 10:20:17 来自手机浏览器 | 显示全部楼层
游客请登录后查看回复内容

打赏

参与人数 2家元 +40 收起 理由
8139 + 20 精彩回帖
ljlun + 20 谢谢分享

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2021-4-18 13:28:24 来自手机浏览器 | 显示全部楼层
游客请登录后查看回复内容

打赏

参与人数 1家元 +2 收起 理由
jf201006 + 2 謝謝分享

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2021-4-19 11:17:57 | 显示全部楼层
游客请登录后查看回复内容

打赏

参与人数 1家元 +2 收起 理由
jf201006 + 2 謝謝分享

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2021-4-19 14:08:57 | 显示全部楼层
游客请登录后查看回复内容

打赏

参与人数 1家元 +2 收起 理由
jf201006 + 2 謝謝分享

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2021-4-20 19:00:35 | 显示全部楼层
游客请登录后查看回复内容

打赏

参与人数 1家元 +2 收起 理由
jf201006 + 2 謝謝分享

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2021-4-22 23:19:22 | 显示全部楼层
游客请登录后查看回复内容

打赏

参与人数 1家元 +2 收起 理由
jf201006 + 2 精彩回帖

查看全部打赏

回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-4-23 08:59:19 来自手机浏览器 | 显示全部楼层
游客请登录后查看回复内容

打赏

参与人数 2家元 +40 收起 理由
8139 + 20 我很贊同
ljlun + 20 我很贊同

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2021-4-23 17:32:06 | 显示全部楼层
游客请登录后查看回复内容

打赏

参与人数 1家元 +2 收起 理由
jf201006 + 2 精彩回帖

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2021-4-25 20:58:03 | 显示全部楼层
游客请登录后查看回复内容

打赏

参与人数 1家元 +2 收起 理由
jf201006 + 2 謝謝分享

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2021-4-28 15:28:38 | 显示全部楼层
游客请登录后查看回复内容

打赏

参与人数 1家元 +2 收起 理由
jf201006 + 2 謝謝分享

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2021-4-28 15:36:03 | 显示全部楼层
游客请登录后查看回复内容

打赏

参与人数 1家元 +2 收起 理由
jf201006 + 2 我很贊同

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2021-5-1 16:32:17 | 显示全部楼层
游客请登录后查看回复内容

打赏

参与人数 1家元 +2 收起 理由
jf201006 + 2 没有研究过

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2021-5-1 17:27:34 | 显示全部楼层
游客请登录后查看回复内容

打赏

参与人数 1家元 +2 收起 理由
jf201006 + 2 应该是可以吧

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2021-5-1 19:53:57 | 显示全部楼层
游客请登录后查看回复内容

打赏

参与人数 1家元 +2 收起 理由
jf201006 + 2 找找方法,自己搞出来

查看全部打赏

回复 支持 反对

使用道具 举报

发表于 2021-5-2 17:07:37 | 显示全部楼层
游客请登录后查看回复内容

打赏

参与人数 1家元 +2 收起 理由
jf201006 + 2 謝謝分享

查看全部打赏

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|数码之家-技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2026-6-3 20:42 , Processed in 0.296400 second(s), 15 queries , Gzip On, Redis On.

Powered by Discuz!

© MyDigit.Net Since 2006

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