Might be useful to anyone interested in exploring OTP on the RP235X.
Code:
from machine import mem32def OTP(row) : return mem32[0x40134000 + row * 4]def ECC(row) : return OTP(row) >> 16def ROW(row) : return OTP(row) & 0xFFFFdef ShowOtp(): for row in range(0, 4096): if row % 64 == 0: page = row // 64 if page == 0 : print("Chip Info") elif page in [1, 2] : print("Boot Config and Boot Key Fingerprints") elif page == 61 : print("Access Keys") elif page in [62, 63] : print("Lock Words") if row % 4 == 0: s = "Page {:>2}, Row {:>2}, {:>4} 0x{:04X} :".format( row // 64, row % 64, row, row) if ECC(row) > 0xFF : s += " <ERROR>" else : s += " {:02X}:{:04X}".format(ECC(row), ROW(row)) if row % 4 == 3 : print(s) if row % 64 == 63 : print()ShowOtp()print("Serial Number : {:04X}{:04X}{:04X}{:04X}".format( ROW(0x003), ROW(0x002), ROW(0x001), ROW(0x000)))print("Number of GPIO : {}".format(ROW(0x018)))
Code:
Chip InfoPage 0, Row 0, 0 0x0000 : 18:9A95 19:1582 31:D24F 02:C35DPage 0, Row 4, 4 0x0004 : 1A:4548 3E:754D 28:2811 36:D59DPage 0, Row 8, 8 0x0008 : 14:FD3E 02:C6C2 2D:0201 1A:AF9EPage 0, Row 12, 12 0x000C : 00:0000 00:0000 00:0000 00:0000Page 0, Row 16, 16 0x0010 : 28:2AF7 3A:68DA 00:0000 00:0000...Page 63, Row 56, 4088 0x0FF8 : 00:0000 00:0000 00:0000 00:0000Page 63, Row 60, 4092 0x0FFC : 00:0000 04:0404 00:0000 14:1414Serial Number : C35DD24F15829A95Number of GPIO : 48
Statistics: Posted by hippy — Mon Nov 11, 2024 9:53 pm — Replies 0 — Views 45