RT600 BootROM RM解析 (5)
RT600 RM CH41:RT6xx 非安全BootROM (5)
OTP 驱动的 API 解析…
也涉及到ROM API的大概。
41.9 OTP Driver APIs
41.9.1 How to read this section
This ROM based OTP Driver APIs are available on all parts.
41.9.2 功能
- 用于对 OTP 块进行word 编程 / 读取的 API
- 用于计算和校验 OTP CRC 校验和的 API
41.9.3 概述
BootROM包含一组 OTP API,用于简化开发或生产周期中的 OTP 编程。
41.9.3.1 ROM API 布局

图 231 展示了 ROM API 布局的详细信息。
41.9.3.2 OTP API 位置
OTP API 位置的详细信息见图 231。
注意:执行任何 OTP 功能时,若 LDO_ENABLE
外部接地或接高电平,VDDCORE
必须设置为 0.9V 或更高。
41.9.4 API 说明
OTP API 提供对 OTP 块进行编程、读取、重新加载影子寄存器的功能,还支持计算和验证指定 OTP 区域的 CRC 校验和。
表 1073. OTP API 调用
函数原型 | API 说明 | 章节 |
---|---|---|
status_t otp_init (uint32_t src_clk_freq); |
基于源时钟频率初始化 OTP 块 | 41.9.4.1 |
status_t otp_deinit (void); |
反初始化 OTP 块 | 41.9.4.2 |
status_t otp_fuse_read (uint32_t addr, uint32_t *data); |
从指定的 OTP 字索引读取 OTP 熔丝值 | 41.9.4.3 |
status_t opt_fuse_program (uint32_t addr, uint32_t data, bool lock); |
向指定的 OTP 字索引写入数据,若 lock 参数为 true 则锁定该位置 | 41.9.4.4 |
status_t otp_crc_calc (uint32_t *src, uint32_t numberOfWords, uint32_t *crcChecksum); |
基于指定的 OTP 区域计算 CRC 校验和 | 41.9.4.5 |
status_t otp_shadow_register_reload (void); |
从 OTP 熔丝块重新加载所有影子寄存器 | 41.9.4.6 |
status_t otp_crc_check (uint32_t start_addr, uint32_t end_addr, uint32_t crc_addr); |
基于提供的 OTP 熔丝区域执行 CRC 校验 | 41.9.4.7 |
41.9.4.1 otp_init
该例程根据指定的源时钟频率配置 OTP 控制器。
表 1074. otp_init
例程 | otp_init |
---|---|
原型 | status_t otp_init (uint32_t src_clk_freq ); |
输入参数 | 参数 0:目标源时钟频率 |
结果 | 错误码:0 = 无错误。参见表 1104 “Flash API 返回码和错误码”。 |
说明 | 基于 OTP 控制器的源时钟频率配置 OTP 控制器 |
41.9.4.1.1 参数 0:目标源时钟频率
该频率是 CPU 访问 OTP 控制器时使用的时钟速率。
41.9.4.1.2 错误或返回码
表 1075. 错误或返回码
返回码 | 错误码 | 说明 |
---|---|---|
0 | kStatus_Success | 操作成功 |
41.9.4.2 otp_deinit
该例程关闭 OTP 控制器。
表 1076. otp_deinit
例程 | otp_deinit |
---|---|
原型 | status_t otp_deinit (void); |
输入参数 | 无 |
结果 | 错误码:0 = 无错误。参见表 1104 “Flash API 返回码和错误码”。 |
说明 | 关闭 OTP 控制器 |
41.9.4.3 otp_fuse_read
表 1078. otp_fuse_read
例程 | otp_fuse_read |
---|---|
原型 | status_t otp_fuse_read (uint32_t addr, uint32_t *data); |
输入参数 | 参数 0:OTP 字索引 参数 1:用于存储 OTP 控制器返回值的数据缓冲区 |
结果 | 错误码:0 = 无错误。参见表 1104 “Flash API 返回码和错误码”。 |
说明 | 从指定的 OTP 字索引读取熔丝值 |
41.9.4.3.1 参数 0:OTP 字索引
该参数指定要读出的 OTP 熔丝字。
41.9.4.3.2 参数 1:数据缓冲区
若 API 调用成功,该参数提供的地址将存储 OTP 控制器的返回值。
41.9.4.3.3 错误或返回码
表 1079. 错误或返回码
返回码 | 错误码 | 说明 |
---|---|---|
0 | kStatus_Success | 操作成功 |
4 | kStatus_InvalidArgument | 参数 1 无效 |
21001 | kStatus_OTP_InvalidAddress | OTP 字索引无效 |
21004 | kSatus_OTP_Error | OTP 操作期间发生错误 |
21005 | kStatus_OTP_EccCheckFail | 操作期间 OTP ECC 校验失败 |
21006 | kStatus_OTP_Locked | OTP 字已锁定 |
41.9.4.4 otp_fuse_program
表 1080. otp_fuse_program
例程 | otp_fuse_program |
---|---|
原型 | status_t opt_fuse_program (uint32_t addr, uint32_t data, bool lock); |
输入参数 | 参数 0:OTP 字索引 参数 1:要编程的数据 参数 2:锁定标志 |
结果 | 错误码:0 = 无错误。参见表 1104 “Flash API 返回码和错误码”。 |
说明 | 向指定的 OTP 字索引写入数据,并根据请求锁定该位置 |
41.9.4.4.1 参数 0:OTP 字索引
该参数指定要编程的 OTP 字索引。
41.9.4.4.2 参数 1:要编程的数据
该参数指定要写入的数据。
41.9.4.4.3 参数 2:锁定标志
该参数决定编程后是否锁定 OTP 字索引。有效值:true(1)或 false(0)。
41.9.4.4.4 错误或返回码
表 1081. 错误或返回码
返回码 | 错误码 | 说明 |
---|---|---|
0 | kStatus_Success | 操作成功 |
4 | kStatus_InvalidArgument | 参数 1 无效 |
21001 | kStatus_OTP_InvalidAddress | OTP 地址无效 |
21002 | kStatus_OTP_ProgramFail | OTP 编程失败 |
21004 | kSatus_OTP_Error | OTP 操作期间发生错误 |
21005 | kStatus_OTP_EccCheckFail | 操作期间 OTP ECC 校验失败 |
21006 | kStatus_OTP_Locked | OTP 字已锁定 |
41.9.4.5 otp_crc_calc
表 1082. otp_crc_calc
例程 | otp_crc_calc |
---|---|
原型 | status_t otp_crc_calc(uint32_t *src, uint32_t numberOfWords, uint32_t *crcChecksum); |
输入参数 | 参数 0:存储源数据的缓冲区 参数 1:用于 CRC 计算的字数 参数 2:存储校验和结果的缓冲区 |
结果 | 错误码:0 = 无错误。参见表 1104 “Flash API 返回码和错误码”。 |
说明 | 计算指定缓冲区的校验和,并将数据存储到输出缓冲区 |
41.9.4.5.1 参数 0:存储源数据的缓冲区
该参数提供用于 CRC 校验和计算的源数据缓冲区,指针地址必须 32 位对齐。
41.9.4.5.2 参数 1:用于 CRC 计算的字数
该参数指定 CRC 计算的字数。
41.9.4.5.3 参数 2:存储校验和结果的缓冲区
若操作成功,该参数指向的缓冲区将存储 CRC 结果。
41.9.4.5.4 错误或返回码
表 1083. 错误或返回码
返回码 | 错误码 | 说明 |
---|---|---|
0 | kStatus_Success | 操作成功 |
4 | kStatus_InvalidArgument | 参数 1 或 3 无效 |
41.9.4.6 otp_shadow_register_reload
表 1084. otp_shadow_register_reload
例程 | otp_shadow_register_reload |
---|---|
原型 | status_t otp_shadow_register_reload(void); |
输入参数 | 无 |
结果 | 错误码:0 = 无错误。参见表 1104 “Flash API 返回码和错误码”。 |
说明 | 从 OTP 熔丝块重新加载所有影子寄存器 |
41.9.4.6.1 错误或返回码
表 1085. 错误或返回码
返回码 | 错误码 | 说明 |
---|---|---|
0 | kStatus_Success | 操作成功 |
21004 | kSatus_OTP_Error | OTP 操作期间发生错误 |
21005 | kStatus_OTP_EccCheckPass | 操作期间 OTP ECC 校验失败 |
41.9.4.7 otp_crc_check
表 1086. otp_crc_check
例程 | otp_crc_check |
---|---|
原型 | status_t otp_crc_check(uint32_t start_addr, uint32_t end_addr, uint32_t crc_addr); |
输入参数 | 参数 0:CRC 校验的起始 OTP 字索引 参数 1:CRC 校验的结束 OTP 字索引 参数 2:存储预期校验和的 OTP 字 |
结果 | 错误码:0 = 无错误。参见表 1104 “Flash API 返回码和错误码”。 |
说明 | 计算指定 OTP 范围内的 CRC 校验和,并与存储预期校验和的 OTP 字进行比较 |
41.9.4.7.1 参数 0:CRC 校验的起始 OTP 字索引
该参数指定 CRC 校验的起始 OTP 字索引。
41.9.4.7.2 参数 1:CRC 校验的结束 OTP 字索引
该参数指定 CRC 校验的结束 OTP 字索引。
41.9.4.7.3 参数 2:存储预期校验和的 OTP 字
该参数指向存储预期 CRC 校验和的 OTP 字,由于编程时已锁定,可能无法通过 otp_fuse_read
API 访问。
41.9.4.7.4 错误或返回码
表 1087. 错误或返回码
返回码 | 错误码 | 说明 |
---|---|---|
0 | kStatus_Success | 操作成功 |
21001 | kStatus_OTP_InvalidAddress | OTP 地址无效 |
21004 | kSatus_OTP_Error | OTP 操作期间发生错误 |
21008 | kStatus_OTP_CrcCheckPass | OTP CRC 校验通过 |
RT600 BootROM RM解析 (5)
https://dustofstars.github.io/NXP/RT600/BootROM/rt600-bootrom-rm解析-5/