Tải lên mã trên Arduino Leonardo bằng dòng lệnh


7

Tôi đang cố tải lên tệp .hex đã biên dịch trên Arduino Leonardo, sử dụng thiết bị đầu cuối. Tải lên mã mẫu bằng Arduino IDE hoạt động tốt và từ Arduino IDE tôi đã nhận được lệnh tải lên

avrdude -C/etc/avrdude.conf -patmega32u4 -cavr109 -v -v -v -v -P/dev/ttyACM0 -b57600 -D -Uflash:w:[file.hex]:i

Nhưng thực hiện nó tôi đã gặp lỗi sau

Connecting to programmer: .avrdude: Send: . [1b]
avrdude: Send: S [53] 
avrdude: Recv: . [15] 

avrdude: ser_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding

Chuyện gì vậy?

Câu trả lời:


3

Vấn đề với Leonardo là nó không tự động thiết lập lại khi bạn mở cổng nối tiếp như các bảng như Uno do.

Arduino IDE chứa mã để tự thiết lập lại bảng (bằng cách mở cổng nối tiếp ở tốc độ 1200 baud và đóng lại) mà avrdude không có.

Về cơ bản, bạn cần một cách khác để thiết lập lại bảng để nó vào bộ nạp khởi động. Điều đó có thể đơn giản như chỉ cần nhấn nút đặt lại vào đúng thời điểm (đèn LED tắt dần khi ở chế độ bộ nạp khởi động) hoặc sử dụng một số tiện ích dòng lệnh để mở cổng nối tiếp ở 1200 baud và đóng lại ngay trước khi chạy avrdude .

Tôi không có Leonardo của tôi để trao tay ngay bây giờ, nhưng bạn có thể gặp may mắn khi chạy:

stty -F /dev/ttyACM0 ispeed 1200 ospeed 1200 && avrdude -C/etc/avrdude.conf -patmega32u4 -cavr109 -v -v -v -v -P/dev/ttyACM0 -b57600 -D -Uflash:w:[file.hex]:i

Điều này không làm việc cho tôi.
Cerin

3

Sau khi thử một số thử nghiệm và lỗi, tôi đã xây dựng một nhị phân đơn giản để tải lên bộ tải khởi động Leonardo. Nhị phân này mở nối tiếp ở 1200 baud sau đó đóng lại và kết thúc nhị phân avrdude để ghi .hexvào flash.

Trong lõi Arduino, CDC.cppchúng ta có thể thấy rằng CDC không chỉ chờ baudrate 1200, mà CDC kiểm tra giá trị DTR. Nếu DTR lên cao, CDC hủy bỏ để nhảy vào bộ nạp khởi động. Đó là lý do tại sao tôi xóa giá trị DTR. Tôi đã thử điều này trong Ubuntu 16.04.

https://github.com/vanbwodonk/leonardoUploader

Chỉ sử dụng lệnh đơn giản này:

leonardoUploader /dev/ttyACM0 Blink.ino.hex

Tôi hy vọng nó sẽ giúp những người khác tìm kiếm này.


0

Đối với một giải pháp Windows, hãy xem tại đây: Làm cách nào tôi có thể buộc Leonardo thiết lập lại với avrdude? . Tôi đã thực hiện trình bao bọc tập tin bat đơn giản tự động hóa việc gọi avrdude. Nó xác định cổng COM COM của Leonardo bằng WMI, đặt lại cổng COM này thành 1200 baud bằng lệnh mode, sau đó xác định cổng COM của bộ tải khởi động và gọi avrdude.

Phần sụn được cho là được đặt vào firmware.hex, nhưng tệp bat có thể được thay đổi để được cung cấp từ dòng lệnh.

Tôi đã đặt mã vào repo GitHub: Trình bao bọc đơn giản cho avrdude để cho phép tải lên firmware cho Arduino Leonardo từ dòng lệnh .


1
Đây là một liên kết chỉ trả lời và nên được sửa đổi hoặc xóa.
Mã Gorilla
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.