定向广告
DA14531
3个月前
定向广告
发布的adam.stroz35分 9回复你好,
我试图在Da14531芯片上运行直接广告,但我看不到它工作,下面是我添加的代码(基于empty_periphertial_template):
静态const struct default_app_operations user_default_app_operations = {.default_operation_adv = user_advertise_operation,};Void user_advertise_operation(Void){app_easy_gap_directed_advertise_start(0);//0和1的结果相同}
我试图通过将这部分代码添加到app_direct_advertise_complete中重新开始广告。
...部分user_app_callbacks .app_on_adv_direct_complete = app_direct_advertise_complete,…Void app_direct_advertise_complete(const uint8_t x){app_easy_gap_directed_advertise_start(0);}
我使用BLE Sniffer应用程序检查Adv Packet,我还通过使用中央实现应用程序来查找我的设备和其他DA14531。
如果我在app_direct_advertise_complete中插入一个断点,则x变量的值为0x45(表示超时错误)。
我有两个问题:
如果我必须在电话上(在BLE嗅探器应用程序中)看到包,如果我在user_adv_conf结构中的.peer_addr字段中输入了错误的中心地址?
如何检查广告是否有效(我只有一个开发套件usb板)?
3个月前
你好,
我测试了你写给我的信:
在DA14531模块上,我启动BLE中央应用程序,以下配置(我使用公共BD地址仅用于测试目的):
#define SCAN_FILTER (SCAN_FILTER_NONE) #define CONNECT_TO_PERIPHERAL (0) #define CFG_NVDS_TAG_BD_ADDRESS {0x01, 0x00, 0x70, 0xCA, 0xEA, 0x80} #define USER_CFG_ADDRESS_MODE APP_CFG_ADDR_PUB
在DA14531 (USB开发套件)上,我启动了ble_app_peripheral(与你写给我的设置):
的#define CFG_NVDS_TAG_BD_ADDRESS {0×03,0×00,0x70,0xCA,0xEA,0x80的}的#define USER_CFG_ADDRESS_MODE APP_CFG_ADDR_PUB空隙user_app_adv_start(无效){结构gapm_start_advertise_cmd * CMD;cmd = app_easy_gap_directed_advertise_get_active (0);app_easy_gap_directed_advertise_start (0);}空隙user_app_adv_direct_complete(uint8_t状态){如果(状态== GAP_ERR_TIMEOUT){user_app_adv_start();} }
但遗憾的是,我无法在Terminall中看到任何东西(我只看到其他设备),在BLE Sniffer中,我也没有看到DA14531(USB Dev Kit)的任何数据包。
3个月前
嗨,不幸的是我没有ProDK板,但我使用示波器检查电流消耗(我测量电阻上的电压串联电源)。我打开了程序中的各种选项(directed_advertise和undirected_advertise),并查看功耗图表来查看广告。
附件中的示波器截屏。首先我运行undirected advertise (default_advertise_operation),看看DA14531是否工作并发送ad . packets (undirected_advertise.jpg),然后我开始这段代码:
Void user_app_adv_start(Void) {struct gapm_start_advertise_cmd* cmd;cmd = app_easy_gap_directed_advertise_get_active (0);app_easy_gap_directed_advertise_start (0);} void app_direct_advertise_complete(const uint8_t x){if (x == GAP_ERR_TIMEOUT) {user_advertise_operation();} }
相片_wf.jpg directed_advertise_start (0)和_wf_2.jpg directed_advertise_start(0)。正如你看到的设备发送ad .数据包所有的时间,但我没有看到什么嗅探应用程序。
接下来我试着跑定向广告没有这个函数(photo directed_advertise_start(0)_wwf.jpg)
void app_direct_advertise_complete(const uint8_t x){/* if (x == GAP_ERR_TIMEOUT) {user_advertise_operation();} * /}
最后我试图改变论点app_easy_gap_directed_advertise_start函数(photo directed_advertise_start(1).jpg).
所以我做了一些测试,它显示设备正在传输,但我仍然无法在BLE应用(BLE嗅探和B-BLE)上看到它。照片嗅探器,jpg仅显示来自电视和手表的数据包。
附件 | 大小 |
---|---|
_wf.jpg directed_advertise_start (0) | 52.22 KB |
_wf_2.jpg directed_advertise_start (0) | 60.01 KB |
指示_Advertise_Start(0)_wwf.jpg | 46.62 KB |
directed_advertise_start (1) . jpg | 48.44 KB |
undirected_advertise.jpg | 56.16 KB. |
sniffer.jpg | 165.94 KB |
3个月前
嗨adam.stroz,
谢谢你的评论。在我之前的回复中,我想使用BLE Sniffer工具(如果你有),而不是一个移动BLE应用程序。我检查了directed_advertise_start(1).jpg,它似乎设备开始无定向广告。可能你正在使用的应用程序无法检测到广告包。如果您有一个BLE嗅探工具可用,您应该能够捕获通过空气传播的ADV_DIRECT_IND广告包。如果另一个DA14531被用作GAP中心,在GAP外围端,请添加中心的BD地址。头文件user_config.h中user_adv_config结构的Peer_addr_type项?
谢谢,PM_Dialog
3个月前
你好,
抱歉被误导,我没有BLE嗅探设备(工具),我只使用智能手机和/或第二个DA14531(与GAP中央-DA14585-DA14586-DA14531_Central_Implementation示例)。我检查了中央和外围的设置,一切似乎都没问题。
中央设置# define USER_CFG_ADDRESS_MODE APP_CFG_ADDR_PUB, #定义USER_CFG_CNTL_PRIV_MODE APP_CFG_CNTL_PRIV_MODE_NETWORK # define CFG_NVDS_TAG_BD_ADDRESS {0 x01 0 x02 0 x70、0 xca 0 xea, 0 x80} # define SCAN_FILTER (SCAN_FILTER_NONE) # define CONNECT_TO_PERIPHERAL (0) PERIPHERIAL对等设备的设置/ / /地址/ / /注意:意味着定向广告(ADV_DIRECT_IND) .peer_addr = {0x01, 0x02, 0x70, 0xCA, 0xEA, 0x80}, ///对端设备地址类型(0=public/1=random) ///注意:意味着定向广告(ADV_DIRECT_IND) .peer_addr_type = 0, void user_advertise_operation(void){struct gapm_start_advertise_cmd* cmd;cmd = app_easy_gap_directed_advertise_get_active (0);app_easy_gap_directed_advertise_start (0);} void app_direct_advertise_complete(const uint8_t x){if (x == GAP_ERR_TIMEOUT) {user_advertise_operation();} }
我在终端中获得以下结果(我只看到电视,有时是我的手表):
--------------- END_ADV ----------- 缺口类型:00,数据:1 c RSSI: -55 BD_ADDR: 58:80:3c: 47:8b: 84 --------------- END_ADV ----------- 差距旗帜:1 c RSSI: -71 BD_ADDR: 58:80:3c: 47:8b: 84 --------------- END_ADV ----------- 缺口类型:00,数据:1 c RSSI: -60 BD_ADDR: 58:80:3c: 47:8b: 84 --------------- END_ADV -----------
我还能做什么?我应该使用什么应用程序来查看这些包?
3个月前
我终于看到我的设备了。我运行了Central示例并打开了广播,如下面的代码所示:
void user_advertise_operation(void){struct gapm_start_advertise_cmd * cmd;cmd = app_easy_gap_directed_advertise_get_active (0);app_easy_gap_directed_advertise_start (0);} void app_direct_advertise_complete(const uint8_t x){if (x == GAP_ERR_TIMEOUT) {user_advertise_operation();} }
在中央,我必须改变以下参数:
#define SCAN_WINDOW_MS(20) #定义SCAN_WINDOW_MS (20)
在终端我看到来自其他DA14531的数据包:
缺口类型:00、数据:RSSI: -34 BD_ADDR: 80: ea: ca: 70:00:01 --------------- END_ADV -----------
但我有两个问题:
首先,为什么我只看到一个包?(我的设备一直在发送数据包)
如何正确设置SCAN_INTVL_MS和SCAN_WINDOW_MS参数?
3个月前
你好,
那我的问题呢?我注意到,如果我的设备仍在传输(定向广告),如果我重置中央设备,我总是会注意到一条信息。
差距类型:00,数据:<-Reset RSSI:-38 BD_ADDR:80:EA:CA:70:00:01 ------------- END_ADV ----------- <0> <0> AGAP类型:00,数据:<-RESET RSSI:-39 BD_ADDR:80:EA:CA:70:00:01 ---------------END_ADV ----------- <0> <0> AGAP类型:00,数据:<-RESET RSSI:-42 BD_ADDR:80:EA:CA:70:00:01 --------------- END_ADV ---------- <0> <0 AGAP类型:00,数据:<-Reset RSSI:-39 BD_ADDR:80:EA:CA:70:00:01 ------------- END_ADV ----------
3个月前
你好亚当,
为延迟道歉。根据Bluetooth LE规范,如果您知道扫描仪的BD地址以及外围设备使用定向广告,则可以通过特定设备扫描并被特定设备进行扫描。在中央侧,设备将开始扫描设备,因此您似乎可以看到您的外围设备是指向的广告。您看到的结果来自user_on_adv_report_ind()回调函数。
每个发现的设备都将显示一次。您可以使用另一个外设来检查它。
参见3.2节中的步骤1。每个设备显示一次。
http://lpccs-docs.dialog-semiconductor.com/SW_Example/SDK6/Central-Implementation/description.html
>> SCAN_INTVL_MS和SCAN_WINDOW_MS参数如何正确设置?
你能把这句话说清楚吗?中央SW示例使用的扫描间隔和窗口为50ms。
谢谢,PM_Dialog
3个月前
嗨adam.stroz,
谢谢你的问题。在回答你的问题之前,我想首先强调一下,直接广告是为了建立非常快速的联系。根据蓝牙LE规格,如果你知道中心BD地址,你可以直接做广告。
请注意,如果你使用手机作为中心设备,手机通常使用随机的BD地址,这意味着BD地址会不断变化,所以你无法知道它。只有在中环使用公共屋宇署地址,而不是每次都更改的情况下,才可作定向广告。
中央的BD地址应该添加到user_config.h头文件中user_adv_config结构的.peer_addr_type中。然后,应该在user_app_adv_start()中使用app_easy_gap_directed_advertise_start() API,并使用上面提到的适当BD地址字段。在直接通告中,PDU中只包含设备的BD地址。
下面是一个演示高占空比定向广告的快速例子。请遵循SDK6.0.14的ble_app_peripheral示例。
SDK位置:6.0.14.1114\projects\target_apps\ble_examples\ble_app_peripheral\Keil_5
1.使用下面的user_app_adv_start()。从user_peripheral.c文件中删除app_adv_data_update_timer_used,并注释掉app_add_ad_struct()。
如果你运行它,一个NMI将发生。要避免NMI,你有两个选择:
A]当定向的除法超时时,将设备放入睡眠模式。为此,您应该在app_easy_gap_dircated_advertise_start(0)之后添加Arch_set_extended_sleep(false)。如果它仍然处于活动模式,它将等待中断,WDOG将超时,将发生NMI。
b]使用。app_on_adv_direct_complete = user_app_adv_direct_complete才能重新启动adverting。(与无向广告相同)
3.当定向发布超时时,状态为GAP_ERR_TIMEOUT (= 0x45)。
当然,您应该在user_adv_config结构中添加适当的BD地址
定向广告有两种模式:高占空比和低占空比
I]高占空比:广告持续时间约1.28秒(广告间隔1.25ms)。如果没有中心连接到外围设备,就会发生超时。
II}低占空比:外设将使用user_config.h中定义的adv间隔永远发布广告。
在这两种情况下,BLE嗅探器都可以用来捕获ADV_DIRECT_IND的发布报文。
谢谢,PM_Dialog