6 posts / 0 new
Last post
merlin_hung
Offline
Last seen:4 years 6 months ago
Joined:2016-04-21 16:35
蓝牙地址烧写问题

你好,希望咨询一下,如果我把蓝牙地址烧入OTP,但运行代码还是烧入外部SPI FLASH,是否还能从SPI FLASH正常启动。如果不能,有没有方法可以实现这种方案。谢谢!

Device:
Jelphi
Offline
Last seen:2 months 1 week ago
Staff
Joined:2015-09-10 12:07
Hi sir

Hi sir

你是想从flash 里面直接执行吗?这个对DA14580是不行的,必须copy到ram里面执行哦

Gongyu_Dialog
Offline
Last seen:1 day 9 hours ago
Joined:2016-04-27 07:07
可以的,可以查看函数nvds_read_bdaddr

可以的,可以查看函数nvds_read_bdaddr。如果是580,上来就会去OTP读。
如果是全0,在函数custom_nvds_get_func里,会去读tag- NVDS_TAG_BD_ADDRESS的内容

merlin_hung
Offline
Last seen:4 years 6 months ago
Joined:2016-04-21 16:35
如果已经把蓝牙地址烧入OTP了

如果已经把蓝牙地址烧入OTP了,580读取OTP时就不会是全0了吧?

kernel
Offline
Last seen:3 years 3 months ago
Joined:2017-04-14 04:35
Hi Gongyu_Dialog,

Hi Gongyu_Dialog,

DA14580 SDK 5.0.4里 nvds_read_bdaddr 函数是这样定义的:

static __inline void nvds_read_bdaddr(void)
{
#if defined(__DA14583__) && !(BDADDR_FROM_DA14583_FLASH_DISABLED)
// First check and read BD address from DA14583's internal SPI flash
// If no BD address was found in flash, then try to read BD address from OTP
if( !nvds_read_bdaddr_from_da14583_flash() )
#endif
{
// Check and read BD address from OTP
nvds_read_bdaddr_from_otp();
}
}

这里只有在定义了14583的时候才会从Flahs中读 ,不然的话就去OTP里读。
我没有看到custom读蓝牙地址的函数

问题1:
在产品开发中,我们用 const struct nvds_data_struct nvds_data_storage __attribute__((section("nvds_data_storage_area"))) 这个结构体来定义蓝牙地址
我看到这个变量实际上是直接被存储到了Sys RAM 中 0x2000,0340 这个地址上(根据scatter file),我想知道,代码是如何把这个内存地址上的蓝牙地址设置到寄存器里的。

问题2:
根据文档“使用SUOTA_0 - b - 010”的描述,在spi Flash中,地址0 x1F000这个位置上的Product header 也有BD_addr 的定义,我猜这个是在量产中不使用OTP时蓝牙地址的存放位置,
但是我没有看到代码和文档中有相关的介绍,应该如何使用product header 来设置蓝牙地址

问题3:
在实际的量产中,不需要再使用nvds_data_storage 这个变量定义的蓝牙地址,我是否需要把 da4580_config_advenced.h 文件中 CFG_INITIALIZE_NVDS_STRUCT 注释掉

thanks

Gongyu_Dialog
Offline
Last seen:1 day 9 hours ago
Joined:2016-04-27 07:07
是这样的

是这样的