用USBtinyISP给某宝Pro mini(5v 16Mhz改进版)烧写bootloader失败...

本帖最后由 darf 于 2014-12-30 15:44 编辑

首先把本次折腾的结论列举如下:
原版Xloader 1.0不能给 pro mini 上载程序,可以解决。(往后看)ft232rl USB转串口芯片与 pro mini 的引脚连接,无需按照网上千奇百怪的方法连接,无需人肉reset,只要六根杜邦线一排,从DTR引脚开始按顺序连接就行。用 Uno 给其它 arduino 芯片烧写 bootloader 的连线和操作。按照官方教程连接即可,不用瞎改。有了Uno 和 USBtinyISP,基本上所有的 arduino板子都不怕bootloader损坏了。几乎所有bootloader损坏的板子、写不进程序的板子都可以修复,只要没有冒烟。不要扔,很不环保的。重点解决用USBtinyISP给Pro mini烧写bootloader失败的问题。原因很哭笑不得,带有浓郁的地域和时代风采。如下所述:

前几天我用Xloader 1.0 给 pro mini 上载Grbl 0.9.hex(你们懂得),结果Xloader设备选择下拉菜单中没有 pro mini 选项!我擦~
于是乎哥怒了,直接选了个nano的选项,开刷。然后,就没有然后了,pro mini阵亡了,bootloader损坏,blink都写不进去了….
这,是所有悲剧的开始…先抢救这块10块软妹币的pro mini吧~

首先按照下图连接:(实验证明,这种官方连接是对的,不需要按照某些同学说的“把红色ISP 2脚(vcc)改接到 pro mini的RAW脚”)

  1. IDE105下用USBtinyISP烧写bootloader,得到以下错误E:\ArduinoIDE105\hardware/tools/avr/bin/avrdude -CE:\ArduinoIDE105\hardware/tools/avr/etc/avrdude.conf -v -v -v -v -patmega328p -cusbtiny-e -Ulock:w:0x3F:m -Uefuse:w:0x05:m -Uhfuse:w:0xDA:m -Ulfuse:w:0xFF:m …………省略1000字节…………Systemwide configuration file is "E:\ArduinoIDE105\hardware/tools/avr/etc/avrdude.conf"…………省略1000字节…………avrdude:input file E:\ArduinoIDE105\hardware\arduino\bootloaders\atmega\ATmegaBOOT_168_atmega328.hexcontains 32670 bytesavrdude:reading on-chip flash data:Reading| ################################################## | 100% 47.80savrdude: verifying ...avrdude: verification error, first mismatch at byte 0x7d80 0x50 != 0x40avrdude: verification error; content mismatchavrdude done.Thank you.

  2. 然后,用UNO烧写pro mini的bootloader(教程请度娘),结果成功了,代码如下:E:\ArduinoIDE105\hardware/tools/avr/bin/avrdude -CE:\ArduinoIDE105\hardware/tools/avr/etc/avrdude.conf -v -v -v -v -patmega328p -cstk500v1-P\.\COM8 -b19200 -e -Ulock:w:0x3F:m -Uefuse:w:0x05:m -Uhfuse:w:0xDA:m-Ulfuse:w:0xFF:m …………省略1000字节…………Systemwide configuration file is "E:\ArduinoIDE105\hardware/tools/avr/etc/avrdude.conf"…………省略一亿字节和无数个[ff]…………Reading| avrdude: Send: V [56] X [58] . [00] . [00] . [00] [20] avrdude:Recv: . [14] avrdude:Recv: . [cf] avrdude:Recv: . [10] ##################################################| 100% 0.02savrdude:verifying ...avrdude:1 bytes of lock verifiedavrdude:Send: Q [51] [20] avrdude:Recv: . [14] avrdude:Recv: . [10] avrdudedone.Thank you.

  3. 又用USBtinyISP给Nano烧写bootloader做实验。看看是否是USBtinyISP的硬件损坏,结果成功了。证明烧写器硬件没有问题。

  4. 于是怀疑是使用USBtinyISP时引用的这两个文件出了问题或者不匹配:E:\Arduino IDE105\hardware\arduino\bootloaders\atmega\ATmegaBOOT_168_atmega328.hex”和E:\Arduino IDE105\hardware\arduino\ boards.txt
    因为ATmegaBOOT_168_atmega328.hex文件在给 nano 写 bootloader的时候也用过,完全正常,所以怀疑boards.txt文件有些问题。
    打开后boards.txt文件,分别复制对比nanow/ATmega328、mini w/ATmega328和Arduino pro or pro mini(5V, 16Mhz) w/ATmega328这三个芯片在其中的配置,对比如下:##############################################################nano328.name=Arduino Nano w/ ATmega328nano328.upload.protocol=arduinonano328.upload.maximum_size=30720nano328.upload.speed=57600nano328.bootloader.low_fuses=0xFFnano328.bootloader.high_fuses=0xDAnano328.bootloader.extended_fuses=0x05nano328.bootloader.path=atmeganano328.bootloader.file=ATmegaBOOT_168_atmega328.hexnano328.bootloader.unlock_bits=0x3Fnano328.bootloader.lock_bits=0x0Fnano328.build.mcu=atmega328pnano328.build.f_cpu=16000000Lnano328.build.core=arduinonano328.build.variant=eightanaloginputs##############################################################mini328.name=Arduino Mini w/ ATmega328mini328.upload.protocol=arduinomini328.upload.maximum_size=28672mini328.upload.speed=115200mini328.bootloader.low_fuses=0xffmini328.bootloader.high_fuses=0xd8mini328.bootloader.extended_fuses=0x05mini328.bootloader.path=optibootmini328.bootloader.file=optiboot_atmega328-Mini.hexmini328.bootloader.unlock_bits=0x3Fmini328.bootloader.lock_bits=0x0Fmini328.build.mcu=atmega328pmini328.build.f_cpu=16000000Lmini328.build.core=arduinomini328.build.variant=eightanaloginputs##############################################################pro5v328.name=Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega328pro5v328.upload.protocol=arduinopro5v328.upload.maximum_size=30720pro5v328.upload.speed=57600pro5v328.bootloader.low_fuses=0xFFpro5v328.bootloader.high_fuses=0xDApro5v328.bootloader.extended_fuses=0x05pro5v328.bootloader.path=atmegapro5v328.bootloader.file=ATmegaBOOT_168_atmega328.hexpro5v328.bootloader.unlock_bits=0x3Fpro5v328.bootloader.lock_bits=0x0Fpro5v328.build.mcu=atmega328ppro5v328.build.f_cpu=16000000Lpro5v328.build.core=arduinopro5v328.build.variant=standard
    交叉对比一下(这是需要天赋的技能),可以看出只有pro mini的最后一句用了standard,而没有用eightanaloginputs(字面翻译成“8模拟输入”)。最后那段最后一个词更改成 eightanaloginputs,保存,关闭。5. 再次用USBtinyISP烧写 arduino pro min的bootloader,等待~成功!然后,再用Xloader上传Grbl 0.9,28k大小,也成功:(原版的Xloader1.0 选择设备的下拉菜单是不支持pro mini的,需要改造一下。打开Xloader文件夹,打开devices.txt文件,加入一行不带引号的“Pro mini(ATmega328);m328p;stk500;57600;”保存关闭,重开软件就行了。多了不解释,有善缘的施主可以自行感受为什么。)通过串口查看一下吧:成功哦~(此处额外提个醒,grbl v0.9 这个版本,连接com口的波特率不再是v0.8的9600了,升级成了115200,记得改波特率哦,否则连接不上。嘿嘿,我什么都知道。)

  5. 原因分析:打开E:\Arduino IDE105\hardware\arduino\variants目录,可以看到:Standardeightanaloginputs目录下分别有一个 .h文件,使用记事本打开如下图:右边的是standard,左边的是eightanaloginputs定义文件。可以看到eightanaloginputs定义文件中完全引用了standard定义,唯一不同的是将NUM_ANALOG_INPUTS 函数由6变成了8。意思就是这个pro mini板子具有8个模拟针脚,而不是6个。我腚眼一看板子,我靠,果然买来的所谓 arduino pro mini 5v 16Mhz改进版 的板子,上面有A0~A7八个模拟针脚!!!!!!!!怪不得……对于这种山寨作坊+某宝联合拉屎不擦腚的创造我真&…*%$(!%¥#@~。墙裂建议各位施主低头俯视一下自己手中的板子是有几个模拟针脚。

我买的和原版arduino pro mini引脚对比如下图:原版,好明显:A0~A5移动六个模拟针脚。

我买的山寨版,好明显:有A0~A7八个模拟针脚。
从根源上来说,山寨版(所谓改进版)用的ATMEGA328P-AU有8个模数转换IO,而原版用的ATMEGA328P-PU只有6个。

标签: Arduino教程