Loại bảo vệ ghi và lập trình · Transceiver và form factor · Transceiver quang và cáp · Tài liệu · CodingBox
CodingBox Tài liệu

Loại bảo vệ ghi và lập trình

Form factor cho biết các trường của module nằm ở đâu. Một trục thứ hai, độc lập, quyết định liệu bạn có thể thay đổi chúng hay không: cách module bảo vệ bộ nhớ của nó khỏi bị ghi. Các nhà sản xuất dùng năm cách tiếp cận, và mỗi cách cần một phương pháp lập trình khác nhau. Nhận ra đúng kiểu trước tiên giúp tiết kiệm hàng giờ thử ghi thất bại.

Năm kiểu bảo vệ

#KiểuCách nhận biếtCách lập trình
1Không bảo vệChấp nhận ghi ngay lập tứcGhi trực tiếp — nhưng ở xung nhịp chậm
2Chân bảo vệ ghi phần cứngChỉ đọc dù thử cách nào; mật khẩu cũng không giúp đượcĐiều khiển đường WP trong lúc ghi
3Mật khẩu (bộ điều khiển firmware)WRITE FAIL cho tới khi nhập mật khẩuNhập mật khẩu tại 0x7B trước
4Lưu tạm thời + lệnh lưuViệc ghi “thành công” nhưng bị hoàn tác sau khi tắt/bật nguồnGửi trình tự lưu của nhà sản xuất
5Kết hợpCần một trình tự I/O riêng của nhà sản xuất để mở khóaThuật toán lập trình của nhà sản xuất (script)

1. Không bảo vệ

EEPROM không có giới hạn ghi. Cái bẫy thực tế nằm ở tốc độ: lập trình ổn định thường cần xung nhịp bus hai dây khoảng 1 kHz — chậm hơn khoảng mười lần so với tốc độ đọc bình thường. Ở tốc độ chuẩn, việc ghi thỉnh thoảng thất bại và để lại các trang chỉ được ghi một phần. Một dấu hiệu liên quan: trên một số module đơn giản, chỉ A0h đọc sạch trong khi A2h trả về lỗi.

2. Chân bảo vệ ghi phần cứng

Chân WP của EEPROM được nối tới nguồn qua một điện trở, nên chip khởi động ở trạng thái khóa. Mở khóa nghĩa là kéo đường WP về đất qua một đường có trở kháng thấp hơn trong lúc ghi — điều mà chỉ một bo mạch lập trình có khả năng điều khiển đường đó mới làm được. Chỉ dùng phần mềm không thể vượt qua kiểu bảo vệ này: module vẫn ở trạng thái chỉ đọc qua mọi lần tắt/bật nguồn và mọi lần thử mật khẩu.

3. Bảo vệ bằng mật khẩu (bộ điều khiển firmware)

Theo SFF-8472, khối A2h dành riêng một vùng mật khẩu 7 byte bắt đầu từ offset 0x7B; phần lớn module dùng mật khẩu 4 byte. Một bộ điều khiển trong module so sánh những gì được ghi vào đó với giá trị đã lưu của nó, và chỉ khi đó mới mở khóa việc ghi EEPROM. Không có mật khẩu, mọi lần ghi đều trả về WRITE FAIL.

  • Nhập đúng mật khẩu, rồi ghi.
  • Nếu không biết mật khẩu: dò theo từ điển các mật khẩu nhà sản xuất đã biết (xem Mã hóa lại EEPROM để biết các giá trị thường gặp) hoặc liên hệ nhà sản xuất.
  • Các bộ điều khiển này nhạy với tốc độ xung nhịp và với khoảng cách giữa các khối — một lý do nữa để lập trình chậm.

4. Lưu tạm thời kèm lệnh lưu

Việc ghi rơi vào bộ nhớ dễ mất. Mọi thứ trông có vẻ ổn — cho tới khi module được tắt/bật nguồn và mã cũ quay trở lại. Firmware của nhà sản xuất cần một lệnh lưu tường minh (một chuỗi byte độc quyền) để chuyển ảnh tạm thời sang bộ nhớ vĩnh viễn. Không có tiêu chuẩn nào định nghĩa nó; trình tự của mỗi nhà sản xuất khác nhau và được ghi lại dưới dạng một script.

5. Bảo vệ kết hợp

Các module mới nhất chồng nhiều cơ chế lên nhau: WP phần cứng và mật khẩu và lệnh lưu và các điều kiện tiên quyết về vận hành — ví dụ module phải được đưa vào chế độ công suất thấp trước khi chấp nhận ghi. Đây là điều thường gặp ở các module theo những bản sửa đổi SFF-8472 gần đây, vốn cung cấp 256+ trang phía trên offset 0x80 của A2h, và ở các module CMIS. Việc lập trình cần thuật toán của nhà sản xuất, thường chỉ được chia sẻ với khách hàng mua số lượng lớn.

Cách xác định kiểu bảo vệ

  1. Thử một lần đọc thông thường: A2h có đọc sạch không? (Kiểu 1 thường thất bại ở đây.)
  2. Thử ghi một byte vào một trường không bảo vệ. Thành công ngay → kiểu 1. WRITE FAIL → kiểu 3 (hoặc 5). Thành công âm thầm nhưng bị hoàn tác sau khi tắt/bật nguồn → kiểu 4.
  3. Nhập các mật khẩu đã biết. Vẫn chỉ đọc → kiểu 2 (phần cứng) hoặc kiểu 5 (kết hợp).
  4. Kiểm tra form factor và bản sửa đổi đặc tả — các module CMIS và SFF-8472 bản sửa đổi muộn thường là kiểu 5.

Trong CodingBox

  • Cài đặt mật khẩu — địa chỉ bảng, địa chỉ mật khẩu (0x7B) và giá trị được đặt trong Bộ nhớ được bảo vệ ghi và mật khẩu; các mật khẩu đã biết được áp dụng tự động từ cơ sở dữ liệu.
  • Script — các script lập trình của CodingBox mang theo trình tự lưu của nhà sản xuất và thuật toán mở khóa cho kiểu 4 và 5.
  • Ghi từng byte và giảm tốc độ xung nhịp cho các module thất bại ở tốc độ chuẩn.
  • WP phần cứng được xử lý bởi bo mạch lập trình, không phải bằng phần mềm.
  • Mỗi lần đọc đều được lưu vào code database trước khi bạn ghi, nhờ đó một lần thử thất bại luôn có thể khôi phục được.

Các triệu chứng trên bàn thử — WRITE FAIL, một lần ghi bị hoàn tác, mật khẩu bị từ chối — và cách xử lý từng trường hợp: Lỗi đọc và ghi EEPROM.

Vì sao các kiểu này tồn tại — EEPROM rời so với bản đồ do MCU mô phỏng, lệnh lưu, bản sao phản ánh của firmware và chữ ký xác thực theo cách firmware triển khai chúng: Bộ điều khiển và firmware.


Nếu bạn phát hiện thông tin chưa chính xác hoặc lỗi trong bài viết này, hãy chọn đoạn liên quan và nhấn Ctrl+Enter để .