6 一次性可编程存储器(eFuse)
6.1 功能概述
eFuse是一种片内一次性可编程存储器,可以在断电后保持数据,并且编程后无法被再次修改。 ING916系列提供128bit eFuse,支持按bit编程或者按Word编程,bit的默认值是0,通过编程可以写成1。
6.2 使用说明
6.2.1 模块初始化
void setup_peripherals_efuse_module(void)
{
// 打开clock,并且reset模块
( (1 << SYSCTRL_ITEM_APB_EFUSE));
SYSCTRL_ClearClkGateMulti(SYSCTRL_ITEM_APB_EFUSE);
SYSCTRL_ResetBlock(SYSCTRL_ITEM_APB_EFUSE);
SYSCTRL_ReleaseBlock}
6.2.2 按bit编程
void peripherals_efuse_write_bit(void)
{
// 提供需要编程的bit位置,0到127之间
(APB_EFUSE, EFUSE_UNLOCK_FLAG);
EFUSE_UnLock//pos is bit position from 0 to 127
(APB_EFUSE, pos);
EFUSE_WriteEfuseDataBitToOne// 等待结束
while(1 == EFUSE_GetStatusBusy(EFUSE_BASE));
(EFUSE_BASE);
EFUSE_Lock
//写操作完成
//如果要读取,需要reset模块
(SYSCTRL_ITEM_APB_EFUSE);
SYSCTRL_ResetBlock(SYSCTRL_ITEM_APB_EFUSE);
SYSCTRL_ReleaseBlock
//设置读取flag
(APB_EFUSE);
EFUSE_SetRdFlag//等待数据读取标志
while(!EFUSE_GetDataValidFlag(APB_EFUSE));
//通过EFUSE_GetEfuseData()读取数据
}
6.2.3 按word编程
void peripherals_efuse_write_word(void)
{
// 提供需要编程的word位置,0到3之间,每个word 32bit,一共128bit
// EFUSE_PROGRAMWORDCNT_0代表word 0
// data是要写入的32bit数据
(APB_EFUSE, EFUSE_PROGRAMWORDCNT_0, data);
EFUSE_WriteEfuseDataWord
//写操作完成
//如果要读取,需要reset模块
(SYSCTRL_ITEM_APB_EFUSE);
SYSCTRL_ResetBlock(SYSCTRL_ITEM_APB_EFUSE);
SYSCTRL_ReleaseBlock
//设置读取flag
(APB_EFUSE);
EFUSE_SetRdFlag//等待数据读取标志
while(!EFUSE_GetDataValidFlag(APB_EFUSE));
//通过EFUSE_GetEfuseData()读取数据
}