最近受托制作一个基于Arduino MEGA2560的板子,在电路上增加些接口可以不用外接模块。由于很久没接触Arduino,一些操作都忘记了,现记录下以后再搞时候碰到问题以备回忆。
1. 烧写bootloader的问题
在宝上找了个最便宜的USBtinyISP,驱动装了,也显示正常,但就是不能用。然后再买个了贵的USBisp(ZF-009+)就OK了。
2. IDE上传程序的问题
由于板子尺寸限制,串口选择CH340N芯片,电路最简单。但下载程序一直显示超时。尝试换了现成的FT232,也是一样。
一个有意思的现象是,烧写一次bootloader后就能upload一次程序,第2次就不行。校验bootloader并没问题。
网上检索一番,是要按reset一段时间才行,也没用。
最后查看bootloader源代码,发现
似乎默认是1s等待IDE进入下载程序进程。果然是1s,需要反应快。。。
以后有时间重新编译一个等待时间长点的bootloader。。。。。
3. 操作步骤如下
按下reset键
观察“编译......”
当显示“上传”的时候,立即释放reset键(必须在1秒内!!)
OK,上传成功
4.补充:一键upload
按reset然后upload很不方便,浏览牛人帖子,使用了CH340的DTR引脚实现自动reset功能。研究分析CH340N虽然没有DTR引脚,但有RTS引脚。
DTR是数据准备好告知接收端,RTS是请求发送,都是输出。用示波器观察,Arduino IDE启动upload的整个过程是拉低RTS引脚的。
那么,RTS的下降沿就可以触发一次reset了,这个耦合电容比复位的计时电容要大。试验结果很满意,能够实现一键upload,运行应用程序时串口也能正常工作(不使用RTS)