ฉันจะเขียน bootloader ได้อย่างไร


15

ฉันได้รับคำสั่งให้ "เบิร์น bootloader" ไปยัง Arduino เพื่อแก้ไขข้อผิดพลาดที่ฉันได้รับ ฉันจะทำสิ่งนี้ได้อย่างไร (และ bootloader คืออะไร?)


การเขียน bootloader ไปยัง arduino นั้นค่อนข้างง่ายหากคุณทำตามขั้นตอนที่ถูกต้อง วิดีโอนี้อาจช่วยคุณได้: YouTube - วิธีเขียน Bootloader ไปยัง ATMEGA328P-AU (SMD) | Homemade ARDUINO MINI
Sandesh HS

คำตอบ:


15

bootloader เป็นโปรแกรมขนาดเล็กที่เกือบตลอดเวลาบน Arduino มันจัดการการอัปโหลดและเริ่มร่างที่คุณทำและกระพริบไฟ LED พิน 13 เมื่อใดก็ตามที่บอร์ดรีเซ็ต


ในการเบิร์น bootloader:

  1. ได้รับAVR ISP , USBtinyISP , ParallelProgrammerหรือบอร์ด Arduino อื่น นี่จะเป็น ISP ของคุณ
  2. ให้เว้นการเชื่อมต่อ ISP กับพิน ICSP บนบอร์ดของคุณ
  3. จ่ายไฟให้บอร์ดของคุณด้วยสาย USB หรือแหล่งจ่ายไฟภายนอก
  4. เปิด Arduino IDE
  5. ตรวจสอบให้แน่ใจว่าคุณได้เลือกบอร์ดที่ถูกต้องที่คุณกำลังเขียนอยู่Tools ► Board ►ใน IDE ตรวจสอบอีกครั้งแม้ว่าคุณจะสามารถอัปโหลดโปรแกรมได้อย่างถูกต้อง การอัพโหลดไม่จำเป็นต้องมีบอร์ดที่เหมาะสมเสมอไป
  6. Tools ► Programmer ►เลือกโปรแกรมที่เหมาะสม
  7. คลิกTools ► Burn Bootloaderและรอ ไม่ควรใช้เวลามากกว่าหนึ่งนาทีและมักใช้เวลาเพียงไม่กี่วินาที

แหล่งที่มา:


1
AVRISP นั้นค่อนข้าง EOL (จนถึงสิ้นชีวิต) ณ จุดนี้ อย่างน้อยที่สุดคุณต้องการ AVRISPmk2 นอกจากนี้ยังมีเครื่องมืออื่น ๆ อีกมากมายที่น่าสนใจ (เช่น AVR One!) คุณน่าจะบอกว่า{line 1} or other dedicated ISP programmer.
Connor Wolf

บนบอร์ดอย่าง Arduino Yun ทุกครั้งที่คุณ "อัปโหลดผ่าน wifi" คุณกำลังเบิร์น bootloader ที่รวมเข้ากับร่างของคุณ ด้วยความจริงที่ว่า Linux CPU นั้นเชื่อมต่อกับ AVR MCU ผ่าน SPI เพื่อให้คุณสามารถเลียนแบบ ISP ด้วยซอฟต์แวร์
Federico Fissore

@FedericoFissore - นั่นคือเหตุผลที่ใช้เวลานานมาก?
TheDoctor

ใช่แล้วและความจริงที่ว่าการบีบอัด GPIO นั้นช้าลง มีความพยายามอย่างต่อเนื่องเพื่อเร่งความเร็ว
Federico Fissore

8

bootloader คืออะไร

และ bootloader คืออะไร?

bootloader เป็นโค้ดขนาดเล็กที่อยู่ในส่วน "สูง" ของหน่วยความจำโปรแกรม โดยปกติแล้วจะไม่ถูกลบเมื่อคุณอัปโหลดภาพร่างใหม่ โดยมีวัตถุประสงค์เพื่อเปิดใช้งานทันทีหลังจากรีเซ็ต (ฟิวส์ถูกกำหนดค่าให้เริ่มรหัสที่ที่อยู่ bootloader แทนที่จะเป็นที่อยู่ 0x0000) bootloader จะรอเวลาสั้น ๆ (เช่นหนึ่งวินาที) เพื่อดูว่า "การเขียนโปรแกรม" ข้อมูลมาถึงในพอร์ตอนุกรม

  • ถ้าเป็นเช่นนั้นมันจะอ่านข้อมูลนั้นและถอดรหัสเป็นส่วนที่เหลือของหน่วยความจำแฟลช ทำงานร่วมกับโปรแกรมอัปโหลด (โดยปกติแล้ว avrdude) ร่างใหม่จะถูกส่งผ่านพอร์ตอนุกรม bootloader จะลบหน้าของหน่วยความจำแฟลชและแทนที่ด้วยรหัสใหม่ เมื่อเสร็จแล้วมันจะรันรหัสใหม่

  • หากไม่มีคำแนะนำมาถึง bootloader จะกระโดดไปตามที่อยู่ 0x0000 เพื่อดำเนินการร่างที่มีอยู่บนกระดาน


วิธีเปลี่ยน bootloader

วิธีอื่นในการโปรแกรม bootloader คือการใช้ร่างที่ฉันเขียนในขณะที่ผ่านมาซึ่งทำงานบน:

  • Uno (หรือคล้ายกันเช่น Duemilanove)
  • เลโอนาร์โด
  • Mega2560

บอร์ด "การเขียนโปรแกรม" จะรันร่างซึ่งมี bootloaders สำหรับบอร์ดจำนวนหนึ่ง คุณเชื่อมต่อบอร์ดการเขียนโปรแกรมกับบอร์ดเป้าหมาย (บอร์ดที่ต้องการให้ bootloader) มีสายเชื่อมต่อ 6 เส้นตามที่แสดง

โปรแกรมเมอร์ Bootloader สำหรับ Uno

ภาพถ่ายนั้นแสดงให้เห็นถึงการเขียนโปรแกรม Uno หนึ่งภาพ

คุณเรียกใช้ร่าง (ปฏิบัติการผ่านการตรวจสอบแบบอนุกรมเพื่อให้คำสั่ง) ก่อนอื่นให้ระบุชิพเป้าหมาย:

Atmega chip programmer.
Written by Nick Gammon.
Entered programming mode OK.
Signature = 0x1E 0x95 0x0F 
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF 
HFuse = 0xDE 
EFuse = 0xFD 
Lock byte = 0xCF 
Bootloader address = 0x7E00
Bootloader length = 512 bytes.
Type 'L' to use Lilypad (8 MHz) loader, or 'U' for Uno (16 MHz) loader ...
Type 'G' to program the chip with the bootloader ...

คุณกดGเพื่อตั้งโปรแกรม

Erasing chip ...
Writing bootloader ...
Committing page starting at 0x7E00
Committing page starting at 0x7E80
Committing page starting at 0x7F00
Committing page starting at 0x7F80
Written.
Verifying ...
No errors found.
Writing fuses ...
LFuse = 0xFF 
HFuse = 0xDE 
EFuse = 0xFD 
Lock byte = 0xCF 
Done.
Type 'C' when ready to continue with another chip ...

สำหรับ Uno จะใช้เวลาหนึ่งวินาที ในการโปรแกรม Mega2560 ใช้เวลา 3 วินาที

คำแนะนำโดยละเอียดที่โปรแกรมเมอร์ Atmega bootloader

รหัสสามารถดาวน์โหลดได้จากGithub: nickgammon / arduino_sketches


คุณต้องเลือกประเภทของชิปที่คุณกำลังเขียน (เครื่องมือ -> บอร์ด .. ) หรือไม่? ฉันจะเลือกบอร์ดใดเมื่อฉันเบิร์น bootloader ให้เป็นชิปเดี่ยว
Camilo

คุณเลือกประเภทของบอร์ดที่คุณใช้เพื่อเบิร์น bootloaderใน IDE ร่างของ bootloader จะตรวจจับชนิดบอร์ดเป้าหมายโดยอัตโนมัติ
Nick Gammon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.