注意到otp的header中有144字节的Customer Specific Field。目前我们的程序通过SmartSnippets Toolbox 进行OTP烧写,同时在Customer Specific Field中写入我们需要的数据。
烧写的程序里,我们在启动的时候读取Customer Specific Field数据,发现会造成系统复位,请问是不是读取的方式不对呢
读取代码如下:
uint8_t data[8] = {0}; SetBits16(CLK_AMBA_REG, OTP_ENABLE, 1); // Enable OTPC clock for(volatile int i = 0; i < 100; i++);// Wait for a while for the OTP settling time. SetBits(OTPC_MODE_REG, OTPC_MODE_MODE, HW_OTPC_MODE_MREAD); // 配置读模式 memcpy(&data[0],(const void *)0x07F8FE20, 8); // 0x07F8FE20 是Customer Specific Field的起始地址 SetBits16(CLK_AMBA_REG, OTP_ENABLE, 0);// 关闭otp
使用Keil 在DEBUG状态下可以看到能读取到Customer Specific Field中数据,就是OTP烧写后会出现程序一直复位
反复通过对比测试可以确定是这段代码造成的复位,由于使用OTP测试,已经废了好多个芯片了。。。求救
谢谢
Device:
Hi liubinzh,
强烈不建议修改 OTP Header 中未说明含义的字段。若真的有将数据存放在 OTP 中的需要,可以将其放置在 OTP image 区域。
BR
Yibin