芯片唯一ID:
Fuse Shadow Memory Footprint:
Read the fuse shadow register函数原型:
/* Read the fuse shadow register. */
uint32_t OCOTP_ReadFuseShadowRegister(OCOTP_Type *base, uint32_t address)
{
assert(NULL != base);
/* Make sure the OCOTP is ready, Overlapped accesses are not supported by the controller. */
while (OCOTP_CheckBusyStatus(base))
{
}
/* If ERROR bit was set, clear access error status bit. */
if (OCOTP_CheckErrorStatus(base))
{
OCOTP_ClearErrorStatus(base);
}
/* Set the read timing. */
OCOTP_SetReadTiming(base, s_timingConfig);
/* Wait for busy bit is cleared. */
while (OCOTP_CheckBusyStatus(base))
{
}
/* Clear access error status bit. */
if (OCOTP_CheckErrorStatus(base))
{
OCOTP_ClearErrorStatus(base);
}
/* Write requested address to register. */
base->CTRL_CLR = OCOTP_CTRL_CLR_ADDR_MASK;
base->CTRL_SET = OCOTP_CTRL_SET_ADDR(address);
/* Set OCOTP auto read enable. */
base->READ_CTRL = OCOTP_READ_CTRL_READ_FUSE_MASK;
/* Wait for busy bit is cleared, and no error occurred on controller. */
while (OCOTP_CheckBusyStatus(base))
{
}
/* If ERROR bit was set, this may be mean that the accsee to the register was wrong. */
if (OCOTP_CheckErrorStatus(base))
{
/* Clear access error status bit. */
OCOTP_ClearErrorStatus(base);
}
/* Read the fuse data. */
return (base->READ_FUSE_DATA);
}
读取唯一ID代码:
uint32_t i;
uint32_t fuse_shadow_memory[0x30];
OCOTP_Init(OCOTP, 500000000U);
for(i=0x00;i<0x30;i++)
{
fuse_shadow_memory[i]= OCOTP_ReadFuseShadowRegister(OCOTP, i );
PRINTF("FuseShadowRegister[%X]:%X\r\n",i,fuse_shadow_memory[i]);
}
PRINTF("RT1021 Unique ID:%X%X",fuse_shadow_memory[2],fuse_shadow_memory[1]);
打印输出:
FuseShadowRegister[0]:40128003
FuseShadowRegister[1]:65F824A3
FuseShadowRegister[2]:141849D2
FuseShadowRegister[3]:50000085
FuseShadowRegister[4]:420002
FuseShadowRegister[5]:0
FuseShadowRegister[6]:0
FuseShadowRegister[7]:0
FuseShadowRegister[8]:0
FuseShadowRegister[9]:A400
FuseShadowRegister[A]:7
FuseShadowRegister[B]:0
FuseShadowRegister[C]:0
FuseShadowRegister[D]:0
FuseShadowRegister[E]:51A4AE5F
FuseShadowRegister[F]:0
FuseShadowRegister[10]:BADABADA
FuseShadowRegister[11]:BADABADA
FuseShadowRegister[12]:BADABADA
FuseShadowRegister[13]:BADABADA
FuseShadowRegister[14]:BADABADA
FuseShadowRegister[15]:BADABADA
FuseShadowRegister[16]:BADABADA
FuseShadowRegister[17]:BADABADA
FuseShadowRegister[18]:0
FuseShadowRegister[19]:0
FuseShadowRegister[1A]:0
FuseShadowRegister[1B]:0
FuseShadowRegister[1C]:0
FuseShadowRegister[1D]:0
FuseShadowRegister[1E]:0
FuseShadowRegister[1F]:0
FuseShadowRegister[20]:0
FuseShadowRegister[21]:0
FuseShadowRegister[22]:0
FuseShadowRegister[23]:0
FuseShadowRegister[24]:0
FuseShadowRegister[25]:BADABADA
FuseShadowRegister[26]:0
FuseShadowRegister[27]:0
FuseShadowRegister[28]:0
FuseShadowRegister[29]:0
FuseShadowRegister[2A]:0
FuseShadowRegister[2B]:0
FuseShadowRegister[2C]:0
FuseShadowRegister[2D]:40
FuseShadowRegister[2E]:0
FuseShadowRegister[2F]:0
RT1021 Unique ID:141849D265F824A3