Arduino-Hacking

เบิร์น Bootloader ให้ Arduino ตัวใหม่ด้วย FTDI-Bitbang [ตอนที่ 2]

By July 25, 2010 May 9th, 2011 No Comments

จากตอนที่แล้ว เราก้อได้แปลงกายเจ้า UCON-UART [FT232RL] เป็นเครื่องเบิร์นได้แล้ว ในบทความตอนนี้ เราจะเอาเครื่องเบิร์น FTDI ฺBitbang กับ avrdude-gui ใช้งาน burn bootloader กันดีกว่าครับ ความจริงเราสามารถปรับแต่งให้ Arduino IDE เบิร์น bootloader ได้ ซึ่งสนใจก้อเข้าไปอ่านตามลิงค์นี้ “How to run this “FTDI Bitbang method” with the Arduino-IDE” ที่ผมทดลองมายังไม่สะดวกมากนักครับ เพราะว่าอย่างหนึ่ง คือ ตัวโปรแกรม avrdude จะต้องปรับแต่ง เพื่อให้ใช้กับ bitbang ได้ ซึ่งมันยังไม่ compatible กับ arduino-0018 ครับ ลักษณะโปรเจค open-source ก้ออย่างงี้ล่ะครับ ถ้ามันยังไม่นิยมมาก ก้อไม่ค่อยเป็นมาตราฐาน และบ่อยครั้งมันก้อปิดตัวเองไปช้าๆ ครับ ตอนนี้เราก้อใช้กับมันแล้วทำความเข้าใจกันไปครับ

การเบิร์น bootloader ถ้าเราใช้ Arduino IDE ขั้นตอนจะไม่ยุ่งยากมากครับ กด [Burn Bootloader] จากเมนูอย่างเดียว ก้อจบ แต่พอเราใส่เครื่องเบิร์นไปใน IDE ไม่ได้ เลยลำบากเลย วิธีนี้ก้อเผื่อไว้ครับ ส่วนมากเครื่องเบิร์นหรือเครื่องโปรแกรมที่ขายในไทย มันอาจจะไม่ใช้ไม่ได้กับ arduino IDE เราก้อ manual เองเลย [ใครอยากใช้ FTDI แบบไม่ manual? เข้าไปดูตามลิงค์นี้ครับ]

สำหรับในบทความนี้จะขอยึดกับ การเบิร์น Bootloader ของ ไอซี ATmega328 เป็นหลักครับ สำหรับไอซีตัวอื่น ทางท่านผู้อ่าน ต้องลองเองครับ

ขั้นตอนการเบิร์น bootloader มีสี่ขั้นตอนสั้นๆดังนี้ครับ

  1. Unlock
  2. Write Fusebit
  3. Burn Bootloader
  4. Lock

วิธีการเบิร์น bootloader

[ 0 – Zero] เตรียมความพร้อมก่อน ให้ตั้ง clock mode เป็นแบบช้า ให้ใส่ “-B 4800” เข้าไปก่อน?
** chip ใหม่ ยังไม่สามารถใช้ความเร็วสูงได้ (fast clock mode)

 

1. unlock Fuse-Bit

[1] กด [Chip Erase] ลบให้หมด.
[2] จากนั้นกดปุ่ม [Read] บริเวณกรอก Lockbit , ตรวจสอบว่าค่า Lockbit = 0x3F หรือป่าว

 

2. Write Fuse-bits

(1) เซ็ท Fusebit ตามค่าข้างล่าง (สำหรับ ATmega328)

  • hfuse = DA
  • lFuse = FF
  • eFuse = 05

(2) คลิก [Write] เพื่อเขียน fusebit

สลับโหมดเป็น Fast Clock
ลบพารามิเตอร์? ” -B 4800″ ในช่อง command line แล้วกด read fuse-bits
ถ้าอ่านค่า fuse bits ผิคให้กลับสลับเป็นค่า slow clock อีกรอบ แล้วทำการเขียน Fuse-Bits ใหม่

 

3. เบิร์นไฟล์ Bootloader

[1] กดปุ่ม […] -> เลือกไฟล์? “G:\arduino\arduino-0018\hardware\bootloaders\atmega\ATmegaBOOT_168_atmega328.hex”
[2] กดปุ่ม [Erase-Write-Verify] ที่บริเวณ Flash Area

 

4. เซ็ท lock bit? ล๊อคไม่ให้มีการเขียนทับบริเวณ bootloader

[1] เซ็ทค่า Lock = 0F
[2] กดปุ่ม [Write] เพื่อบันทึกค่า

 

ที่กล่าวไปสำหรับ atmega328 แต่ถ้าใครใช้ AVR ตัวอื่น อย่าง ATmega8 และ ATmega168 ใช้ขั้นตอนแบบเดิม แต่ Fuse-bit ไม่เหมือนกันครับ ใช้ค่าดังตัวเลขข้างล่าง

สำหรับ ATmega168

  • hfuse = DD
  • lfuse = FF
  • efuse = 00
  • unlock = 3F
  • lock = 0F
  • bootloader file
    arduino-0018\hardware\bootloaders\atmega\ATmegaBOOT_168_diecimila.hex

สำหรับ ATmega8

  • hfuse = CA
  • lfuse = DF
  • unlock = 3F
  • lock = 0F
  • bootloader file
    arduino-0018\arduino-0018\hardware\arduino\bootloaders\atmega8\ATmegaBOOT.hex

หลังจากนั้น ถอดสาย ICSP จากนั้นจ่ายไฟเข้าไปยังบอร์ด arduino จะได้เห็น LED13 กระพริบๆ? ตอนนี้ตัวไอซี ATmega ตัวใหม่เราได้บรรจุ Bootloader พร้อมจะนำไปใช้กับ Arduino IDE แล้วครับ

Leave a Reply