亲爱的对话团队!
我想使用一个随机地址,应该在第一次启动时生成,而且永远不会在生命周期中更改。我使用SKD5使用DA14583。实现这一点的最佳方式是什么?
谢谢!
此致,奥利弗
嗨ibbokoeln,
您可以使用设备靴子时生成的静态随机地址,而在设备供电时无法更改。要生成此类地址,您可以使用Gapm_gen_rand_addr_cmd使用Gap_static_addr作为地址类型。有关此信息的更多信息,请检查RW-BLE-GAP-IS文档。
谢谢mt_dialog.
你好,
谢谢你的提示。你的解决方案不是我想要的,但它向我展示了正确的方式。对于记录,这是我的解决方案。也许有人可能会发现它有用:
以下对DA15483具有SDK5.0.3的有效性:
1.在user_config.h中.address_src设置为gapm_provide_rnd_addr:static const struct user_undircation_advertise_conf = {///宣传操作类型。.Advertise_operation = ADV_UNDIRECT,///自己的BD地址源:.address_src = gapm_provide_rnd_addr,///宣传间隔.intv = 874,///广告频道地图.channel_map = 0x7,};
static const struct user_undircation_advertise_conf = {///宣传操作类型。.Advertise_operation = ADV_UNDIRECT,///自己的BD地址源:.address_src = gapm_provide_rnd_addr,///宣传间隔.intv = 874,///广告频道地图.channel_map = 0x7,};
2.在启动时,执行以下函数flash_config_init my_app_init:
typedef struct {UINT32_T标题;struct bd_addr bd_addr;配置;#define config_header 0xe347fd78 //一些随机uint32静态配置配置;void flash_config_init(void){spi_pad_t spi_flash_cs_pad;spi_flash_cs_pad.pin = spi_cs_pin;spi_flash_cs_pad.port = spi_gpio_port;//启用SPI和SPI Flashspi_init(&spi_flash_cs_pad,spi_mode_8bit,spi_rool_master,spi_clk_dle_pol_low,spi_pha_mode_0,spi_mint_disable,spi_xtal_div_8);spi_flash_init(spi_flash_size,spi_flash_page);//上电闪存SPI_FLASH_RELEASE_FROM_POWER_DOWN();spi_flash_read_data((uint8_t *)(&config),0x1d000,sizeof(config));if(config.header!= config_header){UINT8_T RAND [16];trng_acquire(兰德);config.header = config_header;memcpy(&config.bd_addr,rand,6);spi_flash_block_erase(0x1d000,sector_erase);spi_flash_write_data((uint8_t *)(&config),0x1d000,sizeof(config));}//电源闪烁spi_flash_power_down();//发布SPI控制器spi_release();
typedef struct {UINT32_T标题;struct bd_addr bd_addr;配置;
#define config_header 0xe347fd78 //一些随机uint32静态配置配置;
void flash_config_init(void){spi_pad_t spi_flash_cs_pad;spi_flash_cs_pad.pin = spi_cs_pin;spi_flash_cs_pad.port = spi_gpio_port;//启用SPI和SPI Flashspi_init(&spi_flash_cs_pad,spi_mode_8bit,spi_rool_master,spi_clk_dle_pol_low,spi_pha_mode_0,spi_mint_disable,spi_xtal_div_8);spi_flash_init(spi_flash_size,spi_flash_page);//上电闪存SPI_FLASH_RELEASE_FROM_POWER_DOWN();spi_flash_read_data((uint8_t *)(&config),0x1d000,sizeof(config));if(config.header!= config_header){UINT8_T RAND [16];trng_acquire(兰德);config.header = config_header;memcpy(&config.bd_addr,rand,6);spi_flash_block_erase(0x1d000,sector_erase);spi_flash_write_data((uint8_t *)(&config),0x1d000,sizeof(config));}//电源闪烁spi_flash_power_down();//发布SPI控制器spi_release();
3.以下代码在User_App_Adv_Start(void)中执行:
void user_app_adv_start(void){struct bd_addr addr = config.bd_addrARCH_PRINTF(“使用BD_ADDR:%02x%02x%02x%02x%02x-%02x \ n”,addr.addr [0],addr.addr [1],addr.addr [2],addr。addr [3],addr.addr [4],addr.addr [5]);struct gapm_start_advertise_cmd * cmd;cmd = app_easy_gap_undirected_advertise_get_active();cmd-> op.addr = addr;app_easy_gap_undircated_advertise_start();}
该方法导致一次性随机地址,只有在删除闪光灯或在第一次启动时才会更新。
问候,奥利弗
我担心这是不符合蓝牙规范的,由于规范,静态地址应在电源周期期间更新,
gapm_gen_rand_addr_cmd方式应该是正确的方式
嗨Ibbkoeln,
谢谢你分享你的解决方案。
最好的问候mt_dialog.
嗨ibbokoeln,
您可以使用设备靴子时生成的静态随机地址,而在设备供电时无法更改。要生成此类地址,您可以使用Gapm_gen_rand_addr_cmd使用Gap_static_addr作为地址类型。有关此信息的更多信息,请检查RW-BLE-GAP-IS文档。
谢谢mt_dialog.
你好,
谢谢你的提示。你的解决方案不是我想要的,但它向我展示了正确的方式。对于记录,这是我的解决方案。也许有人可能会发现它有用:
以下对DA15483具有SDK5.0.3的有效性:
1.在user_config.h中.address_src设置为gapm_provide_rnd_addr:
static const struct user_undircation_advertise_conf = {
///宣传操作类型。
.Advertise_operation = ADV_UNDIRECT,
///自己的BD地址源:
.address_src = gapm_provide_rnd_addr,
///宣传间隔
.intv = 874,
///广告频道地图
.channel_map = 0x7,
};
2.在启动时,执行以下函数flash_config_init my_app_init:
typedef struct {
UINT32_T标题;
struct bd_addr bd_addr;
配置;
#define config_header 0xe347fd78 //一些随机uint32
静态配置配置;
void flash_config_init(void){
spi_pad_t spi_flash_cs_pad;
spi_flash_cs_pad.pin = spi_cs_pin;
spi_flash_cs_pad.port = spi_gpio_port;
//启用SPI和SPI Flash
spi_init(&spi_flash_cs_pad,spi_mode_8bit,spi_rool_master,spi_clk_dle_pol_low,spi_pha_mode_0,spi_mint_disable,spi_xtal_div_8);
spi_flash_init(spi_flash_size,spi_flash_page);
//上电闪存
SPI_FLASH_RELEASE_FROM_POWER_DOWN();
spi_flash_read_data((uint8_t *)(&config),0x1d000,sizeof(config));
if(config.header!= config_header){
UINT8_T RAND [16];
trng_acquire(兰德);
config.header = config_header;
memcpy(&config.bd_addr,rand,6);
spi_flash_block_erase(0x1d000,sector_erase);
spi_flash_write_data((uint8_t *)(&config),0x1d000,sizeof(config));
}
//电源闪烁
spi_flash_power_down();
//发布SPI控制器
spi_release();
3.以下代码在User_App_Adv_Start(void)中执行:
void user_app_adv_start(void){
struct bd_addr addr = config.bd_addr
ARCH_PRINTF(“使用BD_ADDR:%02x%02x%02x%02x%02x-%02x \ n”,addr.addr [0],addr.addr [1],addr.addr [2],addr。addr [3],addr.addr [4],addr.addr [5]);
struct gapm_start_advertise_cmd * cmd;
cmd = app_easy_gap_undirected_advertise_get_active();
cmd-> op.addr = addr;
app_easy_gap_undircated_advertise_start();
}
该方法导致一次性随机地址,只有在删除闪光灯或在第一次启动时才会更新。
问候,
奥利弗
我担心这是不符合蓝牙规范的,由于规范,静态地址应在电源周期期间更新,
gapm_gen_rand_addr_cmd方式应该是正确的方式
嗨Ibbkoeln,
谢谢你分享你的解决方案。
最好的问候mt_dialog.