OTP 使用指南

[English]

概述

OTP(One-Time Programmable Memory,一次性可编程存储器)是一种只能写入一次、但可多次读取的非易失性存储器,广泛用于存储安全配置、唯一标识、工厂校准参数等不可更改的数据。

典型特性

特性

描述

写入一次

每个位在写入后即被永久锁定,不可擦除或重写

掉电不丢失

属于非易失性存储器,断电后仍可保存数据

按位可编程

支持按位写入,部分芯片支持逐字节编程

高安全性

适用于存储加密密钥、芯片ID、MAC地址等敏感信息

访问受控

可设置只读区域、写保护或访问权限限制

OTP 特性

BK7258芯片中的OTP包含两部分,OTP1和OTP2区域,OTP1部分仅供公司内部使用,内容包括Device ID、MAC address、Public key以及其他保留区域信息。 仅OTP2中的区域提供给客户使用,且操作存储地址区间是[0x4B010600—-0x4B010C00],大小是1.5k字节空间。

OTP2的使用布局

8

OTP2 Side

OTP2:可读可编程的OTP2区域,0x000~0x2FF被分为767个小分区。其存储地址区间是[0x4B010000—-0x4B010C00]每个分区都可以通过改变LOCK OTP2 CELL来更改权限:读写->只读->不可访问。

重要

其中,前1.5k字节大小空间已被BEKEN内部使用,其存储地址区间是[0x4B010000—-0x4B010600],客户不予使用; 客户可操作的存储地址区间是[0x4B010600—-0x4B010C00],大小是1.5k字节空间。

使用注意事项

  • 写入后不可更改,请在写入前仔细验证数据正确性

  • 建议先使用“仿真烧写模式”进行软件验证

  • 写入操作通常需要一定延时(如5~10ms烧录时间)

OTP的驱动使用介绍

OTP2中添加自定义分区信息的使用介绍

  • 1)若需要在otp2中增加特定大小分区使用,以BK7258为例,只需要在 ap/middleware/boards/bk7258/csv/otp2.csv 中添加[id,name,size,offset,end,privilege,security]所对应内容即可,参考见文末;

  • 2)SDK里的工具会在编译的时候自动生成相关头文件,无需手动修改头文件中的内容,生成后的头文件内容如下。位于../_build/_otp.c

8
  • 3)配置好上述的配置之后,可以使用cli命令进行测试, 相关的测试代码路径是: ap/components/bk_cli/cli_otp.c (例如 测试命令是otp_ahb read item size)

备注

操作写otp2某个区域之前,最好将该区域读出来确认一下,确认该otp区域是否已经被使用过。(otp原始值是0)

结构体数组otp_ahb_map配置介绍

  • 1)结构体数组otp_ahb_map的结构体如下:具体路径是 ap/middleware/driver/otp/otp_driver.h

8

备注

  • name:访问区域的item_id,后续操作该区域可根据该item_id进行访问d_size的大小,即所需要分配的字节大小空间;

  • allocated_size:分配的字节大小空间

  • offset:相对基地址的偏移量

  • privilege:设定访问区域的权限

  • 2)otp2_id_t中存放的是name字段;工具自动生成的路径是 ../_build/_otp.h

8

备注

  • 以name=OTP_CUSTOMER_KEY2举例介绍如何配置otp2

  • 首先,在opt2.csv文件中新增id为6,按照顺序依次增加;增加自行定义的name字段,如OTP_CUSTOMER_KEY2;

  • 其次,需要配置size的大小,即所需要分配的字节大小空间。若大小为256字节,则size为256;(十进制大小)

  • offset大小等于(前一个name字段的end) (十六进制)

  • 权限为OTP_READ_WRITE,安全为FALSE;

8