Arduino Hacking ตอน Burn Bootloader ง่ายนิดเดียว

Posted by | September 6, 2009 | Arduino-Hacking | 6 Comments

ตอนนี้ คนเริ่มใช้ Arduino กันเยอะมากขึ้นแล้ว หลังจากที่สำรวจ ตอนนี้ก้อมี บอร์ดที่เรียกว่า Arduino(clone) /Freeduino /m168 board อยู่หลายเจ้าเลย

เดี่ยวคงจะมีปัญหา ตัว bootloader พังบ้างล่ะ ตอนผมลองเล่นแรกๆ ส่วนมากจะชอบสร้างบอร์ดเองกัน แต่จะติดปัญหา ส่วนของเครื่องโปรแกรม คือเครื่องโปรแกรมที่อยู่ในโปรแกรม Arduino มันหาไม่ได้ คือจะเพิ่มเครื่องโปรแกรมที่เรามีอยู่ได้หรือป่าว ทางเราเลยจะบอกวิธีการ hack สุดแสนจะง่าย ให้ Arduino ใช้เครื่องโปรแกรมเราได้

ขอเล่าย้อนไปก่อน การจะ Hack จะต้องเข้าใจโครงสร้างของ Arduino ก่อน

Arduino เป็นโปรเจค open-source ที่รวมกับ โปรเจค open-source หลายๆตัวเข้ามาใช้ (อันนี้ต้องขอบคุณ คนพัฒนาในอดีตครับ ทำเอาไว้เยอะมาก) อย่างเช่น ตัวโปรแกรม base จะเป็น java ทำให้มันทำงานได้หลายๆ platform ตัวคอมไพล์เลอร์ของ Arduino จะใช้ avr-gcc และตัวสุดท้าย ตัวโปรแกรม ใช้ avrdude ในการ burn โปรแกรม

ถ้าเข้าใจโครงสร้างมันแล้วจะใส่อะไร เพิ่มอะไรก้อพอจะหาทางไปต่อได้ถูกครับ (ใช้พี่ google ดำไปได้ต่อ)

กลับมาที่ bootloader อีกรอบ การเบิร์น boot-loader นั้นไม่ยากยุ่ง เพราะว่าในโปรแกรม Arduino จะมีส่วนของ burn bootloader อยู่แล้ว ถ้าท่านมีเครื่องโปรแกรมตามรายชื่อในรูปก้อใช้งานได้เลยครับ แต่ปัญหามีอยู่ว่า เครื่องโปรแกรมที่มีรายชื่อ เป็นเครื่องที่ไม่มีขายในไทย จะเอามาใช้งานได้บ้างไหม

โดยปกติจะใช้ burn bootloader ตอนไหนบ้าง ผมจะใช้ตอนแรก ในการสร้างบอร์ดครับ หลังจากที่ได้ไอชีมาใหม่ ยังไม่ได้ใส่ firmware กับอีกรอบที่ bootloader เสีย (อันนี้โอกาสเกิดได้น้อย แต่มันก้อยังเสียได้) อาการเสียของ bootloader ดูง่ายๆ ถ้า LED13 บนบอร์ดไม่กระพริบ แสดงว่า boot-loader มันจะเสียแล้ว ?วิธีการเบิร์น bootloader ก้อแค่ กดที่เมนู Burn Bootloader ตอนโปรแกรมมันจะเบิร์น firmware และ set fusebit ให้

::กรอบแทรก :: เดี่ยวคนมาใหม่จะงง ขออธิบายให้รู้จัก bootloader กันสักนิด

? bootloader คือ firmware ส่วนหนึ่งที่ทำหน้าที่ เป็นที่ช่วยในการ upload โปรแกรม หรือ sketch ที่เราเขียนเข้าไปใน flash rom ผ่านทางสาย serial หรือ usb ซึ่งแล้วแต่คนออกแบบครับ โดยไม่จำเป็นต้องมีเครื่องโปรแกรมไอชี

สำหรับวิธีการ Hacking ให้ Arduino มีเครื่องโปรแกรมนั้นง่ายๆครับ ก้อแค่ edit file ไฟล์ programmers.txt ซึ่งจะอยู่ที่? >> [drive:]\arduino\hardware\programmers.txt ดังรูป

วิธีการเพิ่มแค่ใส่ CODE เข้าไปเพิ่ม แล้ว restart โปรแกรมใหม่เท่านั้นเอง ตัวแปร config ต่างๆมันจะเก็บไว้ในรูปแบบ object ของ java เอาที่สำคัญๆ ได้แก่

.communtication กำหนดว่าใช้ usb หรือ serial

.protocol เครื่องโปรแกรมใช้รูปแบบการรับส่งข้อมูลแบบไหน อันนี้ท่านต้องรู้จักโปรแกรม avrdude แล้วท่านจะรู้จัก protocol ต่างๆครับ

เครื่องโปรแกรมที่มีในไทยนะครับ ที่ผมเคยทดลองใช้อยู่ จะมีรุ่นดังต่อไปนี้นะครับ

  1. AVR-ISP (LPT)
  2. AVR-ISP (USB)
  3. USBASP (รุ่นทำกันเอง)

AVR-ISP-LPT

ET -AVR ISP ตัวแรกนี้ ก้อมันถูกดี พอใช้งานได้ แต่มันเป็น LPT เดี่ยวนี้เลยไม่นิยมกัน? แต่ก้อแนะนำเลยสำหรับคนที่ นานๆๆ จะเอามาใช้สักที่

วิธีติดตั้งก้อ copy code เข้าไปใส่ใน programming.txt

ettparallel.name=ETT ISP Parallel Programmer
ettparallel.protocol=pony-stk200
ettparallel.force=true
#ettparallel.delay=200

ก้อใส่ที่บรรทัดล่างสุดครับ

หลังจากนั้นเปิดโปรแกรม Arduino แล้วเปิดใหม่ จะเห็น ett isp ที่เพิ่มเข้าไป ตอนนี้ก้อสามารถเบิร์นด้วย ETT ISP ได้แล้ว และ เราใช้วิธีนี้ เพิ่ม ตัว programmer ?ตัวอื่นด้วยครับ

** วิธีการใช้งาน ก้อแค่ กด เลือก ETT ISP เครื่องโปรแกรมนี้มีปัญหานิดหน่อยครับ ถ้าบนบอร์ดมี LED13 ที่ต่อกับ SPI บัสอยู่ควรจะเอาออกด้วย มันจะทำให้ burn ไม่ได้ครับ

DIY USBASP

ตัวนี้เป็นรุ่นยอดนิยมอีกเช่นกัน สำหรับมือเก๋า ที่ชอบทำเอง ?และ งงเองบ่อยๆๆ ผมก้อกว่าจะใช้งานได้ ก้องง ไปนานเหมือนกัน ใครสนใจก้อไปหาวงจรและทดลองทำได้ครับ USBASP(link หน่อย)

usbasp.name=Usbasp
usbasp.communication=usb
usbasp.protocol=usbasp

รุ่นนี้ผมใช้แล้วมันงอแงง บ่อย เลยเลิกใช้ไปครับ เครื่องเบิร์น น่าจะใช้อะไรที่ไว้ใจได้ครับ หลังๆๆ ที่ไอยาราฟันส์ เบิร์น IC เป็น เข่งๆๆ เลยไอชีเสีย เครื่องเบิร์น ใช้งานได้บ้างไม่ได้บ้าง? มันเสียเวลาครับ

AVR-ISP-USB

ตัวนี้เป็นของ sure electronic สำหรับสีเขียวฟ้า เป็นของทำเลียนแบบ ของแท้ครับ แต่ถ้าเป็นของไทยๆ ก้อจะมี? ETT จะกล่องสีดำครับ หลังจากผมใช้ LPT แล้วมันมีปัญหาบ้าง USBASP ก้อยังไม่พอใจอีก ผมลองของ ett ข้างห้องมันก้อไม่ถูกใจ ก้อมันโหลนิ ใครๆก้อมี ฮ่าๆ ผมเลยอยากลองของแพงๆบ้าง เลยซื้อกล่องเขียวๆมาจาก เวปจีนราคาประมาณ 1200 บาทครับ (CEO รวยจิงๆ)

serialavrisp.name=SerialAVRISP
serialavrisp.communication=serial
serialavrisp.protocol=stk500v2

หลังจากใส่ code ครบจะเป็นดังภาพ

ตอนนี้ ท่านก้อสามารถเอาเครื่องโปรแกรมในไทย มาใช้งานได้แล้ว สำหรับเครื่องของยี่ห้ออื่น เดี่ยวเอาไว้ผมหายืมมาได้จะมาบอกวิธีใช้อีกที่ครับ

ประสบการณ์เสริมที่ได้จาก Arduino นะครับ เมื่อก่อนที่ใช้ avr เวลาโปรแกรมจะผ่าน เครื่องโปรแกรมไอชี พวก isp programming ผมจะเจอปัญหาเครื่องโปรแกรมไม่ดี เบิร์นไอชีเสียบ่อยๆมาก ถ้าเป็นไอชี mega8 ตัวล่ะ 50 บาท ไม่เท่าไร บ้างที่ smt ตัวแพงๆ เบิร์นเสียมันเจ็บใจ แต่หลังจากที่ upload ผ่าน bootloader ก้อมีข้อดีอย่างหนึ่ง คือโอกาสที่จะเบิร์นให้ไอชีเสียมันก้อน้อยลงครับ (เพราะว่าไม่ค่อยได้ใช้เครื่องเบิร์น ไม่มีคุณภาพมั่ง)

สำหรับ bootloader ถ้าท่านประยุกต์ใช้กับ โปรเจค AVR อื่นๆ ได้นะครับ ซึ่งหาได้จากในไอยาราฟันส์ จะมีอยู่ จับ ettstamp ใส่ bootloader ,bootloader แบบ usbasp

Justfun

About chang

ชื่อ “ช้าง” ส่วนมากเขาจะเรียกว่า “พี่ช้าง” แล้ว มีความสนใจทางเทคโนโลยีทางคอมพิวเตอร์ อิเล็กทรอนิกส์ และ หุ่นยนต์ เป็นทั้งนักคิด นักประดิษฐ์ ชอบทดลองเล่น จนเดี่ยวนี้รู้สึกว่าจะเล่นมากกว่ามืออาชีพไปสักแล้ว

  • T-Rex

    พี่ครับคือผมพึ่งเริ่มเล่นอะครับไม่มีความรู้ด้านอิเล็กอยากรู้ว่าแล้วไอตัว freearduino ถ้าประกอบเองต้อง burnloader รึเปล่าครับ

    • ถ้าซื้อชุด kit ส่วนมากจะ burn มาให้ครับ
      แต่ทำเอง ซื้อไอซีจากร้าน น่าจะต้องทำเองนะครับ

  • Y Korradol

    พี่ครับ ผมลอง ใช้ตัว PX4000 ของ inex ลง bootloader แล้วตัว IDE มันขึ้น error อ่าครับ อย่าทราบว่า เป็นเพราะอะไร หรือว่าต้องเลือก programmer เป็นอะไร 

    ขอบคุณล่วงหน้าครับ

  • K_unnawut

    พี่ครับผมใช้ AVR ISP USB V1.0 ของETT พอburn bootloaderให้ชิปไปแล้วลองต่อบอร์ดกับUSB แล้วลอง burn โปรแกรม มันerrorอ่ะ (fuse bit ,lock bit ตามที่เว็บต่างๆบอกเป๊ะ)

  • Phunpong Wongfun

    พี่คับเวลาผม Burn แล้วมันขึ้น avrdude: stk500_getsync(): not in sync: resp=0x00 หมายความว่าไงคับ

  • Phunpong Wongfun

    ผมใช้ Freeduino V1.16