เคล็ดลับชิป STM32L4R5 ลงในการทำลายข้อมูลการตรวจสอบข้อผิดพลาดสำหรับที่อยู่แฟลชบางอย่าง
เมื่ออ่านจากที่อยู่แฟลชที่เสียหายบนอุปกรณ์ STM32 พร้อมแฟลช ECC คุณจะได้รับการตรวจจับ ECC ที่ไม่ต้องใช้งาน การจัดการการขัดจังหวะนี้อาจมีความสำคัญสำหรับการใช้งานบางอย่างเช่นสิ่งที่อาจสัมผัสกับรังสีเช่นดาวเทียม อย่างไรก็ตามการทดสอบรหัสการจัดการของคุณบนฮาร์ดแวร์นั้นยากเนื่องจากคุณไม่สามารถบอกให้ชิปได้โดยตรงเพื่อสร้างรายการแฟลชที่ไม่ถูกต้องโดยเจตนา
นั่นเป็นเหตุผลที่เครื่องมือนี้มีวิธีการทำอย่างนั้น: ทำลายข้อมูลการแก้ไขข้อผิดพลาดโดยเฉพาะตามที่อยู่เฉพาะ มันทำได้โดยการค้นหาเวลาโดยอัตโนมัติซึ่งการรีเซ็ตรบกวนกระบวนการเขียนแฟลชโดยอัตโนมัติ
ปรับที่อยู่ที่ด้านบนของไฟล์ main.rs เสียบขั้วต่อดีบั๊กของคุณสำหรับชิป STM32L4R5 จากนั้นเรียก make flash
จากนั้นคุณควรเห็น LED สีน้ำเงินของชิปกระพริบในช่วงเวลาที่สั้นลง นั่นคือการค้นหาแบบไบนารีพยายามที่จะต้องรอให้แฟลชทุจริตเกิดขึ้นมากแค่ไหน แสงจะกลายเป็นไม่กี่วินาที (เพราะเวลาสั้นลงจน LED แทบจะไม่มีโอกาสที่จะเปิด) และหลังจากนั้นทั้ง LED สีเขียวหรือสีแดงจะเกิดขึ้น กรีนหมายความว่าที่อยู่ที่แน่นอนถูกตีสีแดงหมายความว่ามันพลาด ในกรณีของกรีนตอนนี้คุณสามารถแฟลชรหัสที่คุณต้องการทดสอบกับการขัดจังหวะ ECC (ตรวจสอบให้แน่ใจว่าจะไม่เขียนทับหน้าซึ่งตอนนี้มีข้อผิดพลาด - การลบมันจะนำไปสู่ข้อผิดพลาดที่หายไป) และในกรณีที่ LED สีแดงติดขึ้นคุณต้องกดปุ่มรีเซ็ตอีกครั้ง
หาก LED สีเขียวเข้ามาโปรแกรมจะได้รับจุดที่ถูกต้อง ในการตรวจสอบที่อยู่ที่แน่นอนคุณสามารถแนบผ่าน GDB จากนั้นอ่านเนื้อหาของการลงทะเบียน FLASH_ECCR :
(gdb) x/wx 0x40022018
0x40022018 : 0x80006000 การทุจริตทำงานหากจดหมายหกเหลี่ยมตัวแรกคือ 8 หรือ 2 20 บิตสุดท้าย (หรือ 5 hex ตัวอักษร) เป็นที่อยู่หน่วยความจำที่เสียหาย ในกรณีนี้ 0x6000 ได้รับการทุจริตและได้รับผลกระทบอย่างแน่นอน
ในเปลือกเดียววิ่ง
st-utilจากนั้นแนบโดยใช้ GDB:
arm-none-eabi-gdb -ex " target extended-remote :4242 " target/thumbv7em-none-eabi/release/stm32-flash-corruptorใช้คำสั่งนี้เพื่อแสดงเนื้อหาการลงทะเบียนสำรอง:
x /32w 0x40002850 ดูความคิดเห็นใน main.rs สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการลงทะเบียนแต่ละครั้ง