AVR หน่วยความจำแฟลชเสียหาย


11

คำถามนี้เป็นคำถามที่เกี่ยวข้องกับAVR deprogramming ตัวเอง

ข้อมูลโครงการ:
เรามีผลิตภัณฑ์ที่ใช้พลังงานจากแบตเตอรี่โดยใช้ ATMEGA644P แอปพลิเคชั่นทำงานอย่างถาวรในโหมดสลีปและจะปลุกเพียงครั้งเดียวต่อวินาที (RTC) หรือเมื่อหนึ่งในสองอินเตอร์รัปต์ไลน์ถูกทริกเกอร์

อุปกรณ์มีบูทโหลดเดอร์ที่ใช้งานง่ายซึ่งสื่อสารผ่าน UART (โดยใช้อินเตอร์เฟส RS232 IC) เป็นเพียงวิธีการอำนวยความสะดวกในการอัปเดตเฟิร์มแวร์ดังนั้นจึงไม่จำเป็นต้องมีโปรแกรมเมอร์ ISP (บูตโหลดเดอร์คาดว่าจะตรวจสอบโทรเลขที่ปลอดภัย)

อุปกรณ์ได้รับการออกแบบให้มีการปิดการใช้งานสีน้ำตาลภายในเนื่องจากเป็นสองเท่าของการใช้พลังงานและอายุการใช้งานแบตเตอรี่ที่ยาวนาน (ฉันเดาว่าควรใช้การตรวจจับสีน้ำตาลภายนอกภายนอก

ปัญหา:
ทุกๆสองสามเดือนที่อุปกรณ์หยุดทำงานไม่มีการอัพเดตเฟิร์มแวร์ในอุปกรณ์เหล่านั้น อย่างไรก็ตามหลังจากการตรวจสอบเพิ่มเติมเนื้อหาแฟลชของอุปกรณ์เหล่านั้นดูเหมือนจะเสียหาย นอกจากนี้แบตเตอรี่ของอุปกรณ์เหล่านั้นบางอย่างยังคงดี แต่ฉันไม่ต้องการแยกแยะสถานการณ์ภายใต้แรงดัน

นี่คือการเปรียบเทียบเนื้อหาแฟลชต้นฉบับ (ซ้าย) กับเนื้อหาที่เสียหาย (ขวา):

การเปรียบเทียบแฟลช

ข้อสังเกตบางอย่าง:

  • บล็อกที่เสียหายประกอบด้วยอย่างน้อยหนึ่งหน้าแฟลช (256 ไบต์) และจัดเรียงหน้า กล่าวอีกนัยหนึ่ง: เฉพาะหน้าทั้งหมดที่ได้รับผลกระทบไม่ใช่ไบต์เดียว
  • เนื้อหาที่เสียหายอ่าน 0xFF เป็นส่วนใหญ่ แต่อาจมีค่าอื่น ๆ หรือเป็น "สุ่ม" อย่างสมบูรณ์
  • แถบเล็ก ๆ ทางด้านซ้ายของภาพแสดงพื้นที่ที่ได้รับผลกระทบทั้งหมด สำหรับอุปกรณ์นี้ประมาณหนึ่งในสิบของเนื้อหาแฟลชทั้งหมด
  • เรามีอุปกรณ์หนึ่งชิ้นที่มีเพียงหน้าเดียวที่ได้รับผลกระทบ

เป็นไปได้อย่างมากที่สภาวะแรงดันไฟฟ้าต่ำในขณะที่เขียนหน่วยความจำแฟลชอาจทำให้เนื้อหาแฟลชเสียหาย อย่างไรก็ตามนี่หมายความว่าต้องมีการใช้งานคำแนะนำที่ละเอียดอ่อนสำหรับแฟลช

อาจคอนโทรลเลอร์เริ่มการสุ่มแบบใหม่เนื่องจากแรงดันไฟฟ้าต่ำและรหัสบูตโหลดเดอร์ไม่สามารถคาดเดาได้ทั้งหมดในช่วงเวลานี้ หากต้องการอ้างถึงผู้ชายบางคนจากฟอรัมอื่นเกี่ยวกับแรงดันไฟฟ้าต่ำ:

"ไม่เพียง แต่คำสั่งแบบสุ่มจากการใช้แฟลชเท่านั้น แต่ระยะเวลาการสุ่มแบบสุ่ม (ไม่มีการรับประกันว่าโค้ดจากแฟลชจะสามารถอ่านและตีความได้อย่างถูกต้อง) พร้อมกับส่วนอื่น ๆ ของ mcu อาจไม่ทำงานตามที่ออกแบบไว้รวมถึงการป้องกัน กลไก."

คำถาม:
คุณคิดว่า"พฤติกรรมแบบสุ่มในระหว่างแรงดันไฟฟ้าต่ำและดำเนินการคำสั่งบางอย่างที่เปลี่ยนแปลงข้อมูลในหน้าแฟลช" - คำอธิบายนั้นเป็นเสียงหรือไม่? หากเป็นเช่นนั้นเราจะไม่เห็นข้อผิดพลาดประเภทนี้ตลอดเวลาซึ่งเป็นสาเหตุของปัญหาซอฟต์แวร์บางอย่าง (สแตกล้นตัวชี้ไม่ถูกต้อง)

คุณมีความคิดเห็นอื่น ๆ ที่ทำให้เกิดความเสียหายแบบนี้หรือไม่? สิ่งนี้อาจเกิดจาก EMI / ESD?


ในบล็อกที่สองในตัวอย่างของคุณบิตใด ๆ เปลี่ยนจาก 1-> 0 หรือทั้งหมดเปลี่ยนเป็น 0-> 1 หรือไม่ ฉันมีสคริปต์ที่คำนวณสิ่งนี้ แต่ฉันจะไม่พิมพ์ตัวเลขทั้งหมดจากภาพหน้าจอของคุณ
เครื่องหมาย

@markrages: จากการดูที่ 0-> 1 เท่านั้น หนึ่งคำตอบก็ชี้ให้เห็นว่ามันดูเหมือนการลบบางส่วนที่ไม่ใช่บิตทั้งหมดถูกพลิกเป็น 1 ขอบคุณสำหรับการสังเกต
Rev1.0

คำตอบ:


11

คุณควรสังเกตว่าแฟลชนั้นไม่ได้ถูกเขียนขึ้นมันจะถูกลบ แฟลชลบเต็ม 0xFF 256 ไบต์แรกของคุณจะถูกลบโดยสิ้นเชิงพื้นที่ 256- ไบต์ที่สามของคุณจะถูกลบบางส่วน (คุณมีเพียง 0 ถึง 1 bitflips จากข้อมูลที่ถูกต้องไปยังข้อมูลที่เสียหาย)

ตามแผ่นข้อมูลแฟลชนี้สามารถลบหน้าได้ (ฉันมักจะทำงานกับการลบบล็อกที่ใหญ่กว่าหน้า) อย่างที่เห็นในหน้า 282 การทำการลบหน้าด้วย SPM นั้นค่อนข้างง่าย

คุณอาจสนใจตามมาตรา 23.8.1 (การป้องกันการทุจริตใน Flash):

ความเสียหายของโปรแกรม Flash อาจเกิดจากสองสถานการณ์เมื่อแรงดันไฟฟ้าต่ำเกินไป ก่อนอื่นลำดับการเขียนปกติของ Flash ต้องใช้แรงดันไฟฟ้าขั้นต่ำในการทำงานอย่างถูกต้อง ประการที่สอง CPU สามารถดำเนินการคำสั่งอย่างไม่ถูกต้องหากแรงดันไฟฟ้าสำหรับการดำเนินการคำสั่งต่ำเกินไป ความเสียหายจาก Flash สามารถหลีกเลี่ยงได้ง่ายโดยทำตามคำแนะนำการออกแบบ (มีเพียงพอ):

  1. หากไม่จำเป็นต้องอัปเดต Boot Loader ในระบบให้ตั้งค่าบิต Boot Loader Lock เพื่อป้องกันการอัปเดตซอฟต์แวร์ Boot Loader
  2. ให้ AVR RESET ทำงาน (ต่ำ) ในช่วงที่แรงดันไฟฟ้าของแหล่งจ่ายไฟไม่เพียงพอ
    สิ่งนี้สามารถทำได้โดยการเปิดใช้งานเครื่องตรวจจับ Brown-out (BOD) ภายในหากการทำงานของโวลต์อายุตรงกับระดับการตรวจจับ ถ้าไม่สามารถใช้วงจรป้องกันรีเซ็ต VCC ต่ำภายนอกได้ หากการรีเซ็ตเกิดขึ้นในขณะที่การดำเนินการเขียนกำลังดำเนินการการเขียนจะเสร็จสมบูรณ์หากแรงดันไฟฟ้าของแหล่งจ่ายเพียงพอ
  3. รักษาแกน AVR ไว้ในโหมดประหยัดพลังงานในช่วงที่ VCC เหลือน้อย วิธีนี้จะช่วยป้องกันไม่ให้ CPU พยายามถอดรหัสและประมวลผลคำสั่งปกป้อง SPMCSR Register อย่างมีประสิทธิภาพและทำให้แฟลชไม่สามารถเขียนได้โดยไม่ตั้งใจ

การสังเกตของคุณเกี่ยวกับการลบบางส่วนในหน้าสามนั้นน่าเชื่อถือ เกี่ยวกับข้อความ Atmel: เราทุกคนยอมรับว่า BOD ดูเหมือนจะเป็นข้อบังคับ แต่ฉันก็ยังไม่แน่ใจเกี่ยวกับสาเหตุที่แท้จริงของการทุจริต เป็นไปได้หรือไม่ที่ตัวควบคุมเพียงแค่เรียกใช้งาน (เนื่องจากแรงดันไฟฟ้าต่ำ) คำสั่งเฉพาะนี้เพื่อลบหน้าแฟลช? ฉันหมายความว่าสิ่งนี้จะต้องเกิดขึ้นระหว่างการเรียกใช้โค้ดบูตเดอร์เนื่องจาก Flash สามารถเขียนได้จากที่นั่น และมันต้องมีลำดับเฉพาะ
Rev1.0

3
เป็นไปไม่ได้ที่จะอธิบายแหล่งที่มาที่แน่นอนของการคอร์รัปชั่น: เมื่อ Vcc ของคุณลดลงมันจะต่ำเกินไปที่จะทำให้ทรานซิสเตอร์ตัวใดตัวหนึ่งอิ่มตัวด้วยอีกอัน MCU นั้นเป็นสมการเชิงตรรกะที่มีขนาดใหญ่มาก หากทรานซิสเตอร์ของคุณหยุดทำงานเป็นสวิตช์ตรรกะคุณเปลี่ยนสมการนี้ เนื่องจากทรานซิสเตอร์ตัวแรกที่ทำงานผิดพลาดขึ้นอยู่กับ ASIC Wafer doping และการรบกวนของคลื่นแม่เหล็กไฟฟ้าจากภายนอกคุณจึงไม่สามารถคาดการณ์ได้ว่าจะเกิดอะไรขึ้น เพื่อแก้ไขปัญหานี้เมื่อคุณออกแบบ ASIC ของคุณคุณอาจเพิ่มส่วนอะนาล็อกที่ปิดส่วนดิจิตอลก่อนที่จะทำงานผิดปกติ แต่มันเพิ่มต้นทุน ASIC ทั้งหมด
Jacen

แอปพลิเคชันทราบว่าสถานะการป้องกัน Brown-out ภายนอกของ AVR180 : "โปรดทราบว่าเนื้อหาของโปรแกรมแฟลชภายในAVR®ไม่เคยได้รับผลกระทบจากแรงดันไฟฟ้าของแหล่งจ่ายไฟไม่เพียงพอ" เพิ่มเติม: "เนื่องจาก CPU ของ AVR ไม่สามารถเขียนไปยังหน่วยความจำโปรแกรมของตัวเองเนื้อหาหน่วยความจำโปรแกรมแฟลชภายในจะไม่ได้รับผลกระทบจากสถานการณ์ไฟฟ้าขัดข้อง" - IMO Atmel เพียงแค่เพิกเฉยว่ามีบางอย่างเช่น boot loader ที่ต้องเปลี่ยน flash mem
Rev1.0

@ Rev1.0 ใช่แล้วมันไม่น่าเป็นไปได้เลย ... นั่นเป็นเหตุผลที่คุณเห็นมันบนอุปกรณ์เพียงเครื่องเดียวทุกสองสามเดือนแทนที่จะเป็นอุปกรณ์ทั้งหมดตลอดเวลา
user253751

"ฉันหมายความว่าสิ่งนี้จะต้องเกิดขึ้นในระหว่างการเรียกใช้โค้ดบูตเดอร์เนื่องจาก Flash สามารถเขียนได้จากที่นั่น" - เป็นเรื่องจริงถ้าตั้งบิตล็อคการบูต ( BLB01และเพื่อน) ไว้อย่างเหมาะสม! ที่พวกเขา? "สับสน ... บันทึกของแอปพลิเคชัน ... " - บันทึกของแอปพลิเคชันไม่น่าเชื่อถืออย่างน่าเชื่อถือ ใช้พวกเขาเป็นแรงบันดาลใจเท่านั้น สำหรับการค้ำประกันให้พึ่งพาเอกสารข้อมูล (ซึ่งไม่ใช่ความผิดพลาด แต่ยังไง)
marcelm

4

นี่เป็นปัญหาที่รู้จักกันดีและมีผลต่อไมโครคอนโทรลเลอร์จำนวนมาก (ไม่ใช่แค่ Atmel) ฮาร์ดแวร์ควบคุมหน่วยความจำแฟลชทำให้เกิดความเสียหายหรือลบส่วนหนึ่งของหน่วยความจำภายใต้สภาวะที่มีแรงดันไฟฟ้าต่ำ การแก้ไขที่ง่ายคือการเปิดใช้งานการป้องกันน้ำตาล

คุณควรเปิดใช้งานการป้องกันบราวน์เอาต์กับไมโครคอนโทรลเลอร์เสมอ


3
คุณมีข้อมูลอ้างอิงเกี่ยวกับ HOW และทำไม "ฮาร์ดแวร์ควบคุมหน่วยความจำเสียหายหรือลบส่วนหนึ่งของหน่วยความจำภายใต้สภาวะที่มีแรงดันไฟฟ้าต่ำ"? มีการอภิปรายในฟอรั่มมากมายเกี่ยวกับความเสียหายของแฟลช แต่มันแทบจะไม่เกิดขึ้นกับบางสิ่งที่เป็นของแข็งซึ่งเป็นสาเหตุที่ฉันถามที่นี่
Rev1.0

มันอยู่ในชิปที่มีปัญหาแรงดันไฟฟ้าต่ำหรือเกี่ยวข้องกับการเรียกใช้โปรแกรมในส่วน bootloader ผิดหรือสุ่มซึ่ง AFAIK สามารถแก้ไข FLASH ได้เท่านั้น หากปัญหาที่สองคือการปิดการใช้งานการดำเนินการ bootloader ผ่าน FUSE ควรแก้ไขปัญหา
TMa

ฉันจำได้ว่าอ่านมันใน errata อย่างน้อยหนึ่ง MEGA micro
ผู้ใช้

3

แรงดันไฟฟ้าต่ำกว่าเป็นสาเหตุที่เป็นไปได้มาก ตัวอย่างเช่นฉันเคยมีโครงการที่ระดับสีน้ำตาลออก 1.8 V มักทำให้เกิดความเสียหายและการคอร์รัปชั่นเหล่านี้ไม่สามารถทำซ้ำได้ด้วยระดับ 3.5V สีน้ำตาล

โปรดทราบว่ายิ่งโปรเซสเซอร์ทำงานได้เร็วขึ้นเท่าไรก็ยิ่งมีความไวต่อปัญหาแรงดันไฟต่ำกว่า หากการลดความถี่ซีพียูเป็นตัวเลือกที่มีให้คุณอาจเป็นเรื่องน่าลอง


1
ขอบคุณสำหรับคำตอบ. เราลงเอยด้วยการใช้เครื่องตรวจจับบราวน์เอาต์พลังงานต่ำพิเศษภายนอกและไม่มีปัญหาเรื่องการทุจริตตั้งแต่นั้นมา
Rev1.0

0

EMC จะเป็นศัตรูที่ยิ่งใหญ่ที่สุดของคุณหากไม่มีใครทำตามกฎหลักของการออกแบบ PCB นี่คือสิ่งที่สำคัญที่สุดจากประสบการณ์ของฉัน: - การปิดกั้นตัวเก็บประจุบน IC ใด ๆ โดยไม่คำนึงถึงสิ่งที่ผู้ผลิตบอกคุณในเอกสารข้อมูลเกี่ยวกับแผนงานเชิงอนุมานใส่อย่างน้อยหนึ่งระหว่าง 100pF - 1nF ในสายไฟฟ้าของ IC แต่ละตัว แต่ละชั้นของ PCB ให้มากที่สุด พื้นที่เหล่านั้นจะได้รับการติดต่อผ่านทุกชั้นผ่านจุดแวะบ่อยเท่าที่เป็นไปได้ตารางที่มีค่า 50mil นั้นคุ้มค่ามาก เชื่อมต่อพื้นที่เหล่านั้นกับสัญญาณภาคพื้นดิน - อย่าปล่อยทองแดงที่ไม่ได้เชื่อมต่อ (ลอยไม่มีการเชื่อมต่อสัญญาณ) ใน PCB ของคุณ มันทำหน้าที่เหมือนเสาอากาศและ devinitifely ทำให้การแผ่รังสีแม่เหล็กไฟฟ้าไปยังอุปกรณ์ - ทำให้มีร่องรอยสัญญาณนาฬิกาพกสั้นที่สุด

ค้นหารายละเอียดเพิ่มเติมตามคำขอเครื่องมือค้นหาเช่น "คำแนะนำสำหรับการออกแบบ pcb หลักฐาน emc"

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.