2 posts / 0 new
Last post
liubinzh
Offline
Last seen:3 weeks 19 hours ago
加入:2018-01-11 06:41
DA14585 OTP读取造成芯片一直复位

注意到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:
CYibin
Offline
Last seen:3 months 1 week ago
工作人员
加入:2017-12-14 02:48
Hi liubinzh,

Hi liubinzh,

强烈不建议修改 OTP Header 中未说明含义的字段。若真的有将数据存放在 OTP 中的需要,可以将其放置在 OTP image 区域。

BR

Yibin