จะอ่านโปรแกรมปัจจุบันจาก Arduino ได้อย่างไร


14

ฉันได้รับ Arduino PCB พร้อมATmega2560ซึ่งตั้งโปรแกรมไว้แล้วกับ bootloader Arduino และบางโปรแกรม ฉันมีร่างแต่ก่อนที่จะเล่นซอมันฉันต้องการสำรองไบนารีปัจจุบันที่อยู่ในตัวควบคุม ในฐานะ Arduinos ส่วนใหญ่จะเชื่อมต่อกับพีซีโดยใช้ตัวแปลง USB เป็นอนุกรมที่เชื่อมต่อกับ TX0 และ RX0 และไม่มีISPอินเตอร์เฟส

เห็นได้ชัดว่ามีรหัสสำหรับอ่านใน Arduino bootloaderแต่ฉันไม่รู้ว่าเครื่องมือใดที่ใช้ในการเข้าถึงเนื่องจากไม่มีรายการเมนูใน Arduino IDE

ฉันต้องใช้ซอฟต์แวร์อะไรในการอ่านโปรแกรมจาก Arduino?


พบรหัสสำหรับการอ่านใน bootloader คำถามที่แก้ไข
AndreKR

dosent นี้สร้างความตื่นตระหนกให้กับคำถามของคุณ แต่คุณสามารถส่งออก arduino skeches ของคุณเป็นไฟล์. HEX
ยูเรเนียม Lees

คำตอบ:


1

bootloader Arduino เป็นตัวแปรของโปรโตคอล STK500 เดิม (1.x) อักขระ 't' (ASCII 0x74) คือคำสั่ง "อ่านหน้า" ดังนั้นอาจเป็นไปได้ที่จะดึงโปรแกรมออกจากพอร์ตอนุกรมผ่าน bootloader โดยใช้AVRDUDE ... แต่ที่ดีที่สุดฉันคิดว่ามันจะใช้เวลาแฟนซีบางอย่างเพื่อดึงมันออกมา


11

ฉันทิ้งหน่วยความจำจาก Duemillenova ด้วย ATMega328P ด้วยคำสั่งต่อไปนี้:

avrdude -C avrdude.conf -v -v -v -v -p atmega328p -c stk500 -U flash:r:"c:/arduino.hex":r -P\\.\COM2 -b57600

1
ให้ความสนใจว่าโปรแกรมเมอร์ที่ใช้งานได้อาจเป็น Arduino และไม่ใช่ stk500
Paulo Neves

ทำไมสี่จึง-vจำเป็น
Peter Mortensen

จากเอกสาร AVRDUDE "คำอธิบายตัวเลือก 2.1" : "... -v เปิดใช้งานเอาต์พุต verbose ตัวเลือกเพิ่มเติม -v เพิ่มระดับ verbosity "
Peter Mortensen

นี่ควรเป็นคำตอบที่ยอมรับได้
Caterpillaraoz

ใช่! bootloader ระดับมืออาชีพขนาดเล็กไม่สามารถใช้งานกับโปร micro clone ของฉันได้ ฉันทิ้งแฟลชจาก clone micro pro ที่ใช้งานได้และบันทึกไปยังแฟลชที่ต้องการ bootloader ใช้ Arduino เป็น ISP (linux) - ถ่ายโอนข้อมูล: ./avrdude -C ../etc/avrdude.conf -v -v -v -v -p ATmega32u4 -c arduino -b 19200 -U flash:r:"/tmp/dump.bin":r -P /dev/ttyUSB0; เขียน: ./avrdude -C ../etc/avrdude.conf -v -v -v -v -p ATmega32u4 -c arduino -b 19200 -U flash:w:"/tmp/dump.bin":r -P /dev/ttyUSB0; ยืนยัน:./avrdude -C ../etc/avrdude.conf -v -v -v -v -p ATmega32u4 -c arduino -b 19200 -U flash:v:"/tmp/dump.bin":r -P /dev/ttyUSB0
b_laoshi

7

ที่ไม่AVR การสำรองข้อมูลด้วย avrdudeกระทู้ตอบคำถามของคุณ? โดยทั่วไปคุณสามารถอ่านหน่วยความจำทั้งหมดจาก AVR ได้ตราบใดที่ฟิวส์ไม่ได้ตั้งค่าไว้

นี่คือการตั้งค่าที่ฉันใช้กับ ATtiny's และ ATmega's

บนกระดานแสดง:

  • 11 = MOSI
  • 12 = MISO
  • 13 = SCLK

อ้างถึงแผ่นข้อมูลของตัวควบคุมที่พินที่แน่นอนที่จะใช้ มีบางเว็บไซต์บนอินเทอร์เน็ตที่เขียนเกี่ยวกับการเขียนโปรแกรมของ AVR โดยใช้ Arduino เช่น: http://hlt.media.mit.edu/?p=1229


ฉันต้องการอาร์ดิโนตัวที่สองใช่ไหม ฉันไม่มี
AndreKR

1
นี่เป็นวิธี Arduino สองวิธีใช่
jippie

และถึงแม้ว่ามันจะยากที่จะเห็นในภาพ แต่หมุดที่ใช้กับ Arduino เป้าหมายไม่ใช่ TX0 และ RX0 เหมือนกันใช่ไหม
AndreKR

ไม่ใช้ TX และ RX สำหรับ ICP อัปเดตคำตอบเล็กน้อย
jippie

ฉันคิดว่าคุณพลาดคำถามทั้งหมดไปแล้วอาจเป็นเพราะฉันตั้งชื่อไม่ดี ฉัน rephrased คำถามทั้งหมด
AndreKR

3

เท่าที่ฉันเห็นรูปแบบซอร์สโค้ด bootloader ของ Arduinoไม่มีวิธีใดในการ 'ถ่ายโอนข้อมูล' หน่วยความจำทั้งหมดจากมัน bootloader รองรับโหมด 'มอนิเตอร์' ซึ่งช่วยให้คุณสามารถถ่ายโอนข้อมูลหน่วยความจำทีละไบต์ อย่างไรก็ตามตามความเห็นของซอร์สโค้ด "/ * ฟังก์ชั่นการตรวจสอบจะถูกรวบรวมเมื่อใช้ ATmega128 เนื่องจากข้อ จำกัด ขนาด bootblock * /"

ฉันคิดว่าคุณโชคไม่ดีถ้าคุณไม่ต้องการใช้ ISP เปลี่ยน bootloader หรืออัพโหลดภาพร่างเพื่อทำมัน


ฉันหมายถึงส่วนที่จะเริ่มต้นในสาย 701 else if(ch=='t') {กับ
AndreKR

จุดดี - ไม่เห็นว่า
RJR

2

ฉันคิดว่ามีตัวเลือกเมนูสำหรับสิ่งนั้น แต่ตอนนี้ฉันไม่พบมัน หากคุณมีโปรแกรมเมอร์ ISP คุณสามารถใช้ AVR Studio เพื่ออ่านอิมเมจหน่วยความจำนอกชิปและบันทึกไว้ในไฟล์ HEX ซึ่งจะช่วยให้คุณกู้คืนข้อมูลด้วยวิธีการเดียวกัน

แก้ไข

เพื่อตอบความคิดเห็นของคุณ - ง่ายมาก! คุณต้องรวมข้อมูลทั้งสองไดอะแกรมเพื่อดึงออกมา อย่างแรกคือ Arduino / ATMega2560 Pin Mapping

ป้อนคำอธิบายรูปภาพที่นี่

อย่างที่สองคือการทำแผนที่ Pin ISP Header / AVR

ป้อนคำอธิบายรูปภาพที่นี่

อาวุธที่มีสองภาพนี้คุณควรจะเห็นวิธีการวางสาย

  • เรียกใช้ลวดจาก DIG50 ถึง Dragon ISP 1 พินส่วนหัว
  • รัน wire จาก VCC ถึง Dragon ISP header pin 2
  • เรียกใช้ลวดจาก DIG52 ไปยังขามังกรหัว ISP 3
  • เรียกใช้ลวดจาก DIG51 ถึง Dragon ISP 4 เข็มหมุด 4
  • เรียกใช้ wire จาก RESET ถึง Dragon ISP header pin 5
  • เรียกใช้ลวดจาก GND ถึง Dragon ISP หัวเข็มหมุดที่ 6

คุณควรจะใช้ AVR Studio เพื่ออ่านไฟล์ Hex นอกชิพด้วย - แจ้งให้เราทราบหากคุณต้องการคำแนะนำเพิ่มเติม


ฉันมีมังกร แต่ฉันไม่รู้ว่าหมุดใดบนมังกรที่จะเชื่อมต่อกับอินเตอร์เฟสอนุกรมของ Arduino
AndreKR

@AndreKR ดูคำตอบที่แก้ไขของฉันสำหรับข้อมูลเพิ่มเติม
vicatcu

ตามที่ระบุไว้ในคำถามของฉันฉันรู้วิธีการอ่านโปรแกรมโดยใช้ ISP แน่นอน สิ่งที่ฉันอยากรู้ก็คือทำอย่างไรโดยใช้ซีเรียลอินเตอร์เฟส (TX0 และ RX0) - เช่นเดียวกับที่โปรแกรมอัปโหลดไปยังคอนโทรลเลอร์ในโลก Arduino
AndreKR

@ AndreKR ฉันสับสน ... คุณมีมังกรทำไมคุณไม่ต้องการที่จะอ่านโปรแกรมในลักษณะปกติ - ฉันเข้าใจผิดความคิดเห็นของคุณเกี่ยวกับการไม่รู้ว่าหมุดใดที่จะเชื่อมต่อกับ "อินเตอร์เฟซอนุกรม"
vicatcu

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