คำถามนี้เป็นคำถามที่เกี่ยวข้องกับAVR deprogramming ตัวเอง
ข้อมูลโครงการ:
เรามีผลิตภัณฑ์ที่ใช้พลังงานจากแบตเตอรี่โดยใช้ ATMEGA644P แอปพลิเคชั่นทำงานอย่างถาวรในโหมดสลีปและจะปลุกเพียงครั้งเดียวต่อวินาที (RTC) หรือเมื่อหนึ่งในสองอินเตอร์รัปต์ไลน์ถูกทริกเกอร์
อุปกรณ์มีบูทโหลดเดอร์ที่ใช้งานง่ายซึ่งสื่อสารผ่าน UART (โดยใช้อินเตอร์เฟส RS232 IC) เป็นเพียงวิธีการอำนวยความสะดวกในการอัปเดตเฟิร์มแวร์ดังนั้นจึงไม่จำเป็นต้องมีโปรแกรมเมอร์ ISP (บูตโหลดเดอร์คาดว่าจะตรวจสอบโทรเลขที่ปลอดภัย)
อุปกรณ์ได้รับการออกแบบให้มีการปิดการใช้งานสีน้ำตาลภายในเนื่องจากเป็นสองเท่าของการใช้พลังงานและอายุการใช้งานแบตเตอรี่ที่ยาวนาน (ฉันเดาว่าควรใช้การตรวจจับสีน้ำตาลภายนอกภายนอก
ปัญหา:
ทุกๆสองสามเดือนที่อุปกรณ์หยุดทำงานไม่มีการอัพเดตเฟิร์มแวร์ในอุปกรณ์เหล่านั้น อย่างไรก็ตามหลังจากการตรวจสอบเพิ่มเติมเนื้อหาแฟลชของอุปกรณ์เหล่านั้นดูเหมือนจะเสียหาย นอกจากนี้แบตเตอรี่ของอุปกรณ์เหล่านั้นบางอย่างยังคงดี แต่ฉันไม่ต้องการแยกแยะสถานการณ์ภายใต้แรงดัน
นี่คือการเปรียบเทียบเนื้อหาแฟลชต้นฉบับ (ซ้าย) กับเนื้อหาที่เสียหาย (ขวา):
ข้อสังเกตบางอย่าง:
- บล็อกที่เสียหายประกอบด้วยอย่างน้อยหนึ่งหน้าแฟลช (256 ไบต์) และจัดเรียงหน้า กล่าวอีกนัยหนึ่ง: เฉพาะหน้าทั้งหมดที่ได้รับผลกระทบไม่ใช่ไบต์เดียว
- เนื้อหาที่เสียหายอ่าน 0xFF เป็นส่วนใหญ่ แต่อาจมีค่าอื่น ๆ หรือเป็น "สุ่ม" อย่างสมบูรณ์
- แถบเล็ก ๆ ทางด้านซ้ายของภาพแสดงพื้นที่ที่ได้รับผลกระทบทั้งหมด สำหรับอุปกรณ์นี้ประมาณหนึ่งในสิบของเนื้อหาแฟลชทั้งหมด
- เรามีอุปกรณ์หนึ่งชิ้นที่มีเพียงหน้าเดียวที่ได้รับผลกระทบ
เป็นไปได้อย่างมากที่สภาวะแรงดันไฟฟ้าต่ำในขณะที่เขียนหน่วยความจำแฟลชอาจทำให้เนื้อหาแฟลชเสียหาย อย่างไรก็ตามนี่หมายความว่าต้องมีการใช้งานคำแนะนำที่ละเอียดอ่อนสำหรับแฟลช
อาจคอนโทรลเลอร์เริ่มการสุ่มแบบใหม่เนื่องจากแรงดันไฟฟ้าต่ำและรหัสบูตโหลดเดอร์ไม่สามารถคาดเดาได้ทั้งหมดในช่วงเวลานี้ หากต้องการอ้างถึงผู้ชายบางคนจากฟอรัมอื่นเกี่ยวกับแรงดันไฟฟ้าต่ำ:
"ไม่เพียง แต่คำสั่งแบบสุ่มจากการใช้แฟลชเท่านั้น แต่ระยะเวลาการสุ่มแบบสุ่ม (ไม่มีการรับประกันว่าโค้ดจากแฟลชจะสามารถอ่านและตีความได้อย่างถูกต้อง) พร้อมกับส่วนอื่น ๆ ของ mcu อาจไม่ทำงานตามที่ออกแบบไว้รวมถึงการป้องกัน กลไก."
คำถาม:
คุณคิดว่า"พฤติกรรมแบบสุ่มในระหว่างแรงดันไฟฟ้าต่ำและดำเนินการคำสั่งบางอย่างที่เปลี่ยนแปลงข้อมูลในหน้าแฟลช" - คำอธิบายนั้นเป็นเสียงหรือไม่? หากเป็นเช่นนั้นเราจะไม่เห็นข้อผิดพลาดประเภทนี้ตลอดเวลาซึ่งเป็นสาเหตุของปัญหาซอฟต์แวร์บางอย่าง (สแตกล้นตัวชี้ไม่ถูกต้อง)
คุณมีความคิดเห็นอื่น ๆ ที่ทำให้เกิดความเสียหายแบบนี้หรือไม่? สิ่งนี้อาจเกิดจาก EMI / ESD?