亲爱的对话框的团队!
我想使用一个随机地址,应该在第一次启动时生成,并且在一生中永远不会改变。我使用DA14583与SKD5。实现这一目标的最佳方法是什么?
谢谢你!
最好的问候,奥利弗
嗨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_PROVIDED_RND_ADDR:Static const struct advertise_configuration user_undirected_advertise_conf ={///发布操作类型。.advertise_operation = ADV_UNDIRECT,///设备自己的BD地址来源:.address_src = GAPM_PROVIDED_RND_ADDR,/ / /广告间隔.intv = 874,/ /地图/广告通道.channel_map = 0 x7,};
Static const struct advertise_configuration user_undirected_advertise_conf ={///发布操作类型。.advertise_operation = ADV_UNDIRECT,///设备自己的BD地址来源:.address_src = GAPM_PROVIDED_RND_ADDR,/ / /广告间隔.intv = 874,/ /地图/广告通道.channel_map = 0 x7,};
2.在启动时,执行以下函数flash_config_init:
typedef struct {uint32_t头;struct bd_addr bd_addr;}配置;#define CONFIG_HEADER 0xE347FD78 // some random uint32静态配置配置;空白flash_config_init (void) {SPI_Pad_t spi_FLASH_CS_Pad;spi_FLASH_CS_Pad。销= SPI_CS_PIN;spi_FLASH_CS_Pad。端口= SPI_GPIO_PORT;//启用SPI和SPI FLASHspi_init(&spi_FLASH_CS_Pad, SPI_MODE_8BIT, SPI_ROLE_MASTER, SPI_CLK_IDLE_POL_LOW, SPI_PHA_MODE_0, SPI_MINT_DISABLE, SPI_XTAL_DIV_8);spi_flash_init (SPI_FLASH_SIZE SPI_FLASH_PAGE);//启动flashspi_flash_release_from_power_down ();spi_flash_read_data (uint8_t *)(配置),0 x1d000 sizeof(配置);如果(config.header ! = CONFIG_HEADER) {uint8_t兰德[16];trng_acquire (rand);config.header = CONFIG_HEADER;memcpy(配置。bd_addr兰德6);spi_flash_block_erase (0 x1d000 SECTOR_ERASE);spi_flash_write_data (uint8_t *)(配置),0 x1d000 sizeof(配置);}//关闭flashspi_flash_power_down ();//释放SPI控制器spi_release ();
typedef struct {uint32_t头;struct bd_addr bd_addr;}配置;
#define CONFIG_HEADER 0xE347FD78 // some random uint32静态配置配置;
空白flash_config_init (void) {SPI_Pad_t spi_FLASH_CS_Pad;spi_FLASH_CS_Pad。销= SPI_CS_PIN;spi_FLASH_CS_Pad。端口= SPI_GPIO_PORT;//启用SPI和SPI FLASHspi_init(&spi_FLASH_CS_Pad, SPI_MODE_8BIT, SPI_ROLE_MASTER, SPI_CLK_IDLE_POL_LOW, SPI_PHA_MODE_0, SPI_MINT_DISABLE, SPI_XTAL_DIV_8);spi_flash_init (SPI_FLASH_SIZE SPI_FLASH_PAGE);//启动flashspi_flash_release_from_power_down ();spi_flash_read_data (uint8_t *)(配置),0 x1d000 sizeof(配置);如果(config.header ! = CONFIG_HEADER) {uint8_t兰德[16];trng_acquire (rand);config.header = CONFIG_HEADER;memcpy(配置。bd_addr兰德6);spi_flash_block_erase (0 x1d000 SECTOR_ERASE);spi_flash_write_data (uint8_t *)(配置),0 x1d000 sizeof(配置);}//关闭flashspi_flash_power_down ();//释放SPI控制器spi_release ();
3.在user_app_adv_start(void)中执行以下代码:
空白user_app_adv_start (void) {struct bd_addr addr = config.bd_addrarch_printf("Using BD_ADDR: %02X-%02X-%02X-%02X\n", addr. printf("Using BD_ADDR: %02X-%02X-%02X\n");addr addr[0]。addr addr[1]。addr addr[2]。addr addr[3]。addr.addr addr [4], [5]);struct gapm_start_advertise_cmd * cmd;cmd = app_easy_gap_undirected_advertise_get_active ();cmd - > op.addr = addr;app_easy_gap_undirected_advertise_start ();}
这个方法会导致一个一次性随机地址,只有在flash被擦除或在第一次启动时才会更新。
问候,奥利弗
恐怕这是不符合蓝牙规范的,因为规范,静态地址需要在充电期间更新,
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_PROVIDED_RND_ADDR:
Static const struct advertise_configuration user_undirected_advertise_conf ={
///发布操作类型。
.advertise_operation = ADV_UNDIRECT,
///设备自己的BD地址来源:
.address_src = GAPM_PROVIDED_RND_ADDR,
/ / /广告间隔
.intv = 874,
/ /地图/广告通道
.channel_map = 0 x7,
};
2.在启动时,执行以下函数flash_config_init:
typedef struct {
uint32_t头;
struct bd_addr bd_addr;
}配置;
#define CONFIG_HEADER 0xE347FD78 // some random uint32
静态配置配置;
空白flash_config_init (void) {
SPI_Pad_t spi_FLASH_CS_Pad;
spi_FLASH_CS_Pad。销= SPI_CS_PIN;
spi_FLASH_CS_Pad。端口= SPI_GPIO_PORT;
//启用SPI和SPI FLASH
spi_init(&spi_FLASH_CS_Pad, SPI_MODE_8BIT, SPI_ROLE_MASTER, SPI_CLK_IDLE_POL_LOW, SPI_PHA_MODE_0, SPI_MINT_DISABLE, SPI_XTAL_DIV_8);
spi_flash_init (SPI_FLASH_SIZE SPI_FLASH_PAGE);
//启动flash
spi_flash_release_from_power_down ();
spi_flash_read_data (uint8_t *)(配置),0 x1d000 sizeof(配置);
如果(config.header ! = CONFIG_HEADER) {
uint8_t兰德[16];
trng_acquire (rand);
config.header = CONFIG_HEADER;
memcpy(配置。bd_addr兰德6);
spi_flash_block_erase (0 x1d000 SECTOR_ERASE);
spi_flash_write_data (uint8_t *)(配置),0 x1d000 sizeof(配置);
}
//关闭flash
spi_flash_power_down ();
//释放SPI控制器
spi_release ();
3.在user_app_adv_start(void)中执行以下代码:
空白user_app_adv_start (void) {
struct bd_addr addr = config.bd_addr
arch_printf("Using BD_ADDR: %02X-%02X-%02X-%02X\n", addr. printf("Using BD_ADDR: %02X-%02X-%02X\n");addr addr[0]。addr addr[1]。addr addr[2]。addr addr[3]。addr.addr addr [4], [5]);
struct gapm_start_advertise_cmd * cmd;
cmd = app_easy_gap_undirected_advertise_get_active ();
cmd - > op.addr = addr;
app_easy_gap_undirected_advertise_start ();
}
这个方法会导致一个一次性随机地址,只有在flash被擦除或在第一次启动时才会更新。
问候,
奥利弗
恐怕这是不符合蓝牙规范的,因为规范,静态地址需要在充电期间更新,
gapm_gen_rand_addr_cmd方法应该是正确的方法
嗨ibbkoeln,
谢谢分享你的解决方案。
MT_dialog问好