DIY Arduino UNO -Arduino as ISP 烧写 mega328 bootloader
本帖最后由 wwwusr 于 2015-5-10 22:49 编辑一、前言
以前也弄过几回,中间不成功过,最后成了,但也是迷迷糊糊过的,烧写问题不大,按教程一步步进行就O了。
问题出自给DIY的Arduino mega328P通过Arduino IDE正常下载程序:总是时不时的下载不成,提示STK500@&$*&^@&#^!*^!^*$*!$之类的神马。。。不稳定就是问题!自我赶脚这回算是找到原因,知道为什么好用了。
但也是知其然,不知其所以然啊,所以写出来,大家一起来分析一下,期待某大神帮我解释一下我的做法为什么会成功?
二、电路及常规烧写bootloader过程
这个不多说,图片、教程,在论坛,网上其它的地方,有很多很多:弘毅的教程在此
http://image.geek-workshop.com/forum/201109/23/195429eowkqryodqmjqrwu.jpg
三、问题在这儿呢
现在,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%成功。
。
没法玩了,芯片大涨,328P要25一片了 本帖最后由 catnull 于 2015-5-11 12:51 编辑
http://image.geek-workshop.com/forum/201207/19/1826377yk3tk0qxsnrka53.png那个电容貌似没有必要吧?查看自动复位电路部分。 谢谢分享学习一下 这么高级,上周日,自己意外使用uno r3给lilypad 上传了几个程序来着,不过忘记当时怎么接线的了,今天想再重写下程序,死活都传不上去了。,。。 本帖最后由 wwwusr 于 2015-5-13 15:37 编辑
catnull 发表于 2015-5-11 12:41 static/image/common/back.gif
那个电容貌似没有必要吧?查看自动复位电路部分。
A ,只用电阻的方法还真没试过,以前没看过这个FT232的电路图,一直照着官方UNO中8U2与mega328的DTR连接方式在做。
晚上试试。
还有,请问图中R2 R3的阻值是多少? 100_NM? 本帖最后由 Hackerpro 于 2015-5-13 16:48 编辑
CH340一般不给DTR,不过改进版的arduino板子用的都是这个,不知道他们是怎么做到的
wwwusr 发表于 2015-5-13 15:33 static/image/common/back.gif
A ,只用电阻的方法还真没试过,以前没看过这个FT232的电路图,一直照着官方UNO中8U2与mega328的DTR连接 ...
100欧姆就可以把 学习了......
catnull 发表于 2015-5-13 22:36 static/image/common/back.gif
100欧姆就可以把
试过了,用的PL2303,只另用DTR串100欧电阻,接目标板RST,但不好使。328P,168A,8A,都试过,不成。这跟芯片有关?手上没有FT232,没法对比 本帖最后由 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 我正好要写几个芯片 atmega328芯片锁了怎么办? 通过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.
无法写成功
页:
[1]