ประเภทของการป้องกันการเขียนและการโปรแกรม
ฟอร์มแฟกเตอร์บอกว่าฟิลด์ต่าง ๆ ของโมดูลอยู่ที่ไหน ส่วนอีกแกนหนึ่งที่เป็นอิสระจากกันจะตัดสินว่าเปลี่ยนแปลงฟิลด์เหล่านั้นได้หรือไม่ นั่นคือวิธีที่โมดูลป้องกันหน่วยความจำของตัวเองจากการเขียน ผู้ผลิตใช้แนวทางอยู่ห้าแบบ และแต่ละแบบต้องใช้วิธีโปรแกรมที่ต่างกัน การจดจำชนิดให้ได้ก่อนช่วยประหยัดเวลาหลายชั่วโมงจากความพยายามเขียนที่ล้มเหลว
ห้าชนิดของการป้องกัน
| # | ชนิด | วิธีสังเกต | วิธีโปรแกรม |
|---|---|---|---|
| 1 | ไม่มีการป้องกัน | ยอมรับการเขียนทันที | เขียนโดยตรง — แต่ต้องใช้สัญญาณนาฬิกาความเร็วต่ำ |
| 2 | พินป้องกันการเขียนทางฮาร์ดแวร์ | อ่านได้อย่างเดียวไม่ว่าจะลองวิธีใด รหัสผ่านก็ช่วยไม่ได้ | ควบคุมสาย WP ระหว่างการเขียน |
| 3 | รหัสผ่าน (คอนโทรลเลอร์เฟิร์มแวร์) | WRITE FAIL จนกว่าจะป้อนรหัสผ่าน | ป้อนรหัสผ่านที่ 0x7B ก่อน |
| 4 | หน่วยเก็บชั่วคราว + คำสั่งบันทึก | การเขียน “สำเร็จ” แต่ย้อนกลับหลังตัดต่อไฟใหม่ | ส่งลำดับคำสั่งบันทึกของผู้ผลิต |
| 5 | แบบผสม | ต้องใช้ลำดับ I/O เฉพาะของผู้ผลิตเพื่อปลดล็อก | อัลกอริทึมการโปรแกรมของผู้ผลิต (สคริปต์) |
1. ไม่มีการป้องกัน
EEPROM ไม่มีข้อจำกัดในการเขียน ปัญหาในทางปฏิบัติคือจังหวะเวลา การโปรแกรมให้เชื่อถือได้โดยทั่วไปต้องใช้สัญญาณนาฬิกาสองสายที่ประมาณ 1 kHz ซึ่งช้ากว่าความเร็วอ่านปกติราวสิบเท่า ที่ความเร็วมาตรฐาน การเขียนจะล้มเหลวเป็นระยะและทิ้งเพจที่เขียนไม่ครบไว้ สัญญาณบ่งชี้ที่เกี่ยวข้องกัน คือในโมดูลง่าย ๆ บางตัวมีเพียง A0h เท่านั้นที่อ่านได้สะอาด ขณะที่ A2h คืนค่าข้อผิดพลาด
2. พินป้องกันการเขียนทางฮาร์ดแวร์
พิน WP ของ EEPROM ต่อเข้ากับไฟเลี้ยงผ่านตัวต้านทาน ทำให้ชิปล็อกอยู่ตั้งแต่เปิดไฟ การปลดล็อกหมายถึงการดึงสาย WP ลงสู่กราวด์ผ่านเส้นทางที่มีอิมพีแดนซ์ต่ำกว่าในระหว่างที่กำลังเขียนอยู่ ซึ่งมีแต่บอร์ดโปรแกรมที่ควบคุมสายนั้นได้เท่านั้นที่ทำได้ ซอฟต์แวร์เพียงอย่างเดียวผ่านชนิดนี้ไปไม่ได้ โมดูลจะยังคงอ่านได้อย่างเดียวไม่ว่าจะตัดต่อไฟใหม่หรือลองป้อนรหัสผ่านกี่ครั้งก็ตาม
3. ป้องกันด้วยรหัสผ่าน (คอนโทรลเลอร์เฟิร์มแวร์)
ตาม SFF-8472 บล็อก A2h กันพื้นที่รหัสผ่าน 7 ไบต์ไว้เริ่มที่ออฟเซต 0x7B โมดูลส่วนใหญ่ใช้รหัสผ่านขนาด 4 ไบต์ คอนโทรลเลอร์ในโมดูลจะเทียบค่าที่เขียนไว้ตรงนั้นกับค่าที่เก็บไว้ และปลดล็อกการเขียน EEPROM ก็ต่อเมื่อค่าตรงกันเท่านั้น หากไม่มีรหัสผ่าน การเขียนทุกครั้งจะคืนค่า WRITE FAIL
- ป้อนรหัสผ่านที่ถูกต้อง แล้วจึงเขียน
- หากไม่ทราบรหัสผ่าน: ค้นหาแบบพจนานุกรม จากรหัสผ่านของผู้ผลิตที่ทราบกัน (ดูค่าที่พบบ่อยในการเขียนโค้ด EEPROM ใหม่) หรือติดต่อผู้ผลิต
- คอนโทรลเลอร์เหล่านี้ไวต่อความเร็วสัญญาณนาฬิกาและช่วงห่างระหว่างบล็อก ซึ่งเป็นอีกเหตุผลหนึ่งที่ต้องโปรแกรมอย่างช้า ๆ
4. หน่วยเก็บชั่วคราวพร้อมคำสั่งบันทึก
การเขียนจะไปตกอยู่ในหน่วยความจำแบบลบเลือนได้ ทุกอย่างดูเหมือนปกติดี จนกระทั่งโมดูลถูกตัดต่อไฟใหม่แล้วโค้ดเก่าก็กลับมา เฟิร์มแวร์ของผู้ผลิตต้องใช้คำสั่งบันทึกที่ชัดเจน (ลำดับไบต์เฉพาะของผู้ผลิต) เพื่อยืนยันอิมเมจชั่วคราวลงหน่วยเก็บถาวร ไม่มีมาตรฐานใดกำหนดเรื่องนี้ไว้ ลำดับคำสั่งของแต่ละผู้ผลิตแตกต่างกัน และถูกบันทึกไว้เป็นสคริปต์
5. การป้องกันแบบผสม
โมดูลรุ่นใหม่ล่าสุดซ้อนกลไกหลายอย่างเข้าด้วยกัน ได้แก่ WP ทางฮาร์ดแวร์ และรหัสผ่าน และคำสั่งบันทึก และเงื่อนไขการทำงานล่วงหน้า เช่น โมดูลต้องถูกตั้งให้อยู่ในโหมดกำลังไฟต่ำก่อนจึงจะยอมรับการเขียน ลักษณะนี้พบทั่วไปในโมดูลตามฉบับปรับปรุงล่าสุดของ SFF-8472 ที่เปิดให้ใช้เพจมากกว่า 256 เพจเหนือออฟเซต 0x80 ของ A2h และในโมดูล CMIS การโปรแกรมต้องใช้อัลกอริทึมของผู้ผลิต ซึ่งมักเผยแพร่ให้เฉพาะลูกค้าที่สั่งซื้อจำนวนมาก
วิธีระบุชนิด
- ลองอ่านแบบธรรมดาก่อน: A2h อ่านได้สะอาดหรือไม่ (ชนิด 1 มักล้มเหลวตรงนี้)
- ลองเขียนหนึ่งไบต์ลงในฟิลด์ที่ไม่มีการป้องกัน สำเร็จทันที → ชนิด 1
WRITE FAIL→ ชนิด 3 (หรือ 5) สำเร็จแบบเงียบ ๆ แต่ย้อนกลับหลังตัดต่อไฟใหม่ → ชนิด 4 - ป้อนรหัสผ่านที่ทราบ ยังคงอ่านได้อย่างเดียว → ชนิด 2 (ฮาร์ดแวร์) หรือชนิด 5 (แบบผสม)
- ตรวจสอบฟอร์มแฟกเตอร์และฉบับปรับปรุงของสเปก — โมดูล CMIS และ SFF-8472 ฉบับปรับปรุงหลัง ๆ มักเป็นชนิด 5
ใน CodingBox
- การตั้งค่ารหัสผ่าน — แอดเดรสตาราง, แอดเดรสรหัสผ่าน (0x7B) และค่ารหัสผ่าน ถูกตั้งค่าไว้ในหน่วยความจำที่มีการป้องกันและรหัสผ่าน รหัสผ่านที่ทราบแล้วจะถูกใช้จากฐานข้อมูลโดยอัตโนมัติ
- สคริปต์ — สคริปต์การโปรแกรมของ CodingBox บรรจุลำดับคำสั่งบันทึกของผู้ผลิตและอัลกอริทึมปลดล็อกสำหรับชนิด 4 และ 5
- การเขียนทีละไบต์และสัญญาณนาฬิกาความเร็วต่ำ สำหรับโมดูลที่ล้มเหลวที่ความเร็วมาตรฐาน
- WP ทางฮาร์ดแวร์ จัดการโดยบอร์ดโปรแกรม ไม่ใช่โดยซอฟต์แวร์
- ทุกการอ่านจะถูกบันทึกลงcode databaseก่อนที่คุณจะเขียน ทำให้ความพยายามที่ล้มเหลวกู้คืนได้เสมอ
อาการที่พบบนโต๊ะทดสอบ —
WRITE FAIL, การเขียนที่ย้อนกลับ, รหัสผ่านถูกปฏิเสธ — และวิธีรับมือแต่ละกรณี: ข้อผิดพลาดในการอ่านและเขียน EEPROM
เหตุผลที่ชนิดเหล่านี้มีอยู่ — EEPROM แยกชิ้นเทียบกับแผนผังที่จำลองโดย MCU, คำสั่งบันทึก, มิเรอร์ของเฟิร์มแวร์ และลายเซ็นตามที่เฟิร์มแวร์นำไปใช้งาน: คอนโทรลเลอร์และเฟิร์มแวร์