一、ATMEGA328P最小系统
二、使用SPI方式给AVR单片机烧录程序
使用引脚:MISO/MOSI/SCK/RESET/VCC/GND。单片机自己有独立供电时,不要接VCC。注意此处RESET和TTL烧录方式中DTR的区别。
使用SPI方式烧录程序,是底层重写程序,单片机中的bootloader会被覆盖,无法再通过串口下载程序。如果需要恢复,在ArduinoIDE中选择菜单“工具-烧录引导程序”,会重新下载bootloader到单片机中。
可以使用多种硬件通过SPI方式烧录程序,常用的是USBasp及Arduino as ISP两种。因为Win10下USBasp驱动安装比较麻烦,所以建议使用Arduino as ISP方式。
当MOSI/MISO/SCK引脚作为信号引脚连接了其他电路时,如果目标只接收信号(比如WS100T10的CLK和STB引脚)则不影响烧录,如果目标也发出信号则影响烧录,需要烧录前断开。
全新的AVR芯片,无法直接用PROGISP等软件读出ID及熔丝位,需要先烧录Bootloader,才能读出。(此条使用Arduino版USBasp测试,未使用通用版测试)
晶振必须正常工作!经过测试发现大部分时候无法烧录都是因为晶振不工作!尤其是贴片晶振,超过400度焊接必坏,最好不超过300度!
三、使用串口给AVR单片机烧录程序
使用引脚:RX/TX/DTR/GND/VCC。单片机自己有独立供电时,不要接VCC。注意:DTR为RESET引脚通过特定电路引出,不同于SPI方式的直连RESET引脚。
全新的芯片内不含Bootloader程序,需要先用SPI方式烧录引导程序,才可以使用串口烧录程序及调试。
晶振必须正常工作!经过测试发现大部分时候无法烧录都是因为晶振不工作!
四、 使用USBasp作为SPI硬件
该方式需要安装USBasp驱动。因为微软强制签名原因,Win10无法正常安装USBasp驱动,可使用Zagid安装:http://zadig.akeo.ie/。
ArduinoIDE,菜单“工具-编程器”选择“USBasp”,下载程序时按住SHIFT再点击上传按钮即可。
USBasp与ArduinoIDE及驱动有版本兼容性问题,经测试,在Win10环境下,使用“libusbK (v3.0.7.0)”驱动,ArduinoIDE 1.8.12测试通过。
五、将Arduino UNO作为SPI硬件
Arduino作为USBasp使用可以免去安装驱动的麻烦,具体办法很简单,在ArduinoIDE里打开例程“文件-示例-ArduinoISP-ArduinoISP”,当作普通程序写到Arduino UNO即可,这样UNO就成为了一块USBasp开发板。使用时,在ArduinoIDE菜单“工具-编程器”选择“Arduino as ISP”,其他和USBasp用法相同。
使用该方式可以直接为新片烧录程序(包括引导程序),无需设置熔丝位!
引脚定义:10.RESET、11.MOSI、12.MISO、13.SCK
- 导入ISP代码
- 为UNO烧入ISP代码
- 将UNO作为ISP为其他AVR烧入程序
UNO作为ISP为新片烧录程序时的状态:
- 连接前,13脚信号灯常亮。
- 连接后(烧录前),看13脚信号灯,如果目标片中有Bootloader则闪烁,否则常亮。另外目标片不工作等异常情况都会常量,先检查供电原因,再排查其他原因。
- 烧录过程中,13脚/TX/RX信号灯闪烁。
- 烧录后,13脚信号灯闪烁,与烧录前状态相同。
六、淘宝USBasp刷为Arduino官方USBasp
因为固件内容不同,ArduinoIDE通过淘宝购买的USBasp下载程序时会提示“avrdude: warning: cannot set sck period. please check for usbasp firmware update. ”。一种解决办法是用支持淘宝USBasp的“ProgISP”程序,还有据说可以修改ArduinoIDE的配置文件支持其他USBasp,更好的办法是将淘宝USBasp刷为Arduino的USBasp,教程:http://www.rogerclark.net/updating-firmware-on-usbasp-bought-from-ebay/。
相关资料:
http://www.fischl.de/usbasp
http://www.dfrobot.com.cn/community/forum.php?mod=viewthread&tid=10274
https://www.cnblogs.com/vinccc/p/8337305.html
淘宝USBasp原固件备份:original_firmware.7z
七、下载的Bootloader不能使用,不能通过串口下载程序
- 下载的Bootloader版本不对。下载Bootloader时,ArduinoIDE一定要选择正确的硬件型号。例如328P则选择菜单“工具-开发板-Arduino Pro or Pro mini”。注意!此处选择的是最终要烧录Bootloader的单片机型号!之前用UNO当作USBasp,想当然的把开发板选成了UNO,结果烧录Bootloader显示成功,但是无法使用。其实把UNO当作USBasp使用时,只要把他看成普通USBasp即可,无需考虑UNO属性。
- 晶振频率不对。晶振频率要和Bootloader对应,例如ArduinoIDE菜单“工具-处理器”选择了“5V/16MHz”,就要对应配置16M晶振。此处菜单也有8M晶振可选,如果是其他频率晶振,需要自己手工修改配置文件,编译Bootloader。
- 因为晶振未工作。串口波特率和晶振有关,晶振不工作则串口不正常。
文章评论