⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
5个职位/ 0个新职位
最后发表
dlo
离线
最后看到:2个月3个星期前
加入:2017-05-26十六21
OTP客户区域

使用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映射。

谢谢你!

设备:
dlo
离线
最后看到:2个月3个星期前
加入:2017-05-26十六21
我认为启用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 ();

PM_Dialog
离线
最后看到:2周1天前
工作人员
加入:2018-02-08 11:03
嗨dlo,

嗨dlo,

感谢你在社区分享你的发现!是的,使能OTP是DA14585和DA4585有点不同。你解决这个崩溃了吗,还是需要进一步的支持?

另外,DA14585不需要像DA14580那样使用6.8V编程电压。请参阅数据表了解更多信息。

谢谢,PM_Dialog

dlo
离线
最后看到:2个月3个星期前
加入:2017-05-26十六21
感谢PM的关注,

感谢PM的关注,

崩溃是由于在读取之前没有正确启用OTP。Memcopy将崩溃,因为它不能访问内存位置。

欢呼,

PM_Dialog
离线
最后看到:2周1天前
工作人员
加入:2018-02-08 11:03
嗨dlo,

嗨dlo,

谢谢你的提示。

问候,PM_Dialog