Làm cách nào để ghi bootloader?


15

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ì?)


Nó khá dễ dàng để ghi bootloader vào arduino miễn là bạn làm theo các bước đúng. Video này có thể giúp bạn: YouTube - Cách ghi bộ tải khởi động lên ATMEGA328P-AU (SMD) | ARDUINO MINI tự làm
Sandesh HS

Câu trả lời:


15

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:

  1. Có được một ISP ISP , USBtinyISP , ParallelProgrammer hoặc một bo mạch Arduino khác . Đây sẽ là ISP của bạn.
  2. Trừ khi có hướng dẫn khác, hãy kết nối ISP với các chân ICSP trên bo mạch của bạn.
  3. Cấp nguồn cho bo mạch của bạn bằng cáp USB hoặc nguồn điện bên ngoài.
  4. Mở Arduino IDE.
  5. Hãy chắc chắn rằng bạn đã chọn đúng bảng mà bạn đang ghi vào 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.
  6. Chọn lập trình viên phù hợp tại Tools ► Programmer ►.
  7. Nhấp Tools ► Burn Bootloadervà 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:


1
Tại thời điểm này, AVRISP có khá nhiều EOL (cuối đời). Tối thiểu, bạn muốn có một AVRISPmk2. Ngoài ra còn có rất nhiều công cụ khác, fancier (ví dụ: AVR One!). Có lẽ bạn chỉ nên nói{line 1} or other dedicated ISP programmer.
Connor Wolf

Trên các bo mạch như Arduino Yun, mỗi khi bạn "tải lên qua wifi", bạn đang ghi bộ tải khởi động được hợp nhất với bản phác thảo của bạn. Điều này nhờ vào việc CPU Linux được kết nối với AVR MCU thông qua SPI, để bạn có thể bắt chước một ISP bằng phần mềm.
Federico Fissore

@FedericoFissore - đó là lý do tại sao nó mất nhiều thời gian?
TheDoctor

Vâng, điều đó và thực tế là GPIO bitbanging chậm hơn. Có một nỗ lực liên tục để tăng tốc nó.
Federico Fissore

8

Bộ tải khởi động là gì?

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.


Cách thay thế bộ nạp khởi độ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:

  • Uno (hoặc tương tự, chẳng hạn như Duemilanove)
  • Leonardo
  • Mega2560

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.

Lập trình viên bootloader cho Uno

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


Bạn có phải chọn loại chip mà bạn đang ghi (Công cụ-> Bảng ..) không? Tôi chọn bảng nào khi ghi bộ tải khởi động để độc lập chip?
Camilo

Bạn chọn loại bảng bạn đang sử dụng để ghi bộ tải khởi động trong IDE. Phác thảo bootloader tự động phát hiện loại bảng đích.
Nick Gammon
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.