Làm thế nào để đọc chương trình hiện tại từ một Arduino?


14

Tôi đã có được một PCB PCB với ATmega2560 , đã được lập trình với bộ tải khởi động Arduino và một số chương trình. Tôi có bản phác thảo , nhưng trước khi xử lý nó, tôi muốn sao lưu nhị phân hiện tại trong bộ điều khiển. Như hầu hết các Arduinos, nó được kết nối với PC bằng bộ chuyển đổi USB nối tiếp được kết nối với TX0 và ​​RX0 và ​​không có giao diện ISP .

Rõ ràng có mã để đọc trong bộ tải khởi động Arduino , nhưng tôi không biết nên sử dụng công cụ nào để truy cập nó vì không có mục menu nào trong Arduino IDE.

Tôi cần phần mềm nào để đọc chương trình từ Arduino?


Tìm thấy mã để đọc trong bộ nạp khởi động, câu hỏi được chỉnh sửa.
AndreKR

liều lượng này đánh thức câu hỏi của bạn, nhưng bạn có thể xuất các đoạn arduino của bạn dưới dạng tệp .HEX.
uranium Lees

Câu trả lời:


1

Bộ tải khởi động Arduino là một biến thể của giao thức STK500 gốc (1.x) . Ký tự 't' (ASCII 0x74) là lệnh "Đọc trang". Vì vậy, có lẽ có thể kéo chương trình ra khỏi cổng nối tiếp thông qua bộ tải khởi động bằng cách sử dụng AVRDUDE ... Nhưng tốt nhất tôi nghĩ rằng nó sẽ mất một thời gian ưa thích để kéo nó ra.


11

Tôi đã kết xuất bộ nhớ từ Duemillenova bằng ATMega328P bằng lệnh sau:

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

1
chú ý rằng lập trình viên áp dụng có lẽ là arduino chứ không phải stk500.
Paulo Neves

Tại sao bốn -vs cần thiết?
Peter Mortensen

Từ tài liệu của AVRDUDE, "2.1 Mô tả tùy chọn" : "... -v Kích hoạt đầu ra dài dòng. Tùy chọn -v khác làm tăng mức độ chi tiết. "
Peter Mortensen

Đây phải là câu trả lời được chấp nhận.
bướm

ĐÚNG! Bộ nạp khởi động vi mô pro không hoạt động trên bản sao vi mô chuyên nghiệp của tôi. Tôi đã bỏ đèn flash từ một bản sao vi mô chuyên nghiệp đang hoạt động và lưu vào cái cần thiết cho bộ tải khởi động. Sử dụng Arduino làm ISP (linux) - dump : ./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; viết : ./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; xác minh:./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

Liệu AVR Sao lưu với avrdude chủ đề trả lời câu hỏi của bạn? Về cơ bản, bạn có thể đọc tất cả bộ nhớ từ một bộ điều khiển miễn là cầu chì bảo vệ không được đặt.

Đây là thiết lập tôi sử dụng cho ATtiny's và ATmega's.

Trên bảng hiển thị:

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

Tham khảo biểu dữ liệu của bộ điều khiển sử dụng pin chính xác. Có khá nhiều trang web trên Internet viết về lập trình AVR sử dụng Arduino, ví dụ: http://hlt.media.mit.edu/?p=1229


Tôi cần một arduino thứ hai cho điều đó, phải không? Tôi không có cái nào cả.
AndreKR

1
Đây là một phương pháp hai Arduino, vâng.
jippie

Và, mặc dù hơi khó nhìn trong hình, nhưng các chân được sử dụng trên Arduino mục tiêu cũng không phải là TX0 và ​​RX0, phải không?
AndreKR

Không, TX và RX không được sử dụng cho ICP. Cập nhật câu trả lời một chút.
jippie

Vâng, tôi nghĩ rằng bạn đã bỏ lỡ toàn bộ câu hỏi của tôi, có lẽ bởi vì tôi đã cho nó một tiêu đề xấu. Tôi đọc lại toàn bộ câu hỏi.
AndreKR

3

Theo như tôi có thể thấy từ mã nguồn của bộ tải khởi động Arduino , không có cách nào để 'đổ' tất cả bộ nhớ từ nó. Bộ tải khởi động hỗ trợ chế độ 'màn hình' cho phép bạn kết xuất một byte bộ nhớ mỗi lần. Tuy nhiên, theo nhận xét mã nguồn "/ * các chức năng giám sát sẽ chỉ được biên dịch khi sử dụng ATmega128, do các hạn chế kích thước bootblock * /"

Như vậy, tôi đoán bạn sẽ không gặp may nếu bạn không muốn sử dụng ISP, thay đổi bộ tải khởi động hoặc tải lên bản phác thảo để thực hiện.


Tôi đã đề cập đến phần bắt đầu trong dòng 701 với else if(ch=='t') {.
AndreKR

Điểm tốt - đã không nhìn thấy điều đó.
RJR

2

Tôi nghĩ rằng có một tùy chọn menu cho điều đó nhưng tôi không tìm thấy nó ngay bây giờ. Nếu bạn có một lập trình viên ISP, bạn có thể sử dụng AVR Studio để đọc hình ảnh bộ nhớ ra khỏi chip và lưu nó trong tệp HEX, điều đó sẽ cho phép bạn khôi phục nó thông qua các phương tiện tương tự.

Biên tập

Đáp lại bình luận của bạn - thật dễ dàng! Bạn cần phải đồng hóa hai sơ đồ giá trị thông tin để kéo nó ra. Đầu tiên là Ánh xạ pin Arduino / ATMega2560.

nhập mô tả hình ảnh ở đây

Thứ hai là Ánh xạ chân của ISP Header / AVR:

nhập mô tả hình ảnh ở đây

Được trang bị hai hình ảnh này, bạn sẽ có thể xem làm thế nào để dây nó lên.

  • Chạy một dây từ pin tiêu đề DIG50 đến Dragon ISP 1
  • Chạy một dây từ VCC đến pin tiêu đề ISP 2
  • Chạy một dây từ chân tiêu đề DIG52 đến Dragon ISP 3
  • Chạy một dây từ chân tiêu đề DIG51 đến Dragon ISP 4
  • Chạy một dây từ RESET đến pin tiêu đề Dragon ISP 5
  • Chạy một dây từ pin tiêu đề GND đến Dragon ISP 6

Với những thứ đã có, bạn sẽ có thể sử dụng AVR Studio để đọc tệp Hex khỏi chip - hãy cho tôi biết nếu bạn cần thêm hướng dẫn.


Tôi có Rồng, nhưng tôi không biết chân nào trên Rồng để kết nối với giao diện nối tiếp của Arduino.
AndreKR

@AndreKR xem câu trả lời đã được chỉnh sửa của tôi để biết thêm thông tin
Abbeyatcu

Như đã nêu trong câu hỏi của tôi, tôi biết cách đọc chương trình bằng ISP, tất nhiên. Những gì tôi muốn biết là làm thế nào để làm điều đó bằng giao diện nối tiếp (TX0 và ​​RX0) - giống như cách các chương trình được tải lên bộ điều khiển trong thế giới Arduino.
AndreKR

@AndreKR Tôi bối rối ... bạn có một con rồng, tại sao bạn không muốn đọc chương trình theo cách thông thường - Tôi đã hiểu nhầm nhận xét của bạn về việc không biết chân nào để kết nối với "giao diện nối tiếp"
Abbeyatcu

PCB tôi không có tiêu đề ISP. Tuy nhiên, nó có giao diện nối tiếp và bộ tải khởi động Arduino. Bằng cách đó, các chương trình được tải lên trong thế giới Arduino, và rõ ràng chúng có thể được tải xuống theo cùng một cách.
AndreKR
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.