16593| 4
|
[进阶] 用USBtinyISP给某宝Pro mini(5v 16Mhz改进版)烧写bootloader失败... |
本帖最后由 darf 于 2014-12-30 15:44 编辑 首先把本次折腾的结论列举如下:
前几天我用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 bytes avrdude:reading on-chip flash data: Reading| ################################################## | 100% 47.80s avrdude: verifying ... avrdude: verification error, first mismatch at byte 0x7d80 0x50 != 0x40 avrdude: verification error; content mismatch avrdude 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.02s avrdude:verifying ... avrdude:1 bytes of lock verified avrdude: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/ ATmega328 nano328.upload.protocol=arduino nano328.upload.maximum_size=30720 nano328.upload.speed=57600 nano328.bootloader.low_fuses=0xFF nano328.bootloader.high_fuses=0xDA nano328.bootloader.extended_fuses=0x05 nano328.bootloader.path=atmega nano328.bootloader.file=ATmegaBOOT_168_atmega328.hex nano328.bootloader.unlock_bits=0x3F nano328.bootloader.lock_bits=0x0F nano328.build.mcu=atmega328p nano328.build.f_cpu=16000000L nano328.build.core=arduino nano328.build.variant=eightanaloginputs ############################################################## mini328.name=Arduino Mini w/ ATmega328 mini328.upload.protocol=arduino mini328.upload.maximum_size=28672 mini328.upload.speed=115200 mini328.bootloader.low_fuses=0xff mini328.bootloader.high_fuses=0xd8 mini328.bootloader.extended_fuses=0x05 mini328.bootloader.path=optiboot mini328.bootloader.file=optiboot_atmega328-Mini.hex mini328.bootloader.unlock_bits=0x3F mini328.bootloader.lock_bits=0x0F mini328.build.mcu=atmega328p mini328.build.f_cpu=16000000L mini328.build.core=arduino mini328.build.variant=eightanaloginputs ############################################################## pro5v328.name=Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega328 pro5v328.upload.protocol=arduino pro5v328.upload.maximum_size=30720 pro5v328.upload.speed=57600 pro5v328.bootloader.low_fuses=0xFF pro5v328.bootloader.high_fuses=0xDA pro5v328.bootloader.extended_fuses=0x05 pro5v328.bootloader.path=atmega pro5v328.bootloader.file=ATmegaBOOT_168_atmega328.hex pro5v328.bootloader.unlock_bits=0x3F pro5v328.bootloader.lock_bits=0x0F pro5v328.build.mcu=atmega328p pro5v328.build.f_cpu=16000000L pro5v328.build.core=arduino pro5v328.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,记得改波特率哦,否则连接不上。嘿嘿,我什么都知道。) 6. 原因分析: 打开E:\Arduino IDE105\hardware\arduino\variants目录,可以看到: Standard和eightanaloginputs目录下分别有一个 .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个。 |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed