Tôi đã được hướng dẫn "ghi bộ tải khởi động" vào Arduino của tôi để sửa lỗi tôi gặp phải. Tôi có thể làm cái này như thế nào? (Và chính xác thì bộ nạp khởi động là gì?)
Tôi đã được hướng dẫn "ghi bộ tải khởi động" vào Arduino của tôi để sửa lỗi tôi gặp phải. Tôi có thể làm cái này như thế nào? (Và chính xác thì bộ nạp khởi động là gì?)
Câu trả lời:
Bộ nạp khởi động là một chương trình nhỏ (hầu như) luôn có trên Arduino. Nó quản lý tải lên và bắt đầu các bản phác thảo bạn thực hiện và nhấp nháy đèn LED 13 pin bất cứ khi nào bảng đặt lại.
Để ghi bộ tải khởi động:
Tools ► Board ►
trong IDE. Kiểm tra kỹ điều này ngay cả khi bạn có thể tải lên chương trình một cách chính xác; tải lên không phải lúc nào cũng yêu cầu đúng bảng.Tools ► Programmer ►
.Tools ► Burn Bootloader
và chờ. Nó không nên mất hơn một phút và thường chỉ mất vài giây.Nguồn:
{line 1} or other dedicated ISP programmer.
Và chính xác thì bootloader là gì?
Bộ tải khởi động là một đoạn mã nhỏ nằm trong phần "cao" của bộ nhớ chương trình. Thông thường nó không bị xóa khi bạn tải lên bản phác thảo mới. Mục đích của nó là được kích hoạt ngay sau khi thiết lập lại (các cầu chì được cấu hình để bắt đầu mã tại địa chỉ bộ nạp khởi động thay vì địa chỉ 0x0000). Bộ tải khởi động sẽ đợi một thời gian ngắn (chẳng hạn như một giây) để xem liệu dữ liệu "lập trình" có đến trên cổng nối tiếp không.
Nếu vậy, nó đọc dữ liệu đó và giải mã nó để lập trình lại phần còn lại của bộ nhớ flash. Hoạt động cùng với chương trình tải lên (thông thường là thông thường) bản phác thảo mới được gửi qua cổng nối tiếp. Bộ tải khởi động sẽ xóa các trang của bộ nhớ flash và thay thế chúng bằng mã mới. Sau khi thực hiện xong, nó thực thi mã mới.
Nếu không có hướng dẫn nào đến, bộ nạp khởi động nhảy tới địa chỉ 0x0000 để thực hiện bản phác thảo hiện có trên bảng.
Một phương pháp khác để lập trình bộ nạp khởi động là sử dụng một bản phác thảo mà tôi đã viết cách đây một thời gian chạy trên:
Bảng "lập trình" chạy bản phác thảo có bộ tải khởi động cho một số bảng được mã hóa cứng vào nó. Bạn kết nối bảng lập trình với bảng đích (bảng muốn bộ tải khởi động) với 6 dây nối như hình minh họa.
Bức ảnh đặc biệt đó minh họa một Uno lập trình một cái khác.
Bạn chạy bản phác thảo (hoạt động thông qua Trình giám sát nối tiếp để ra lệnh cho nó). Đầu tiên, nó xác định chip mục tiêu:
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 ...
Các bạn nhấn G để lập trình nó.
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 ...
Đối với một Uno, điều này mất một giây. Để lập trình Mega2560 mất 3 giây.
Hướng dẫn chi tiết tại lập trình viên bootloader Atmega
Mã có thể được tải xuống từ Github: nickgammon / arduino_sketches