本文僅適用於BootLoader損壞且買到國產“免驅USBasp下載線”導致Arduino IDE無法識別從而不能燒寫的情況。是一種略顯非主流的操作方式。
因為Arduino的IDE並不支持這種免驅的USBasp線,會提示錯誤。
事情的全程是這樣的:
1.症狀
用Arduino控制舵機不慎玩脫了,插入電腦時,在“設備管理器”中沒有串口提示,用Arduino IDE無法下載程序到電路板中,提示找不到COM口。而且電腦也找不到串口。估計是BootLoader損壞了,准備用USBasp下載線重新燒錄。
2.准備解決
之前的標准USBasp下載線送給了表弟,只好再買一根。買了個“國產免驅動”的下載線,倒是省了安裝驅動了。插到電腦上之后並不生成串口號,只是識別為了一個USB-HID設備,如圖。
普通的USBasp線有10個引腳,Arduino只有6個。但只要引腳接對了,還是能適配的。用杜邦線兩兩連接以下引腳:MOSI,VCC,RST,SCK,MISO,GND。
不幸的是,由於Arduino IDE的"高端大氣國際范兒",根本識別不到這種修改過固件的“中國特色”USBasp下載線,用常規方法根本無法進行燒錄操作,顯示錯誤“could not find USB device "USBasp" ”“avrdude: stk500_getsync(): not in sync: resp=0x00”,無法連接。
3.撥雲見日
歸根結底,Arduino不就是一個Atmega 328P單片機和外圍電路嘛,BootLoader也不過是單片機的一個FLASH文件,何必要依靠Arduino IDE呢!(說是這么說,當時寫不進去的時候還是有點驚慌的…) 冷靜,冷靜。既然有了下載線,我們就按單片機的玩法,直接下載編譯好的FLASH文件。但Arduino UNO的FLASH是哪個呢?沒有官方列表中支持的下載器怎么辦?
這種國產免驅動的下載線,可以用PROGISP這款軟件。(AVR fighter似乎也能用,但是所支持的芯片類型數目似乎沒有PROGISP多)
下載軟件選好了,但軟件里一堆的參數應當如何設置?在Arduino的文件夾里已經有了說明。以我的為例,“E:\arduino-1.0.5-r2\hardware\arduino”文件夾中的boards.txt里面包含了各種型號Arduino的參數,我的是Arduino UNO,文件里對應記載參數如下:
##############################################################
uno.name=Arduino Uno
uno.upload.protocol=arduino
uno.upload.maximum_size=32256
uno.upload.speed=115200
uno.bootloader.low_fuses=0xff
uno.bootloader.high_fuses=0xde
uno.bootloader.extended_fuses=0x05
uno.bootloader.path=optiboot
uno.bootloader.file=optiboot_atmega328.hex
uno.bootloader.unlock_bits=0x3F
uno.bootloader.lock_bits=0x0F
uno.build.mcu=atmega328p
uno.build.f_cpu=16000000L
uno.build.core=arduino
uno.build.variant=standard
##############################################################
這里並不用完全記住,設定幾個關鍵值即可:
1.用杜邦線對應連接arduino與USBasp下載線的以下引腳:MOSI,VCC,RST,SCK,MISO,GND。
下載線插入電腦,打開PROGISP軟件,FLASH文件選擇“E:\arduino-1.0.5-r2\hardware\arduino\bootloaders\optiboot”文件夾里的“optiboot_atmega328.hex”。
2.上面列表中的low_fuses=0xff(低熔絲位),high_fuses=0xde(高熔絲位),extended_fuses=0x05(擴展熔絲位)這三個要在PROGISP里面設置好。
3.點擊軟件“自動”,即開始自動擦除,復位,燒寫,設置熔絲位等一系列操作了。十幾秒之后提示完成。
然后拔掉下載線,用USB線連接電腦和Arduino,是不是又能識別出新硬件、又能歡樂地寫入程序了?