5个职位/ 0个新职位
最后发表
ibbkoeln
离线
最后看到:3个月2个星期前
加入:2016-03-18 34
启动时随机地址

亲爱的对话框的团队!

我想使用一个随机地址,应该在第一次启动时生成,并且在一生中永远不会改变。我使用DA14583与SKD5。实现这一目标的最佳方法是什么?

谢谢你!

最好的问候,
奥利弗

设备:
MT_dialog
离线
最后看到:2个月2周以前
工作人员
加入:2015-06-08 34
嗨ibbokoeln,

嗨ibbokoeln,

您可以使用静态随机地址,该地址在设备启动时生成,在设备通电时不能更改。要生成这种类型的地址,可以使用GAPM_GEN_RAND_ADDR_CMD和GAP_STATIC_ADDR作为地址类型。欲了解更多信息,请查看RW-BLE-GAP-IS文件。

由于MT_dialog

ibbkoeln
离线
最后看到:3个月2个星期前
加入:2016-03-18 34
你好,

你好,

谢谢你的提示。你的解决方案并不完全是我想要的,但它给了我正确的方法。为了记录,这是我的解决方案。也许有人会觉得它有用:

以下是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被擦除或在第一次启动时才会更新。

问候,
奥利弗

sprhawk
离线
最后看到:3年1个月前
加入:2016-03-03十七25
恐怕这不是

恐怕这是不符合蓝牙规范的,因为规范,静态地址需要在充电期间更新,

gapm_gen_rand_addr_cmd方法应该是正确的方法

MT_dialog
离线
最后看到:2个月2周以前
工作人员
加入:2015-06-08 34
嗨ibbkoeln,

嗨ibbkoeln,

谢谢分享你的解决方案。

MT_dialog问好