山寨Arduino踩坑记录

搞硬件,确实没有容易二字。最近做一个板子,准备用Arduino开发,但是又不想用现成的Arduino板子,就自己参考Arduino UNO设计了一个。理论上应该半小时搞定的事情,没成想搞了大半天,把坑记录一下,避免重复踩坑。

1. 烧录引导程序

空白的AVR芯片,要先烧录引导程序,才能用Arduino开发。
用USBtinyISP连接好自制的板子,在Arduino中烧录引导程序,结果报错。仔细一查Arduino UNO用的是ATMEGA328P,而我焊的是AEMEGA328PB,烧写时芯片签名验证失败。
ATMEGA328P的签名是0x1e 0x95 0x0f
AEMEGA328PB的签名是 0x1e 0x95 0x16
关于这两个芯片的区别,可以参考AT15007: Differences between ATmega328/P and ATmega328PB
在网上搜索了一下,用328PB也不是不可以,比如说改avrdude.conf文件中的签名,或者安装MiniCore的板子库,两种方法我都试了,没成功,懒得折腾了。把Arduino UNO上的328P拆下来换到自制板子上,烧写引导程序成功。

2. 上传程序

烧录引导程序后,就可以用串口上传程序了,结果还是报错:

avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x01
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x01
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x01
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x01
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x01
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x01
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x01
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x01
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x01
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x01
Problem uploading to board.  See https://support.arduino.cc/hc/en-us/sections/360003198300 for suggestions.

折腾了半天,发现还是硬件设计上欠考虑了,只预留了串口的RX、TX和GND,RST管脚也要通过一个电容接到USB转串口芯片的DTR,因为下载过程中会对MCU进行复位。这个好办,我的Arduino UNO拆了MCU,正好可以用来上传程序,接好RX、TX、GND、+5V和RST,还是报错,最后怀疑是RX和TX串接电阻的原因,因为Arduino UNO上已经串了1K电阻,我自制的板子上也串了1K电阻,应该是电平不对,把自制板上的1K电阻短接,终于上传成功。
贴一个MiniCore的最小系统图,其中D1、R2和D2不是必须的。
在这里插入图片描述
用USB转串口上传程序的图如下:
在这里插入图片描述
Arduino Reset --> 0.1µF Capacitor --> DTR PIN
Arduino TX (Pin 1) --> RXD
Arduino RX (Pin 0) --> TXD
Arduino 5V --> +5V
Arduino GND --> GND

CP2102是3.3V电平,如果MCU是5V电平,可能会有问题,把MCU的RX和TX串接电阻改成0欧和1K,应该也可以,未验证。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值