burining Arduino bootloader with FTDI

每次要燒錄bootloader時都要上網找一下才會想起當時是怎麼燒的....

試了很多方式, 用得最順手的是這個 Kimio Kosaka寫的
FTDI BITBANG mode...

基礎都是Avrdude, 這個程式要跟 avrdude.conf 還有這個 avrdude-GUI 都放在同一個資料夾下, 這樣比較不會找不到file

1.首先解開 serjtag-0.3
2. 把這個目錄下的\serjtag-0.3\ 的binary刪掉....
3. 把上面copy下來的 avrdude.conf copy 到 \serjtag-0.3\avrdude-serjtag\binary 把原來的蓋掉...
這個down load下來的有修改 ftdi 232的燒錄參數,也有支援 328P
4. 把那個avrdude-GUI野放到這裡 \serjtag-0.3\avrdude-serjtag\binary
5.直接執行 avrdude-GUI

硬體上是利用FTDI的IO來做燒錄的控制,對應如下...168P
miso PB4; # CTS X3(1)
sck PB5; # DSR X3(2)
mosi PB3; # DCD X3(3)
reset PC6; # RI X3(4)

CTS/DSR/DCD/RI是FTDI 232R的腳位...
最後那個1234就是Duemilanove上X3 connector上的腳位:

Arduino上面的ICSP pin define是這樣...

如果是要燒DIP得那就這樣接就行了...

打開avrdude gui,照這樣設...

Port那一格留白...

第一次燒錄的新chip說只能用 4800的baud rate. 但是燒過一次的就可以把 -B 4800拿掉...
avrdude的command大小寫有不一樣的定義....一定要照著打...

接下來先讀fuse bits...

Fuse的設定跟chip的momory/clock等都有關,168跟328就不一樣, 不同的設定也會不一樣....arduino:
chip/ Hfuse/ L fuse/ e fuse/ lock bits
168P/ DD/ FF/ 00/ 0F(Lock) 3F(unlock)
328P/ DA/ FF/ 05/ 0F(Lock) 3F(unlock)

有讀到就是通了, 有錯的話通常是接線或是avrdude的問題,例如config檔裏對手上的晶片的描述不正確或是沒有...

還有一個要注意的, 168跟168P,也不一樣....device signatrue 就不一樣,要選的bootloader也不一樣喔.. 用 -F就可以燒, 不過不能run....

接下來, 先earse chip, earse 完後再讀lock bits應該是3F(unlock)的狀況...


按照所選的chip寫好 H fuse/L fuse/ e fuse...


選好要燒的bootloader, 就按下去...

剛剛在讀fuse的時候, 可以試試fast mode, 如果可以, fast mode會快很多....

最後燒lock bit,不燒好像也可以用...


也可以用command的方法: http://www.geocities.jp/arduino_diecimila/bootloader/index_old_en.html
\serjtag-0.3\avrdude-serjtag\binary>avrdude -c diecimila -P ft0 -p m168 -t -B 4800
fast mode
avrdude -c diecimila -P ft0 -p m168 -t

Nice header for TQFP32:







留言

這個網誌中的熱門文章

Heltec ESP32+OLED+Lora, hardware testing

micro SD card for ESP32, on lolin32 with OLED and heltec 32 lora oled

Install Network Time Protocol(NTP) on BeagleBone with Angstrom linux and set local time zone