Câu hỏi này có liên quan đến việc tự lập trình AVR .
Thông tin dự án:
Chúng tôi có một sản phẩm chạy bằng pin sử dụng ATMEGA644P. Ứng dụng chạy vĩnh viễn trong chế độ ngủ và chỉ thức dậy một lần một giây (RTC) hoặc khi một trong hai dòng ngắt bên ngoài được kích hoạt.
Thiết bị có bộ tải khởi động khá đơn giản, giao tiếp qua UART (sử dụng IC giao diện RS232). Nó chỉ phục vụ như một phương pháp thuận tiện để cập nhật chương trình cơ sở để không yêu cầu lập trình viên ISP phần cứng. (Trình tải khởi động dự kiến telegram bảo mật tổng kiểm tra)
Các thiết bị được thiết kế với DISABLED bên trong màu nâu vì nó tăng gấp đôi mức tiêu thụ năng lượng và thời lượng pin dài là bắt buộc (tôi đoán rằng nên sử dụng phát hiện ra bên ngoài màu nâu - thiết kế lại đang hoạt động).
Vấn đề:
Cứ sau vài tháng, một thiết bị chỉ dừng hoạt động, KHÔNG có bản cập nhật firmware nào được thực hiện trên các thiết bị đó. Tuy nhiên, sau khi kiểm tra thêm, nội dung flash của các thiết bị đó dường như bị hỏng. Hơn nữa, pin của một số thiết bị đó vẫn còn tốt, nhưng tôi không muốn loại trừ một số tình huống dưới điện áp.
Đây là so sánh nội dung flash ban đầu (trái) với nội dung bị hỏng (phải):
Một số quan sát:
- Một khối bị hỏng luôn bao gồm ít nhất một trang flash (256 byte) và được căn chỉnh trang. Nói cách khác: Chỉ toàn bộ trang bị ảnh hưởng, không phải byte đơn.
- Nội dung bị hỏng đọc 0xFF hầu hết thời gian, nhưng cũng có thể chứa một số giá trị khác hoặc hoàn toàn "ngẫu nhiên".
- Thanh nhỏ ở bên trái của hình ảnh cho thấy tất cả các khu vực bị ảnh hưởng. Đối với thiết bị này, nó chiếm khoảng một phần mười của tổng số nội dung flash.
- Chúng tôi có một thiết bị chỉ có một trang bị ảnh hưởng.
Điều hoàn toàn hợp lý là tình trạng dưới điện áp trong khi ghi bộ nhớ flash có thể làm hỏng nội dung flash. Tuy nhiên, điều này có nghĩa là một số lệnh nhạy cảm flash phải được thực thi.
Có thể bộ điều khiển đang khởi động lại ngẫu nhiên do điện áp thấp và mã bộ tải khởi động hoạt động hoàn toàn không thể đoán trước trong thời gian này. Để trích dẫn một số người từ một diễn đàn khác liên quan đến điện áp thấp:
"Không chỉ các lệnh ngẫu nhiên từ flash được thực thi, mà là thời gian hướng dẫn ngẫu nhiên (không có gì đảm bảo rằng mã từ flash sẽ được đọc và giải thích chính xác). Cùng với các phần khác của mcu có thể không hoạt động như được thiết kế, bao gồm cả bảo vệ cơ chế. "
Câu hỏi:
Bạn có nghĩ rằng "hành vi ngẫu nhiên trong khi điện áp thấp và thực hiện một số hướng dẫn thay đổi dữ liệu trong các trang flash" - giải thích là âm thanh? Nếu đó là trường hợp, tại sao chúng ta không thấy loại lỗi này mọi lúc chỉ là nguyên nhân của một số vấn đề phần mềm (tràn ngăn xếp, con trỏ không hợp lệ).
Bạn có ý tưởng nào khác có thể gây ra loại tham nhũng này không? Điều này có thể được gây ra bởi EMI / ESD?