SID - 唯一码模块
模块介绍
SID 模块主要用于烧写 SoC 的 efuse。efuse 包括 ChipID、HASH 码等相关信息。该模块特点如下:
- efuse 一根熔丝只能被编程一次,并且具有一次可编程存储器的特点。
- 包含 SID_SRAM,SID_SRAM 在每次芯片上电时会备份 efuse 信息。
- SID 模块寄存器是非安全的;efuse 有安全非安全区分。
- 提供芯片唯一ID ChipID,出厂前会烧录好
- (secure enable bit )作为 efuse 中安全开启开关,使能后,芯片会变成安全芯片
模块配置
Kernel Setup --->
Drivers Setup --->
SoC HAL Drivers --->
SID devices --->
[*] enable efuse driver
源码结构
SID 驱动位于 hal/source/efuse/
目录下。
hal
├── source
│ ├── efuse
│ │ ├── efuse.c # SID底层驱动文件
│ │ ├── efuse.h # SID底层驱动头文件
│ │ ├── hal_efuse.c # SID公用操作接口函数文件
│ │ ├── Kconfig
│ │ ├── Makefile
│ │ ├── platform
│ │ │ ├── efuse_sun20iw2.h # 具体的平台配置头文件
│ │ └── platform_efuse.h # 平台配置头文件
└── include
└── hal
└── sunxi_hal_efuse.h # SID公用操作接口函数头文件
模块接口说明
头文件
#include <sunxi_hal_efuse.h>
efuse 写接口
将指定名字的数据写入 efuse
int hal_efuse_write(char key_name, unsigned char key_data, size_t key_bit_len)
参数:
- key_name: efuse 区域名字
- key_data: 待写入数据
- key_bit_len: 待写入数据 bit 数
返回值:
- 0:成功
- 负数:失败
efuse 读接口
读 efuse 中指定名字区域的数据
int hal_efuse_read(char key_name, unsigned char key_data, size_t key_bit_len)
参数:
- key_name: efuse 区域名字
- key_data: 待读取数据
- key_bit_len: 待读取数据 bit 数
返回值:
- 0:成功
- 负数:失败
efuse 读扩展接口
读 efuse 中指定名字区域的数据
int hal_efuse_read_ext(uint32_t start_bit, uint32_t bit_num, uint8_t *data)
参数:
- start_bit: efuse 区域名字
- bit_num: 待读取数据
- data: 存放待读取数据
返回值:
- 0:成功
- 负数:失败
开启 secure enable bit 接口
开启 secure enable bit
int hal_efuse_set_security_mode(void)
参数:
- 无
返回值:
- 0:成功
- 负数:失败
开启 efuse 中 secure enable bit 之后,芯片会变成安全芯片,此过程不可逆,开启时请额外注意。
读取 secure enable bit 状态接口
读取 secure enable bit 状态
int hal_efuse_get_security_mode(void)
参数:
- 无
返回值:
- 0:没有烧写
- 1:烧写了