ฉันปิด Arduino Uno ของฉันแล้วหรือยัง? ปัญหาในการอัปโหลดไปยังบอร์ด


86

ฉันไม่สามารถอัพโหลดภาพร่างไปยัง Arduino Uno ของฉันได้

  • ฉัน "ก่ออิฐ" หรือยัง
  • ฉันสามารถทำตามขั้นตอนอะไรเพื่อแก้ไขสิ่งที่ผิดพลาด
  • ฉันจะแก้ไขได้อย่างไร

7
สำหรับผู้ที่สงสัยว่านี่ไม่ใช่คำถามจริง! มันเป็นคำถามอ้างอิงมากกว่า คำถามตัวเองทำค่อนข้างกว้างเกี่ยวกับวัตถุประสงค์ อย่างไรก็ตามคำตอบมีรายละเอียดมากและคำถามนี้สามารถใช้เป็นข้อมูลอ้างอิงได้
พอล

2
มันเป็นคำถามอ้างอิงมากกว่า ค่อนข้างถูกต้อง ดูมันตกลงที่จะถามและตอบคำถามของคุณเอง
Nick Gammon

@Nick_Gammon ใช่ แต่ฉันรู้สึกว่าคุณควรจะสังเกตมันที่ไหนสักแห่ง ตั้งแต่แรกเห็นฉันรู้สึกรำคาญเล็กน้อยที่คำถามนี้กว้างมากและดูเหมือนว่าคุณไม่ได้ทำการวิจัยเลย แต่เมื่อฉันเห็นคำตอบของคุณมันก็สมเหตุสมผลแล้ว นอกจากนี้ (เมื่อคุณทำได้) คุณไม่ควรลืมที่จะยอมรับคำตอบของคุณเองเพื่อให้คนอื่น ๆ ที่พยายามช่วยไม่เริ่มตอบดูหรือแสดงความคิดเห็นคำถามเกี่ยวกับเรื่องนี้ (ซึ่งไม่ได้ช่วยคุณจริงๆ หาวิธีที่ดีในการแก้ไขปัญหานี้แล้ว)
Paul

ขอบคุณสำหรับความคิดเห็น. ตอนแรกฉันคิดว่าจะโพสต์คำถามพร้อมกับทราบว่าฉันจะโพสต์คำตอบของฉันเอง แต่จากนั้นฉันเห็นช่องทำเครื่องหมายเกี่ยวกับ "ตอบคำถามของคุณเอง" ดังนั้นฉันจึงเลือกแทน สำหรับการยอมรับฉันไม่ได้รับอนุญาตให้ 20 ชั่วโมง ดูเหมือนจะแปลกสำหรับฉันที่จะยอมรับคำตอบของคุณเอง แต่แน่นอนฉันสามารถทำได้เมื่อได้รับอนุญาต ฉันถามคำถามเกี่ยวกับ Meta Arduino คำถามบัญญัติคืออะไรกันแน่? เพื่อพยายามทำตามขั้นตอนที่ถูกต้อง แต่ไม่ได้รับคำตอบ
Nick Gammon

@FuaZe และ Nick Gammon: มันดูดีมากโดยทั่วไปข้อเสนอแนะเดียวที่ฉันจะทำคือทำให้หัวเรื่องมีความหมายมากขึ้นว่าคำถามและคำตอบนั้นเกี่ยวกับอะไรจริงๆ ตามที่เป็นอยู่ฉันคิดว่าฉันอาจถูกล่อลวงให้เป่ามันออกมาคลุมเครือเกินไป บางทีชื่ออาจเป็น "ฉันจะแก้ไขปัญหาการอัปโหลดล้มเหลวได้อย่างไร"
dlu

คำตอบ:


115

มันอาจจะไม่ถูกปิดกั้น

ฉันมี Arduinos อยู่ไม่กี่ตัวและในช่วงไม่กี่ปีที่ผ่านมามีเพียง "ก่ออิฐ" และฉันคิดว่านั่นคือการจับคู่ด้วยไฟฟ้าสถิตย์ น่าเสียดายที่มีชิปตัวประมวลผล SMD (ติดตั้งที่พื้นผิว) ดังนั้นจึงไม่ง่ายที่จะลองเปลี่ยนเป็นชิปตัวอื่น

ใจเย็น ๆ และลองทำตามขั้นตอนต่อไปนี้ ...


บอร์ดตัวอย่าง

"Arduino Uno" ไม่ใช่แค่สิ่งเดียวที่อาจล้มเหลว มันมีองค์ประกอบหลักหลายอย่างและอาจมีเพียงองค์ประกอบเดียวที่ล้มเหลว (ถ้ามี) ดูรูปถ่ายอ้างอิงนี้:

Arduino Uno ส่วนประกอบหลัก

ส่วนประกอบที่สำคัญคือ:

  • หน่วยประมวลผล Atmega16U2 - จัดการอินเทอร์เฟซกับการเชื่อมต่อ USB
  • หน่วยประมวลผล Atmega328P - นี่คือโปรเซสเซอร์ "หลัก" ซึ่งมีร่างของคุณอยู่
  • ตัวควบคุมแรงดันไฟฟ้า - เป็นการแปลงพลังงานที่ได้รับจากแจ็คไฟเป็น 5 V
  • LED พลังงาน (สีเขียว) - ทำเครื่องหมาย "เปิด"
  • LED แสดงสถานะ (สีเหลือง) ระบุว่า "L" - เชื่อมต่อผ่าน op-amp เป็นพินแบบดิจิตอล 13
  • ไฟ LED Rx และ Tx (สีเหลือง) - สิ่งเหล่านี้ระบุว่าชิป USB (Atmega16U2) กำลังรับหรือส่งสัญญาณ

โปรดทราบว่าไฟ LED Rx และ Tx ไม่ได้เชื่อมต่อโดยตรงกับหมุดดิจิตอล 0 และ 1 บนกระดาน (ทำเครื่องหมาย Rx และ Tx) สัญญาณจะสว่างขึ้นเมื่อคุณทำการสื่อสารแบบอนุกรมผ่าน USBเท่านั้นหากคุณมีบางสิ่ง (เช่น GPS) เสียบเข้ากับพินดิจิตอล 0 และ 1 โดยตรง

นอกจากนี้โปรดทราบว่าเนื่องจาก LED "L" เชื่อมต่อผ่าน op-amp มันอาจสว่างขึ้นหากตั้งค่าพิน 13 เป็นอินพุตในร่างของคุณ นี่เป็นปกติ. ไม่ได้หมายความว่ามีบางอย่างผิดพลาดในการส่งข้อมูล


ตรวจสอบพลังงาน

พลังงาน USB

  • เสียบบอร์ดเข้ากับคอมพิวเตอร์ของคุณด้วยสาย USB และตรวจสอบว่าไฟ LED "เปิด" สีเขียวสว่างขึ้น

  • ใช้มัลติมิเตอร์และสายจัมเปอร์สองสามตัวเพื่อทดสอบระหว่างขา 5V และขา GND (ลูกศรที่ด้านล่าง) คุณควรอ่านค่าประมาณ 5.0 V (ฉันได้ 5.04 V กับฉัน)

(คุณสามารถซื้อมัลติมิเตอร์ราคาถูกประมาณ $ 10 ถ้าคุณไม่มี แต่คุณดีกว่าที่จะได้รับดีกว่าประมาณ $ 50 - ตรวจสอบเว็บไซต์และร้านค้าอิเล็กทรอนิกส์ทั้งหมด)

  • ทดสอบระหว่าง 3.3 V pin และ GND pin - คุณควรได้ 3.3 V

หากคุณไม่ได้รับ 5 V โดยเสียบสาย USB ให้แน่ใจว่าปลายอีกด้านเชื่อมต่อกับคอมพิวเตอร์ของคุณ ลองใช้สายเคเบิลอื่น

แจ็คไฟ

  • หากคุณกำลังใช้หรือวางแผนที่จะใช้แจ็คไฟ (ทำเครื่องหมาย "พลังงานใน" บนภาพ) ตัดการเชื่อมต่อ USB และเสียบแหล่งจ่ายไฟ - ซึ่งควรจะเป็น 7 ถึง 12 V DC ด้วยค่าบวกที่ขากลาง

  • วัดหมุด 5 V และ 3.3 V ตามด้านบน คุณควรเห็นแรงดันไฟฟ้าเดียวกันกับพวกมัน

หากคุณได้รับ 5 V เมื่อเชื่อมต่อกับ USB แต่ไม่ใช่กับแหล่งจ่ายไฟเครื่องควบคุมแรงดันไฟฟ้า (ที่ทำเครื่องหมายบนภาพ) อาจเสียหายได้ หรืออาจเป็นไปได้ว่าแหล่งจ่ายไฟล้มเหลว ลองใช้แหล่งจ่ายไฟอื่นเพื่อยืนยันว่าเป็นแบบใด


ตรวจสอบแฟลชไฟ LED เปิดเครื่อง

หากคุณมี Optiboot bootloader (โดยปกติแล้ว Uno จะมาพร้อมกับ) หากคุณกดและปล่อยปุ่มรีเซ็ตหรือถอดปลั๊กแล้วเสียบปลั๊ก USB หรือสายไฟกลับเข้าไป LED LED "L" จะกะพริบอย่างรวดเร็ว 3 ครั้ง เวลา "เปิด" และ "ปิด" คือ 50 ms ในแต่ละครั้งกะพริบสามครั้งควรเสร็จสิ้นภายในเวลาประมาณ 1/3 ของวินาที

หากไม่เป็นเช่นนั้นคุณอาจมีปัญหากับตัวโหลดบูตหรือชิปตัวประมวลผลหลัก (Atmega328P)


ลองอัพโหลดภาพร่าง

สำคัญ:หากคุณมีปัญหาในการอัปโหลดภาพร่างลบอุปกรณ์ที่เชื่อมต่อใด ๆ (เช่นโล่) ยังถอดสายจัมเปอร์ที่เสียบเข้ากับซ็อกเก็ตบอร์ด โดยเฉพาะอย่างยิ่งไม่ควรเสียบอะไรลงในพินดิจิตอล 0 และ 1 (Rx และ Tx) เพราะนั่นจะรบกวนการสื่อสารกับคอมพิวเตอร์ที่อัพโหลด

เลือกหนึ่งในตัวอย่างสเก็ตช์อย่างง่าย (เช่นกะพริบตา) แล้วลองอัปโหลด นี่คือสิ่งที่คุณควรเห็น:

  • LED "L" ควรกะพริบ 3 ครั้ง นี่เป็นเพราะชิปหลักกำลังถูกรีเซ็ตโดยคำสั่งจากกระบวนการอัปโหลด

  • LED "Rx" ควรกะพริบอย่างรวดเร็ว นี่คือคำแนะนำจากกระบวนการอัปโหลดที่พยายามเปิดใช้งาน bootloader

  • LED "Tx" ควรกะพริบอย่างรวดเร็ว นี่คือตัวประมวลผลที่รับทราบข้อมูลที่อัปโหลด

คุณอาจเห็นข้างต้นแม้ว่ากระบวนการอัปโหลดจะล้มเหลว อาจเป็นเพราะมีการเลือกประเภทบอร์ดที่ไม่ถูกต้อง

หากเฉพาะ LED "Rx" กะพริบอาจเป็นเพราะปัญหาเกี่ยวกับ bootloader หรือชิปประมวลผลหลัก (Atmega328P) มีคนกำลังเคาะ แต่ไม่มีใครอยู่บ้าน!

ตรวจสอบประเภทของบอร์ด

หากไฟ LED กระพริบ แต่คุณได้รับข้อความเช่นนี้:

avrdude: stk500_recv(): programmer is not responding

ตรวจสอบประเภทของบอร์ด:

เมนูประเภทคณะกรรมการ

หากคุณเลือกประเภทบอร์ดที่ไม่ถูกต้องอาจส่งคำแนะนำในการอัปโหลดที่ผิดและการหมดเวลาหรือไม่เช่นนั้นจะล้มเหลว หากคุณเป็นเหมือนฉันและมีกระดานที่แตกต่างกันวางอยู่รอบ ๆ มันเป็นเรื่องง่ายที่จะลืมว่าการอัปโหลดครั้งล่าสุดที่คุณทำสำหรับบอร์ดประเภทอื่น

ตรวจสอบพอร์ตการสื่อสาร

หากไฟ LED ไม่กระพริบเลยคุณอาจเลือกพอร์ตการสื่อสารผิด

ตรวจสอบพอร์ต comm:

เมนูคอมพอร์ต

ลองใช้ PC / Mac เครื่องอื่นหากเป็นไปได้

ลองใช้ Arduino บนพีซี / Mac เครื่องอื่นหากคุณมีมือเดียว สิ่งนี้สามารถ จำกัด ว่าคุณมีปัญหากับคอมพิวเตอร์เฉพาะที่คุณเสียบเข้ากับคอมพิวเตอร์ทั่วไปหรือไม่

ทำการทดสอบลูปแบ็ค

  • ตัดการเชื่อมต่อโล่และสายไฟทั้งหมด
  • นำบอร์ดออกจากแหล่งจ่ายไฟ
  • เชื่อมต่อสายจัมเปอร์จาก RESET ไปยัง GND (สายสีส้มในภาพ)
  • เชื่อมต่อสายจัมเปอร์จาก Rx ถึง Tx (สายสีขาวในรูปภาพ)

การเดินสายไฟ:

การทดสอบลูปแบ็ค

  • เสียบสายเคเบิล USB และเริ่มโปรแกรมเทอร์มินัล - เช่น Terminal Monitor ใน Arduino IDE พิมพ์บางอย่างแล้วส่งมัน (เช่นกดEnterในหน้าจอเทอร์มินัล)
  • ทุกสิ่งที่คุณพิมพ์ควรจะสะท้อนกลับ

หากทุกอย่างถูกสะท้อนกลับ: ยืนยันว่าคุณมีพอร์ต comm ที่ถูกต้องสายเคเบิล USB นั้นใช้ได้และชิปอินเตอร์เฟส USB (Atmega16U2) น่าจะเป็น OK

หากไม่มีสิ่งใดสะท้อนกลับให้ตรวจสอบ:

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

ทดสอบชิป Atmega16U2

หากบอร์ดของคุณล้มเหลวในการทดสอบลูปแบ็คและคุณมั่นใจว่าสาย USB นั้นใช้ได้คุณสามารถทดสอบชิป Atmega16U2 ได้ มีส่วนหัว ICSP (ในการเขียนโปรแกรมวงจรอนุกรม) บนบอร์ดติดกับชิป Atmega16U2 และใกล้กับซ็อกเก็ต USB

ถอดสายไฟออกก่อน (ถอดสาย USB และสายไฟใด ๆ )

จากนั้นคุณสามารถเชื่อมต่อส่วนหัว ICSP ผ่านสายจัมเปอร์ 6 เส้นกับ Uno ที่รู้จักได้ดังที่แสดงในภาพ:

ทดสอบชิป Atmega16U2

Pin-outs สำหรับส่วนหัว ICSP คือ (จากด้านบน):

ส่วนหัว ICSP

Pin 1 บนส่วนหัว ICSP ใกล้กับชิป Atmega16U2 ทำเครื่องหมายด้วยจุดสีขาวเล็ก ๆ ใกล้กับ "F" ใน "AREF" Pin 1 บนส่วนหัว ICSP ใกล้กับชิป ATmega328P มีการทำเครื่องหมายด้วยจุดสีขาวเล็ก ๆ ด้านล่าง "N" ใน "ON"

เชื่อมต่อ:

Good board         Target Uno

  MISO                MISO    (pin with dot - pin 1)
  VCC                 VCC
  SCK                 SCK
  MOSI                MOSI
  D10                 /RESET
  GND                 GND

ตรวจสอบสายไฟของคุณอีกครั้ง

จากนั้นบนกระดาน "รู้จักดี" ติดตั้งร่าง "Atmega_Board_Detector" ตามที่อธิบายไว้ในหน้าโปรแกรมเมอร์ Atmega bootloader รหัสที่GitHub - nickgammon หากคุณคลิกที่ปุ่มดาวน์โหลดในหน้านั้นคุณจะได้รับร่างที่มีประโยชน์มากมาย สิ่งที่คุณต้องการเรียกว่า "Atmega_Board_Detector"

เมื่อติดตั้งแล้วให้เปิดมอนิเตอร์อนุกรมตั้งค่าเป็น 115200 บอดและคุณควรเห็นสิ่งต่อไปนี้:

Atmega chip detector.
Written by Nick Gammon.
Version 1.17
Compiled on Jul  9 2015 at 08:36:24 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x94 0x89
Processor = ATmega16U2
Flash memory size = 16384 bytes.
LFuse = 0xEF
HFuse = 0xD9
EFuse = 0xF4
Lock byte = 0xCF
Clock calibration = 0x51
Bootloader in use: No
EEPROM preserved through erase: No
Watchdog timer always on: No
Bootloader is 4096 bytes starting at 3000

Bootloader:

3000: 0x4B 0xC0 0x00 0x00 0x64 0xC0 0x00 0x00 0x62 0xC0 0x00 0x00 0x60 0xC0 0x00 0x00
3010: 0x5E 0xC0 0x00 0x00 0x5C 0xC0 0x00 0x00 0x5A 0xC0 0x00 0x00 0x58 0xC0 0x00 0x00
3020: 0x56 0xC0 0x00 0x00 0x54 0xC0 0x00 0x00 0x52 0xC0 0x00 0x00 0xEE 0xC4 0x00 0x00
...
3FE0: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF
3FF0: 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF 0xFF

MD5 sum of bootloader = 0xD8 0x8C 0x70 0x6D 0xFE 0x1F 0xDC 0x38 0x82 0x1E 0xCE 0xAE 0x23 0xB2 0xE6 0xE7
Bootloader name: Arduino-dfu-usbserial-atmega16u2-Uno-Rev3

First 256 bytes of program memory:

0: 0x90 0xC0 0x00 0x00 0xA9 0xC0 0x00 0x00 0xA7 0xC0 0x00 0x00 0xA5 0xC0 0x00 0x00
10: 0xA3 0xC0 0x00 0x00 0xA1 0xC0 0x00 0x00 0x9F 0xC0 0x00 0x00 0x9D 0xC0 0x00 0x00
20: 0x9B 0xC0 0x00 0x00 0x99 0xC0 0x00 0x00 0x97 0xC0 0x00 0x00 0x48 0xC4 0x00 0x00
30: 0x0C 0xC4 0x00 0x00 0x91 0xC0 0x00 0x00 0x8F 0xC0 0x00 0x00 0x8D 0xC0 0x00 0x00
...

อย่างไรก็ตามหากคุณได้รับข้อความเช่นนี้:

"Failed to enter programming mode. Double-check wiring!"

นั่นจะปรากฏขึ้นเพื่อระบุว่า ATmega16U2 ของคุณไม่ทำงาน


ทดสอบชิป ATmega328P

ตัดการเชื่อมต่อพลังงานจาก Arduino Uno ที่รู้จักกันดีและติดตั้งจัมเปอร์ ICSP อีกครั้งตามรูปนี้เพื่อเชื่อมต่อเข้ากับโปรเซสเซอร์ "main" ใน Uno ของคุณ:

ทดสอบชิป ATmega328P

Pin-outs สำหรับส่วนหัว ICSP คือ (จากด้านบน):

ส่วนหัว ICSP

Pin 1 บนส่วนหัว ICSP ใกล้กับชิป ATmega328P มีการทำเครื่องหมายด้วยจุดสีขาวเล็ก ๆ ด้านล่าง "N" ใน "ON"

การเดินสายไฟเหมือนก่อนหน้ายกเว้นคุณกำลังเชื่อมต่อกับส่วนหัว ICSP อื่น - สายที่ด้านท้ายของบอร์ดอยู่ไกลจากซ็อกเก็ต USB

Good board       Target Uno

  MISO                MISO    (pin with dot - pin 1)
  VCC                 VCC
  SCK                 SCK
  MOSI                MOSI
  D10                 /RESET
  GND                 GND

เมื่อเชื่อมต่อแล้วให้เปิดมอนิเตอร์อนุกรมตั้งค่าไว้ที่ 115200 บอดและคุณควรเห็นสิ่งต่อไปนี้:

Atmega chip detector.
Written by Nick Gammon.
Version 1.17
Compiled on Jul  9 2015 at 08:36:24 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x95 0x0F
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Clock calibration = 0x83
Bootloader in use: Yes
EEPROM preserved through erase: No
Watchdog timer always on: No
Bootloader is 512 bytes starting at 7E00

Bootloader:

7E00: 0x11 0x24 0x84 0xB7 0x14 0xBE 0x81 0xFF 0xF0 0xD0 0x85 0xE0 0x80 0x93 0x81 0x00
7E10: 0x82 0xE0 0x80 0x93 0xC0 0x00 0x88 0xE1 0x80 0x93 0xC1 0x00 0x86 0xE0 0x80 0x93
...

MD5 sum of bootloader = 0xFB 0xF4 0x9B 0x7B 0x59 0x73 0x7F 0x65 0xE8 0xD0 0xF8 0xA5 0x08 0x12 0xE7 0x9F
Bootloader name: optiboot_atmega328

First 256 bytes of program memory:

0: 0x0C 0x94 0x35 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
10: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
20: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
30: 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00 0x0C 0x94 0x5D 0x00
...

ในกรณีนี้เป็นการยืนยันว่าตัวประมวลผลหลักทำงานอยู่และมี Optiboot bootloader อยู่


สิ่งที่คุณสามารถแก้ไขได้

เครื่องปรับแรงดันไฟฟ้าล้มเหลว

นี่ไม่ใช่เรื่องง่ายที่จะเปลี่ยน แต่มันก็เป็นสิ่งจำเป็นเฉพาะถ้าคุณใช้แจ็คไฟ หากคุณเรียกใช้จาก USB ก็ไม่จำเป็นต้องใช้ อีกวิธีหนึ่งคือคุณสามารถจัดหาแหล่งจ่าย 4 ถึง 5 V (เช่นแบตเตอรี่ 3 x AA) และเชื่อมต่อกับซ็อกเก็ต 5 V บนบอร์ดโดยตรง


ชิป ATmega16U2 ล้มเหลว

สิ่งนี้จำเป็นสำหรับการอัพโหลดภาพร่างผ่านพอร์ต USB และการดีบักแบบอนุกรม มันไม่ง่ายที่จะเปลี่ยนโดยเฉพาะเพราะเป็นอุปกรณ์ SMD (ติดตั้งบนพื้นผิว) อย่างไรก็ตามคุณสามารถจัดการได้โดยปราศจากมัน

คุณสามารถอัพโหลดภาพร่างผ่านทางส่วนหัว ICSP หากคุณซื้ออุปกรณ์การเขียนโปรแกรม ICSP

ตัวอย่างของอุปกรณ์ดังกล่าวที่ต่อเข้ากับช่องเสียบ ICSP:

USBtinyISP

AVRISP

(ภาพถ่ายเหล่านั้นถ่ายจาก Ruggeduino แต่แนวคิดนั้นเหมือนกัน)


คุณสามารถรับสายเคเบิล FTDI ได้เช่นนี้

เชื่อมต่อ FTDI กับ Arduino

เชื่อมต่อเข้ากับพอร์ตอนุกรมของบอร์ดดังนี้:

สาย FTDI

FTDI    Arduino Uno

GND       GND  (black wire on FTDI cable, blue jumper wire)
CTS       not connected
VCC       5V
TxD       D0 (RX)
RxD       D1 (TX)
RTS       To RESET with a 0.1 µF capacitor in series with it (green wire)

ตอนนี้คุณสามารถอัปโหลดภาพร่างไปยังหน่วยประมวลผลหลักโดยตรงผ่านชิป USB


นอกจากนี้คุณยังสามารถใช้โปรแกรมเมอร์ Atmega ชิพอัปโหลดไฟล์. hexซึ่งช่วยให้คุณคัดลอกไฟล์. hex สำหรับร่างภาพไปยังการ์ด SD จากนั้นตั้งโปรแกรมบอร์ดผ่านทางส่วนหัว ICSP


ชิป ATmega328P ล้มเหลว

ตัวประมวลผลหลักสามารถเปลี่ยนได้อย่างง่ายดายถ้าติดตั้งในซ็อกเก็ต รับชิปทดแทนจากที่ใดที่หนึ่งเช่นAdafruit ในราคาประมาณ US $ 6 หรือลองใช้ eBay ลองรับชิปที่มี Optiboot bootloader อยู่แล้วเพื่อประหยัดความยุ่งยาก

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


ATmega328P ตอบกลับ แต่ไม่มี bootloader

ฉันมีร่างที่โปรแกรมเมอร์ Atmega bootloaderซึ่งจะแทนที่ Optiboot bootloader การเดินสายไฟนั้นเหมือนกับร่างของตัวตรวจจับชิพ รหัสที่GitHub - nickgammon หากคุณคลิกที่ปุ่มดาวน์โหลดในหน้านั้นคุณจะได้รับร่างที่มีประโยชน์มากมาย สิ่งที่คุณต้องการเรียกว่า "Atmega_Board_Programmer"

ติดตั้งภาพร่างบน Uno "รู้จักดี" ของคุณและเชื่อมต่อกับบอร์ดเป้าหมายด้วยการเดินสายที่แสดงก่อนหน้านี้

ทดสอบชิป ATmega328P

เปิด Serial Monitor บน Uno ที่ "ดี" ของคุณและคุณควรเห็นสิ่งนี้:

Atmega chip programmer.
Written by Nick Gammon.
Version 1.35
Compiled on Jul  9 2015 at 15:06:58 with Arduino IDE 10604.
Attempting to enter ICSP programming mode ...
Entered programming mode OK.
Signature = 0x1E 0x95 0x0F
Processor = ATmega328P
Flash memory size = 32768 bytes.
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Lock byte = 0xEF
Clock calibration = 0x83
Type 'L' to use Lilypad (8 MHz) loader, or 'U' for Uno (16 MHz) loader ...

พิมพ์ "U" สำหรับตัวโหลด Uno (Optiboot)

Using Uno Optiboot 16 MHz loader.
Bootloader address = 0x7E00
Bootloader length = 512 bytes.
Type 'Q' to quit, 'V' to verify, or '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 = 0xEF
Clock calibration = 0x83
Done.
Programming mode off.
Type 'C' when ready to continue with another chip ...

ใช้เวลาประมาณหนึ่งวินาที ตอนนี้ติดตั้ง bootloader


ปัญหาตัวจับเวลา Watchdog

ตัวจับเวลาจ้องจับผิด (ตามค่าเริ่มต้น) สามารถกำหนดค่าให้รีเซ็ตตัวประมวลผลหลังจากเวลาที่กำหนด ความตั้งใจคือการกู้คืนจาก "แฮงค์" สำหรับโปรเซสเซอร์ที่ปรับใช้ในฟิลด์ อย่างไรก็ตามหากตั้งเวลาไว้เป็นระยะเวลาสั้น ๆ (เช่น 16 ms) หน่วยประมวลผลสามารถรีเซ็ตอีกครั้งก่อนที่ bootloader จะมีโอกาสทำอะไรก็ได้

อาการคือคุณไม่สามารถอัพโหลดภาพร่างใหม่ได้ bootloaders ที่ทันสมัยบางคน (เช่น Optiboot) ทำตามขั้นตอนเพื่อหยุดปัญหานี้เป็นหนึ่งในสิ่งแรกที่พวกเขาทำ อย่างไรก็ตามคนอื่นทำไม่ได้

การกู้คืนนี้อาจทำได้ยากเนื่องจากเมื่อร่างสเก็ตทำงานแล้วคุณมีปัญหาในการรีเซ็ตและหากคุณมีปัญหาคุณจะไม่สามารถแทนที่ภาพร่างได้ บ่อยครั้งที่ผู้คนรายงานว่าพวกเขาต้องเบิร์น bootloader ตัวใหม่เพื่อกู้คืน อย่างไรก็ตามนั่นเป็นเพียงเพราะเป็นผลข้างเคียงการเขียน bootloader จะลบร่างปัจจุบัน

มีเป็นวิธีการของการกู้คืน ทำตามขั้นตอนเหล่านี้:

  • ปิดบอร์ดอย่างสมบูรณ์ (ถอดสาย USB)
  • กดปุ่ม Reset และให้มันขึ้นลง (หรือเรียกใช้ลวดจัมเปอร์จากขา RESET เพื่อขา GND) สิ่งนี้จะหยุดยั้งปัญหาจากการเริ่มและเปิดใช้งานตัวจับเวลาจ้องจับผิด
  • ยังคงกดรีเซ็ตค้างไว้เชื่อมต่อสาย USB อีกครั้ง
  • เริ่มอัปโหลดภาพร่างที่ไม่มีปัญหานี้ (เช่นกะพริบตา)
  • เมื่อ IDE รายงานว่า "กำลังอัปโหลด" ให้ปล่อยปุ่มรีเซ็ต (หรือเอาสายจัมเปอร์ออก)
  • ตอนนี้ควรอัปโหลดตกลง - เนื่องจากร่างที่เปิดใช้งานตัวจับเวลาจ้องจับผิดไม่เคยเริ่มต้น

มีปัญหากับการอัพโหลด Mega2560

ฉันพูดถึงเรื่องนี้ที่นี่แม้ว่าโพสต์นี้จะกำหนดเป้าหมายบอร์ด Uno จริงๆเพราะมันเป็นเรื่องธรรมดา

bootloader Mega2560 บางรุ่นหาคำว่า "!!!" ในการอัปโหลดขาเข้าจากพีซีและหากพวกเขาเห็นสิ่งนั้นให้เข้าสู่โหมดแก้ไขข้อบกพร่อง ทำให้การอัปโหลดล้มเหลว

รหัสตัวอย่าง:

Serial.println ("Furnace overheating!!!");

Solutions:

  • ติดตั้ง bootloader ที่ใหม่กว่า ร่าง "bootloader uploader" ของฉันกล่าวถึงก่อนหน้านี้ในการตอบกลับนี้ควรติดตั้ง bootloader ที่ไม่มีปัญหานั้น

หรือ (มากกว่านั้น):

  • ไม่ได้ใช้ "!!!" ในร่างของคุณ

ปัญหาในการอัพโหลดไปยัง Leonardo / Micro / Esplora เป็นต้น

บอร์ดที่มี ATmega32u4 เป็นตัวประมวลผลหลัก (และเท่านั้น) นั้นสามารถอัปโหลดได้ยากกว่า เนื่องจากชิปตัวเดียวกันต้องจัดการกับการอัปโหลดและเรียกใช้รหัสของคุณ

มีหน้าต่างเล็ก ๆ แห่งโอกาสหลังจากบอร์ดถูกรีเซ็ตเมื่อมองหาร่างใหม่ที่จะอัปโหลด เทคนิคในการอัพโหลดไปยังบอร์ดเหล่านี้คือ:

  • รวบรวมร่างของคุณโดยไม่มีข้อผิดพลาด
  • เริ่มการอัพโหลด
  • ทันทีที่ IDE รายงาน "อัปโหลด" ให้กดและปล่อยปุ่มรีเซ็ต

คุณมีเวลาเพียงเสี้ยววินาทีในการทำเช่นนี้ก่อนที่ร่างเก่าจะเริ่มทำงาน อย่าท้อแท้ถ้าคุณต้องทำขั้นตอนนี้ซ้ำสองครั้ง นั่นเป็นเรื่องปกติ


อ้างอิง


5
ว้าว. นี่คือดีดีดีคำตอบ
rpax

1
นั่นเป็นคำตอบที่ยอดเยี่ยม
Mert Gülsoy

"ถ้าคุณได้รับ 5 V เมื่อเชื่อมต่อ USB แต่ไม่ใช่กับแหล่งจ่ายไฟตัวควบคุมแรงดันไฟฟ้า (ที่ทำเครื่องหมายบนรูปภาพ) อาจเสียหายหรืออาจเป็นไปได้ว่าแหล่งจ่ายไฟล้มเหลวลองใช้แหล่งจ่ายไฟอื่นเพื่อยืนยันว่าเป็น ." - เหตุใดสิ่งนี้จึงป้องกันไม่ให้คุณอัปโหลดภาพร่าง
2813274

คุณพูดถูก อย่างไรก็ตามรายการตรวจสอบควรจะเป็นรายการตรวจสอบทั่วไปสำหรับความล้มเหลว ในกรณีนี้มันจะเป็นเหมือน "ฉันสามารถอัพโหลดภาพร่างได้ แต่เมื่อนำไปใช้งานในสนามพร้อมกับพาวเวอร์ซัพพลาย (ผนัง - หูด) มันไม่ทำงาน"
Nick Gammon

1
ฉันเพิ่งมีปัญหากับไดรเวอร์ FTDI ใหม่ที่ "อิฐ" จีน "เข้ากันได้กับ FTDI" ชิป (คุณสามารถพูดเลียนแบบ) ชิป พวกเขาวาง PID ของอุปกรณ์เป็น 0x0000 ซึ่งจะทำให้ไดรเวอร์ไม่ถูกต้อง คุณสามารถเลือกที่จะเปลี่ยน PID กลับด้วยเครื่องมือ M_PROG บน FTDI หรือเปลี่ยนไดรเวอร์ (และตั้งค่า windows เพื่ออนุญาตไดรเวอร์ที่ไม่ผ่านการตรวจสอบ)
พอล

14

อย่างน้อย - ตามที่ฉันสมมติว่าคุณอัปโหลดร่างของคุณผ่าน avrdude - โปรดให้ข้อมูลเพิ่มเติมเกี่ยวกับความล้มเหลวในการอัปโหลด (เช่นเอาท์พุทของตัวอัปโหลดแบบร่าง) เพื่อให้ผู้คนที่นี่สามารถช่วยเหลือคุณได้ดีขึ้น

นอกจากคำตอบที่ยอดเยี่ยมของ Nick Gammon โปรดค้นหาเครื่องหมายอัศเจรีย์ในร่างของคุณ หากร่างของคุณมีสตริงที่มีเครื่องหมายอัศเจรีย์มากกว่า 3 เครื่องหมายการอัปโหลดจะล้มเหลวเนื่องจาก Arduino Bootloader รุ่นเก่าจะตีความเครื่องหมายอัศเจรีย์เหล่านี้เป็นอีกฟังก์ชันหนึ่งและการอัปโหลดจะหยุดลง

ตัวอย่างการหยุดการอัพโหลด:

char* test = "This will stop the upload!!!";

ดูปัญหา Google Code


1
จุดดี. ส่วนใหญ่จะใช้กับ Mega2560 แต่ฉันยอมรับว่าฉันละเว้น :)
Nick Gammon

1
เพิ่มหัวข้อเพื่อจัดการกับปัญหานี้
Nick Gammon

2

ฉันได้ติด 2x ATMega328P บนบอร์ด Arduino Uno ของฉันเนื่องจากคงที่ (ฉันคิดว่า)

สแตติกดูเหมือนจะฆ่า PIN ของ TX แล้วดังนั้นจึงไม่สามารถดาวน์โหลดโปรแกรมโดยใช้สาย USB

ทางออกที่ง่ายที่สุดคือการแทนที่ไมโครคอนโทรลเลอร์ คุณสามารถซื้อกรมทรัพย์สินทางปัญญา ATMega328P ใหม่ที่มีโปรแกรม Bootloader ของ Arduino ( เช่นอันนี้จาก Adafruit ) และคุณพร้อมที่จะไปอีกครั้ง

หรือคุณยังสามารถตั้งโปรแกรม ATMega328P โดยใช้โปรแกรมเมอร์ AVRISPmkII เมื่อคุณทำทั้งหมดยกเว้น Tx pin ก็ทำงานได้ดี

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