使用DA14580,我们将自定义数据写入OTP报头自定义字段(特别是地址0x47F54和0x47F56)。
在DA14585上,OTP的内存映射发生了变化,在查看OTP头时,我看到了从地址0x07F8FE20开始的Customer Specific Field(144字节可用)。
以前,我使用读取数据写入使用:
uint8_t *otp_major = (uint8_t *)0x47F54;
uint8_t *otp_minor = (uint8_t *)0x47F56;
memcpy (&beacon_data[主要]otp_major 2);
memcpy (&beacon_data[小]otp_minor 2);
对于新的DA14585,我想我只需要将其更改为:
uint8_t *otp_major = (uint8_t *)0x07F8FE20;
uint8_t *otp_minor = (uint8_t *)0x07F8FE22;
memcpy (&beacon_data[主要]otp_major 2);
memcpy (&beacon_data[小]otp_minor 2);
然而,当我这样做时,程序不再运行(它仍然要编译)。我将尝试调试,看看它在哪里失败了,但请让我知道我是否正确地解释了OTP映射。
谢谢你!
设备:
我认为在DA14585中启用OTP与DA14580略有不同。我在arch_system.c中发现了一个关于读取BD地址的代码片段,所以我修改它来处理自定义数据字段,下面的代码工作,它不会再崩溃了:
hw_otpc_init ();
hw_otpc_manual_read_on(假);
memcpy(&beacon_data[MAJOR], (uint8_t *)OTP_HDR_CUSTOMER_FIELD_ADDR, 2);
memcpy(&beacon_data[MINOR], (uint8_t *)OTP_HDR_CUSTOMER_FIELD_ADDR+ 2,2);
hw_otpc_manual_read_off ();
hw_otpc_close ();
嗨dlo,
感谢你在社区分享你的发现!是的,使能OTP是DA14585和DA4585有点不同。你解决这个崩溃了吗,还是需要进一步的支持?
另外,DA14585不需要像DA14580那样使用6.8V编程电压。请参阅数据表了解更多信息。
谢谢,PM_Dialog
感谢PM的关注,
崩溃是由于在读取之前没有正确启用OTP。Memcopy将崩溃,因为它不能访问内存位置。
欢呼,
嗨dlo,
谢谢你的提示。
问候,PM_Dialog