如何从OTP-ROM中获取BD地址

了解更多常见问题教程

6个职位/0个新职位
最后一篇文章
尼日利亚
离线
最后一次见到:7个月4天前
已加入:2018-03-20 08:24
如何从OTP-ROM中获取BD地址

嗨对话框

如果我的代码存储在QSPI flash中,但是我用PLT在OTP-ROM中写了一个BD地址,那么如何使ble堆栈使用OTP-ROM中的BD地址而不是NVMS中的BD地址或defaultBLE\u静态地址呢?此外,如何从OTP-ROM读取BD地址?这个案子有什么例子吗?

谢谢

奈杰尔

设备:
PM\U对话框
离线
最后一次见到:2天19小时前
工作人员
已加入:2018-02-08 11:03
你好,奈杰尔,

你好,奈杰尔,

中的BD地址放在OPT报头中的特定地址(0x07F8EA58)中。请尝试使用SmartSnippets工具箱中的OTP工具读取OPT头。要从OTP报头读取BD地址,应遵循以下步骤:

1添加OTP控制器的LLD(低级驱动程序)

#包括“hw\u otpc.h”

2添加从OTP内存中读取的函数,名为read \u bd \u address \u from \u OTP()。源代码如下:

静态bool静态bool读静态bool读写,bd\U U U U U地址从otp(uint32\t otp t t t t t t t t t t t t t t t t t静态bool读写,U U U U U地址,uint32\静态bool读写,U U U U U地址从otp(uint32\t otp t t t t t t t p u CellU偏移量,uint8\t t t t t bd U地址,uint32\t t t t U U U U U地址,uint32\u U U U U U U U地址,uint32\U U U U地址地址地址地址从静态boot8\t t t t t t 8\U U U U地址,U U U U地址从otp U U U U地址,U U U U U U U U U U U U U地址,U U U U U U U U U U U U U U U U U U U U地址,静态otp t t t t t t t t三是;目前,是正确的;是正确的;是正确的;是正确的;是正确的;是正确的;是错误的;是错误的;是错误的;是错误的;是错误的;是错误的;是错误的;是错误的;是错误的;是错误的;是错误的;是正确的;是错误的;是错误的;是正确的;是正确的;是正确的;otpc的otpc的fifo fifo读取(uint32 t t t t*)r buf,OTU buf,otp,otp,otp,OTU,otp地址,otp最终[1]=(r\u buf[0]>>8);bd;是8;bd公司地址,是地址,otp地址,otp地址,otp,最后[2]=(2]=(r\u buf[0]>>8]>>>8);bd;bd;bd;bd;bd公司地址;bd公司;bd公司地址;bd公司地址;bd公司地址,地址f[0]>>24);bd\u address\u otp\u final[4]=(r\u buf[1]>>0);bd\u address\u otp\u final[5]=(r\u buf[1]>>8);bd\u address\u otp\u final[6]=(r\u buf[1]>>16);bd\u address\u otp\u final[7]=(r\u buf[1]>>24);memcpy(bd\u address,bd\u address\u otp\u final,8);返回正确;}

三。从OTP内存中检索BD地址

uint32\u t*物理\u otp\u内存\u单元;uint32\u t单元\u偏移=0x1D4B;静态uint8\u t bd\u地址\u final[8];bool read\u success;/*从otp内存检索bd地址*/read\u success=从\u otp读取\u bd\u地址\u(单元\u偏移,bd\u地址\u final,物理\u otp\u内存\u单元);OS\u断言(read\u success);静态自有\u地址\u用户\u地址={.addr\u type=私有\u静态\u地址,};memcpy(用户\u bd_地址.addr,bd_address_final,6);//将bd address设置为首选值。此函数按相反顺序设置BD地址。ble\u gap\u address\u set(&user\u bd\u address,0x00FF);

谢谢,下午好

尼日利亚
离线
最后一次见到:7个月4天前
已加入:2018-03-20 08:24
嗨,对话,

嗨,对话,

我基于你函数的测试似乎对DA14681不起作用。你能告诉我为什么“单元格偏移”是0x1D4B吗?与0x07F8EA58(OTP中的BD地址)有什么关系?我很好奇“physical_otp_address=hw_otpc_cell_to_mem(otp_cell_offset)”,然而,physical_otp_address=0x7F80000+(cell_offset<<3)in hw_otpc_cell to_mem()。它将不是0x07F8EA58。

谢谢

奈杰尔

PM\U对话框
离线
最后一次见到:2天19小时前
工作人员
已加入:2018-02-08 11:03
你好nigelyang,

你好nigelyang,

param[in]otp\单元格\偏移:otp单元格的偏移量。计算物理内存地址的公式是(0x7F80000+(otp\u cell\u offset<<3))。E、 g.偏移量0x1D4B对应于0x7F8EA58物理地址(BD地址的位置)

param[in]bd\u address:以1字节为单位的单元格内容

param[in]phy\u otp\u address:otp存储单元的物理地址(用于验证目的)

param[out]:如果已成功执行读取请求,则为True,否则为false

正如我在宝贵的回答中提到的,中的BD地址放在OPT头的特定地址(0x07F8EA58)中。您是否使用SmartSnippets工具箱中的OTP工具阅读了OPT头。BD地址是否位于0x07F8EA58中?否则,OTP地址位于哪个位置?

谢谢,下午好

尼日利亚
离线
最后一次见到:7个月4天前
已加入:2018-03-20 08:24
嗨,对话,

嗨,对话,

我发现我的问题来自于使用cm\u sys\u clk\u set(sysclk\u PLL48)设置系统时钟。用cm\u sys\u clk\u set(sysclk\u XTAL16M)修改后,我得到了正确的OTP的BD地址;还有一个问题,如果使用cm\u sys\u clk\u set(sysclk\u PLL48),读取OTP BD地址的正确方法是什么?

谢谢

PM\U对话框
离线
最后一次见到:2天19小时前
工作人员
已加入:2018-02-08 11:03
你好nigelyang,

你好nigelyang,

是的,你应该用同样的方法读取BD地址。如果将时钟更改为PLL,是否可以从工具箱访问OPT头并读取包含的内容?如果您发现前面的答案有用,请将其中一个标记为“已接受”。

谢谢,下午好