您好!我想通过串口将我希望的MAC地址发送给14580,然后保存在外部SPI flash中,下次启动的时候就使用新的MAC地址。请问,我上述想法可以实现吗?我没有找到14580是在哪里读取MAC地址的,麻烦给我一个思路,谢谢!
蓝牙上电获取地址的步骤如下,因为有些涉及罗的代码,流程如下:
找到system_init函数1. 580上电首先会从OTP里去读地址存到dev_bdaddr,函数流程nvds_read_bdaddr->nvds_read_bdaddr_from_otp2. rwip_init函数,这个函数因为BLE_HOST_PRESENT定义了,所以跑的是ROM里的版本,不是SDK里的同名函数。3. 在rwip_init函数里面,会调用到rwble_init->lld_init(false) //false代表不需要reset4.lld_init函数会调用jump_table_base里的lld_init_func函数5.lld_init_func里面会调用nvds_get函数去拿NVDS_TAG_BD_ADDRESS里的蓝牙地址。获取的地址就是最后设备会用到的地址。nvds_get对应SDK代码里的jump_table里的custom_nvds_get_func。6.custom_nvds_get_func函数里面,查看关于NVDS_TAG_BD_ADDRESS部分。co_null_bdaddr为全0地址。如果dev_bdaddr里是全0,则调用nvds_get_func函数(ROM固化函数)去拿SDK里面nvds_data_storage结构里的地址。(在nvds.c文件里)如果不是0,则dev_bdaddr就是实际获取的地址。
所以你的问题,我想你可以修改custom_nvds_get_func里标签NVDS_TAG_BD_ADDRESS里的内容来实现。这样就跳过nvds.c里的nvds_data_storage结构里的地址信息了。
蓝牙上电获取地址的步骤如下,因为有些涉及罗的代码,流程如下:
找到system_init函数
1. 580上电首先会从OTP里去读地址存到dev_bdaddr,函数流程nvds_read_bdaddr->nvds_read_bdaddr_from_otp
2. rwip_init函数,这个函数因为BLE_HOST_PRESENT定义了,所以跑的是ROM里的版本,不是SDK里的同名函数。
3. 在rwip_init函数里面,会调用到rwble_init->lld_init(false) //false代表不需要reset
4.lld_init函数会调用jump_table_base里的lld_init_func函数
5.lld_init_func里面会调用nvds_get函数去拿NVDS_TAG_BD_ADDRESS里的蓝牙地址。获取的地址就是最后设备会用到的地址。
nvds_get对应SDK代码里的jump_table里的custom_nvds_get_func。
6.custom_nvds_get_func函数里面,查看关于NVDS_TAG_BD_ADDRESS部分。co_null_bdaddr为全0地址。
如果dev_bdaddr里是全0,则调用nvds_get_func函数(ROM固化函数)去拿SDK里面nvds_data_storage结构里的地址。(在nvds.c文件里)
如果不是0,则dev_bdaddr就是实际获取的地址。
所以你的问题,我想你可以修改custom_nvds_get_func里标签NVDS_TAG_BD_ADDRESS里的内容来实现。这样就跳过nvds.c里的nvds_data_storage结构里的地址信息了。