NXP i.MX8M纳米CPU提供了一组一次性可编程比特(eFuses),结构为15个银行。每个码组由四个32位的字组成。
内核配置
您可以通过内核配置选项管理OTP驱动程序支持:
NXP NVMEM片上OTP内存支持(
CONFIG_NVMEM_IMX_OCOTP
)
的内置选项已启用ConnectCore 8M Nano默认内核配置文件.
内核驱动程序
OTP内存驱动程序位于:
文件 | 描述 |
---|---|
i.MX 6/7/8片上OTP控制器支持 |
设备树绑定
i.MX8M Nano OTP内存驱动程序设备树绑定记录在文档/ devicetree /绑定/ nvmem / imx-ocotp.txt
.
Ocotp: ocotp-ctrl@30350000 {compatible = "fsl,imx8mq-ocotp", "fsl,imx7d-ocotp", "syscon";Reg = <0x30350000 0x10000>;clock = <&clk IMX8MN_CLK_OCOTP_ROOT>;*/ #address-cells = <1>;#size-cells = <1>;};
ConnectCore 8M Nano器件树集只读访问OTP位以防止电子引信的意外编程。
&ocotp{/*默认情况下,将OTP位设置为只读*/只读;};
OTP用户空间使用情况
OTP字可以通过sysfs at访问/ sys /汽车/ nvmem /设备/ imx-ocotp0 / nvmem
.
读取OTP位
转储所有OTP字的值。
#Hexdump -e ' '"%08_ax: " 4/4 "%08x " "\n"' /sys/bus/nvmem/devices/imx- ocopt0 /nvmem 00000000: feafa9eb 50d00200 24226998 00000000 0000000000 00000010: 20000800 00020000 0000007f 08000000 00000020: 20000000 00000000 00000000 00000030: 00000000 00000000 00000000 00000000 000090: 14100009 118e0b01 0007b848 00000000 000000a0: badabada badabada badabada badabada badabada badabada badabada badabada00000000 00000000 00000000 00000000 * 00000000 f0: badabada badabada badabada 00000000 00000100: 00000000 00000000 00000000 00000000 * 00000000: badabada badabada badabada badabada 00000140: 55002001 00028840 0000 0003 f000 eddc 00028840: 0000年a8c1302b ede8 a881300b 00025 c54 00025: 52801 e00 52801 00000000 00000000 00000000: 00000000 00000000 00000000 00000000 * 00000000 e0: 00000000 00000000 00000000 07 c31a01 00000000 f0: badabada badabada badabada badabada
下面的值显示badabada 对应于无法读取的OTP字,如加密密钥。 |
要转储某一个OTP字,不要使用- s
的参数。hexdump
命令。相反,使用dd
命令并将结果管道到hexdump
.要计算单词的偏移量,请使用以下公式:
\$"Offset" = ("Bank" * 4) + "Word"\$
例如,对于Bank 9 Word 1,偏移量为9 * 4 + 1 =37.
使用dd
块大小(bs)为4字节,计数为1个字,并跳过计算偏移量:
#Dd status=none if=/sys/bus/nvmem/devices/imx-ocotp0/nvmem of=/dev/stdout bs=4 count=1 skip=37 | hexdump -v -e '4/4 "%08x " "\n"' 118e0b01 . if=/sys/bus/nvmem/devices/imx-ocotp0/nvmem of=/dev/stdout bs= 1 count=1
写OTP位
OTP位只能被吹一次。给它们编程是一个不可逆的操作。 |
缺省情况下,OTP位访问配置为只读。要启用写权限,请在设备树中添加以下设备:
& octp {/delete-property/read-only;};
重新编译设备树并将其部署到您的设备。
OTP位访问是用32位字完成的。要将32位值写入特定字,请使用printf
并将输出管道传输到dd
:
#printf<值>| dd of=/sys/bus/nvmem/devices/imx-ocotp0/nvmem bs=4 count=1 seek=<抵消>conv = notrunc
地点:
<值>
要写入的32位值。以小端字节顺序指定值。b = 4
以4字节(一个完整的32位字)设置块大小。数= 1
设置以1(4字节)写入的块(字)。寻求=<抵消>
设置写入位置的偏移量(以字为单位)。conv = notrunc
避免截断输出。
要计算单词的偏移量,请使用以下公式:
\$"Offset" = ("Bank" * 4) + "Word"\$
例如,对于Bank 9 Word 1,偏移量为9 * 4 + 1 =37.
写下这个词0 x12345678
对于该偏移量,交换字节以小端字节形式将它们呈现给printf
命令:
#Printf '\x78\x56\x34\x12' | dd of=/sys/bus/nvmem/devices/imx-ocotp0/nvmem bs=4 count=1 seek=37 conv=notrunc