Leonardo (32u4): cách gạch nó theo lập trình


8

Khi Leonardo được giới thiệu, tôi nghĩ, tôi đã đọc một số bài viết về việc thận trọng để làm một số việc, điều đó có thể khiến nó không tải bất kỳ bản phác thảo mới nào nữa, vì vậy người ta phải viết lại bộ nạp khởi động. Vì tôi dự định sử dụng các tùy chọn tiết kiệm năng lượng, ví dụ để vô hiệu hóa các thành phần phần cứng không sử dụng như cổng USB, tôi sợ phải làm gì đó sai.

Một món ngon của Leonardo cho đến nay:

  • nếu ngắt bị vô hiệu hóa, tải lên bản phác thảo mới sẽ thất bại trừ khi người ta nhấn nút Đặt lại ngay khi Arduino IDE hiển thị "Đang tải lên ..."

Những thứ gì (ngoại trừ những thứ liên quan đến phần cứng thông thường nghĩ như kết nối các chân được cấu hình đầu ra với các điện thế cố định) có thể làm hỏng bộ điều khiển hoặc yêu cầu phải khởi động lại Leonardo bằng bộ tải khởi động mới?


Nói chung, Arduinos không thể gạch thông qua phần mềm trừ khi làm hỏng các cầu chì trên chip (hoặc thiết kế một robot để phá hủy bảng: D).
Chim cánh cụt vô danh

1
Bộ tải khởi động luôn chạy trước chương trình của riêng bạn. Vì vậy, khi bạn nhấn nút đặt lại, bộ tải khởi động sẽ khởi động và bạn có thể tải lên chương trình mới, ngay cả khi chương trình cũ của bạn bị lỗi. Việc vô hiệu hóa một số thành phần chỉ là tạm thời và chúng sẽ khôi phục khi thiết bị được đặt lại. Bằng cách thay đổi cầu chì, bạn có thể thực hiện tùy chọn nhất định vĩnh viễn, vì vậy hãy cố gắng tránh phải thay đổi cầu chì.
Gerben

2
Gerben, bạn có thể vui lòng thêm nhận xét của bạn như câu trả lời?
Thomas S.

Câu trả lời:


1

Nếu bạn tải lên một chương trình thay đổi tốc độ của lõi USB thì nó sẽ gần như bị brick. Điều gì sẽ xảy ra là đây:

  1. Bật nguồn, khởi động bộ tải khởi động, liệt kê thiết bị USB trên PC.
  2. Vài giây sau chương trình bắt đầu, tốc độ lõi USB thay đổi, thiết bị USB biến mất khỏi PC

Vấn đề ở đây là không chỉ bạn phải nhấn thiết lập lại chương trình, sau khi thiết lập lại, bạn phải nhanh chóng chọn đúng cổng com và sau đó tải lên trước khi chương trình bắt đầu.

Redbearlab Blend Micro yêu cầu tốc độ lõi USB được đặt trong chương trình người dùng. Trong hướng dẫn thiết lập của họ có một bước để chỉnh sửa Arduino main.cpp và thêm một phần để làm như vậy. Nếu bước này bị bỏ lỡ, vấn đề trên xảy ra.


1

Tôi đã quản lý để gạch một ATMega128RFA1. Bộ tải khởi động và phần mềm tôi đã tải lên trong đó, đã hoạt động tốt. Nhưng không thể xóa / ghi ROM.

Sau khi kiểm tra những gì đã xảy ra, tôi phát hiện ra trong bảng dữ liệu rằng một số cầu chì trong lõi AVR được dùng để bảo vệ việc ghi ngẫu nhiên trên ROM. Một số loại cầu chì an ninh.

Tôi chưa bao giờ tìm thấy lỗi viết bằng các byte này (vì đây là một chương trình thực sự lớn và chúng tôi có 3 người liên quan đến mã hóa) nhưng vâng, chúng tôi vừa thổi cầu chì và mất MCU vì một lỗi.

Đối với leonardo, một số điều có thể xảy ra, nhưng không ai trong số này có thể làm hỏng bảng của bạn trừ khi bạn thổi một trong những cầu chì bảo vệ này.


1

Có thể, với một số mã thực sự thông minh , để khai thác bộ nạp khởi động để ghi đè lên chính nó.

Trích đoạn:

Giải pháp thực sự là khái niệm khá đơn giản. Một bộ tải khởi động, do bản chất của nó được thiết kế để tải firmware mới về thiết bị. Do đó, nó sẽ chứa ít nhất một lệnh spm. Bởi vì thanh ghi cấu hình spm phải được viết không quá 4 chu kỳ trước lệnh spm, điều đó có nghĩa là có rất ít trình tự thực tế xảy ra: chỉ sts, spm hoặc out, spm trình tự. Vì vậy, tất cả những gì bạn cần là tìm chuỗi trong phần bootloader; thiết lập các thanh ghi bên phải và gọi nó.

Tuy nhiên, hóa ra cũng có một vấn đề lớn với điều đó. Các hướng dẫn spm của trình khởi động tự lập trình V-USB không phải là một thói quen nhỏ gọn, nhưng được đưa vào mã chính; vì vậy, việc gọi nó sẽ khiến cho AVR bị sập khi nó cố thực thi phần còn lại của bộ tải khởi động V-USB.

Khó chịu, nhưng một lần nữa có một giải pháp. Bằng cách sử dụng bộ định thời có xung nhịp ở tần số CPU (dễ dàng trên một máy AVR), bạn có thể tạo một thói quen trong trình biên dịch để thiết lập các thanh ghi cho trình tự khởi động, trình tự spm; gọi nó và ngay tại thời điểm nó thực hiện chu kỳ đầu tiên của chính spm, ngắt hẹn giờ sẽ tắt và AVR sẽ chuyển sang thói quen ngắt của bạn (trong không gian Ứng dụng). Thường trình ngắt bật lên địa chỉ bộ nạp khởi động và sau đó quay lại mã trước đó - đây là thói quen thiết lập chuỗi spm out. Điều này sẽ hoạt động, bởi vì khi bạn áp dụng các hướng dẫn spm cho phần bootloader, CPU sẽ bị tạm dừng cho đến khi hoàn thành.

Về cơ bản, bạn có thể thực hiện một số chương trình ưa thích và lấy bộ nạp khởi động để tự vòi, khiến MCU trở nên vô dụng nếu không có lập trình viên chuyên dụng.


0

Người mà tôi biết là làm cho Leonard hoạt động giống như một con chuột USB vỗ khắp nơi và gõ các phím ngẫu nhiên để bạn không thể lập trình lại nó mà không thực hiện một số mẹo để đi xung quanh nó. Nhưng họ đề cập đến điều này trên các tài liệu api.

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.