极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 79855|回复: 13

DIY Arduino UNO -Arduino as ISP 烧写 mega328 bootloader

[复制链接]
发表于 2015-5-10 22:49:15 | 显示全部楼层 |阅读模式
本帖最后由 wwwusr 于 2015-5-10 22:49 编辑

一、前言
    以前也弄过几回,中间不成功过,最后成了,但也是迷迷糊糊过的,烧写问题不大,按教程一步步进行就O了。
    问题出自给DIY的Arduino mega328P通过Arduino IDE正常下载程序:总是时不时的下载不成,提示STK500@&$*&^@&#^!*^!^*$*!$之类的神马。。。  不稳定就是问题!自我赶脚这回算是找到原因,知道为什么好用了。
但也是知其然,不知其所以然啊,所以写出来,大家一起来分析一下,期待某大神帮我解释一下我的做法为什么会成功?

二、电路及常规烧写bootloader过程
    这个不多说,图片、教程,在论坛,网上其它的地方,有很多很多:弘毅的教程在此   



三、问题在这儿呢
    现在,DIY的Arduino UNO(或者叫pro mini也成,反正芯片都是一样一样的mega328P,嘿嘿)烧好了,现在是可以正常下载程序的节奏,但是,问题来啦。
    这时见过最多的就是:Arduino编译完成,uploading....,TTL串口下载器的TX灯闪三下,然后,然后,然后就没然后了。。
几秒过后,IDE就会提示下载失败了。
四、问题的过程
    在给出我的方法前,先看一下之前的电路图,完全依照Arduino-UNO-Schematic来的,(当然,只有mega328P的部分)
这是局部电路:

还有下载神器:引出了DTR信号的PL2303(为什么要引出DTR? DIY Arduino的人会懂的)



下面,咱们谈点儿有用的(个人理解)。(也就是前面基本都没嘛信息量):
1.理想下载过程:Arduino编译好文件后,发送时,会让平时为高的DTR脚置低一下,马上恢复高,也就是让目标板的reset脚置低一下,再恢复高,握手成功,之后开始下载。这个过程也可以不用DTR,手动完成:IDE出现uploading... 时,手动把目标板复位一下。但这个火候不太好掌控。
2.实际我的下载过程:DTR引脚为低,目标板RESET脚却没有变低,反而是有个上升!再回VCC。这是用数字万用表量出来的,可能不是实际值,但怎么着RESET脚也是没有变低,再回高,完不成握手动作,IDE就一直让DTR为低,执着的等待着。。。。 直到一定时间后,没招了,就让DTR回高,提示下载未成功。

四、问题的解决
    说说解决方法吧。先上对比图,请自动聚焦脑电波到schematic中DTR与RESET连接的部分。

    两者唯一的区别:在100nF的电容两端并了一个100K的电阻,问题迎刃而解!曾经怀疑过复位时间问题,试过102、22PF的电容,单独用电容,怎么都不好使,只要并上100K的电阻,都好使!
    给自已的解释是:10K与100K电阻形成分压电路,可以更好的确定中间的RESET脚电位?
我自己都不信!哈哈。所以欢迎大家,尤其是对此有更深入研究,或者也在纠结于此的人来参与喽。
    下面是我DIY成功的Arduino UNO,用引出DTR的PL2303,或者CH340来下载,可以保证100%成功。


















本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2021-4-10 12:53:07 | 显示全部楼层
没法玩了,芯片大涨,328P要25一片了
回复 支持 1 反对 0

使用道具 举报

发表于 2015-5-11 12:41:06 | 显示全部楼层
本帖最后由 catnull 于 2015-5-11 12:51 编辑

那个电容貌似没有必要吧?查看自动复位电路部分。
回复 支持 反对

使用道具 举报

发表于 2015-5-11 17:30:05 | 显示全部楼层
谢谢分享学习一下
回复 支持 反对

使用道具 举报

发表于 2015-5-13 14:15:02 | 显示全部楼层
这么高级,上周日,自己意外使用uno r3给lilypad 上传了几个程序来着,不过忘记当时怎么接线的了,今天想再重写下程序,死活都传不上去了。,。。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-13 15:33:08 | 显示全部楼层
本帖最后由 wwwusr 于 2015-5-13 15:37 编辑
catnull 发表于 2015-5-11 12:41
那个电容貌似没有必要吧?查看自动复位电路部分。


A ,只用电阻的方法还真没试过,以前没看过这个FT232的电路图,一直照着官方UNO中8U2与mega328的DTR连接方式在做。
晚上试试。
还有,请问图中R2 R3的阻值是多少? 100_NM?
回复 支持 反对

使用道具 举报

发表于 2015-5-13 16:46:14 | 显示全部楼层
本帖最后由 Hackerpro 于 2015-5-13 16:48 编辑

CH340一般不给DTR,不过改进版的arduino板子用的都是这个,不知道他们是怎么做到的
回复 支持 反对

使用道具 举报

发表于 2015-5-13 22:36:05 | 显示全部楼层
wwwusr 发表于 2015-5-13 15:33
A ,只用电阻的方法还真没试过,以前没看过这个FT232的电路图,一直照着官方UNO中8U2与mega328的DTR连接 ...

100欧姆就可以把
回复 支持 反对

使用道具 举报

发表于 2015-5-14 11:43:07 | 显示全部楼层
学习了......
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-5-15 21:59:55 | 显示全部楼层
catnull 发表于 2015-5-13 22:36
100欧姆就可以把

试过了,用的PL2303,只另用DTR串100欧电阻,接目标板RST,但不好使。328P,168A,8A,都试过,不成。这跟芯片有关?手上没有FT232,没法对比
回复 支持 反对

使用道具 举报

发表于 2015-5-16 17:23:12 | 显示全部楼层
本帖最后由 catnull 于 2015-5-16 17:28 编辑

RTS(RequestToSend,发送请求)为输出信号,用于指示本设备准备好可接收。DTR(Data Terminal Ready,数据终端准备好),都是USB转串口芯片指示自己可以接受数据的信号,低电平有效。可见,avrdude初始化虚拟串口的过程中,将有一个从高电平到低电平的跳变过程,引发atmega328p复位。就是说,如果上位机程序中使用标准串口通信的化,atmega328p将一直被复位,从而不能正常工作。可以说,avrdude 的下载协议中有专门的一个指令,用于恢复在下载过程中RTS和DTR的高电平,才能解释擦写flash过程中atmega8的bootloader可以正常运行。
楼主的问题应该不是电路问题,而是协议的问题。参看我写的另一个帖子。
http://www.geek-workshop.com/thread-14651-1-1.html
回复 支持 反对

使用道具 举报

发表于 2021-3-23 19:40:28 | 显示全部楼层
我正好要写几个芯片
回复 支持 反对

使用道具 举报

发表于 2021-3-30 07:50:52 | 显示全部楼层
atmega328芯片锁了怎么办?
回复 支持 反对

使用道具 举报

发表于 2021-5-16 09:16:27 | 显示全部楼层
通过uno 写boot 时一直提示avrdude: Device signature = 0x000000 (retrying)

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x000000
avrdude: Yikes!  Invalid device signature.
         Double check connections and try again, or use -F to override
         this check.
无法写成功
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-28 19:57 , Processed in 0.055343 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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