工具与软件:
尊敬的 TI 团队:
对于我们的客户、我们正在创建一个软件、假设一次在一个通道上广播数据(通过串行命令选择通道)。
我们创建了3个广播句柄、3 `GapAdv_params_t` structures 和3 `Util_Adv` BLE3072IT_t 、其中每个句柄定义了其中一个通道的配置。
我们还创建了一个`BLESCRACING_307t Util_Adv`、因为它存储每个频道的完全相同的数据。
GapAdv_params_t advParams_37 = {.... .primChanMap = GAP_ADV_CHAN_37, ... }; GapAdv_params_t advParams_38 = {.... .primChanMap = GAP_ADV_CHAN_38, ... }; GapAdv_params_t advParams_39 = {.... .primChanMap = GAP_ADV_CHAN_39, ... }; BLEAppUtil_AdvInit_t `broadcasterInitSettings_37 = { ... .advParam = &advParams_37, ...}; BLEAppUtil_AdvInit_t `broadcasterInitSettings_38 = { ... .advParam = &advParams_38, ...}; BLEAppUtil_AdvInit_t `broadcasterInitSettings_39 = { ... .advParam = &advParams_39, ...}; BLEAppUtil_AdvStart_t broadcasterStartSettings = { .... };
我们使用 BleAppUtil 作为 API 来访问 BLE 堆栈。
BLEAppUtil_initAdvSet(&broadcasterAdvHandle_37, &broadcasterInitSettings_37); BLEAppUtil_initAdvSet(&broadcasterAdvHandle_38, &broadcasterInitSettings_38); BLEAppUtil_initAdvSet(&broadcasterAdvHandle_39, &broadcasterInitSettings_39);
当串行命令到达信道编号时、我们停止在所有信道上进行广播、并开始仅在所选信道上进行广播。
BLEAppUtil_advStop(broadcasterAdvHandle_37); BLEAppUtil_advStop(broadcasterAdvHandle_38); BLEAppUtil_advStop(broadcasterAdvHandle_39); case 37: BLEAppUtil_advStart(broadcasterAdvHandle_37, &broadcasterStartSettings); break; case 38: BLEAppUtil_advStart(broadcasterAdvHandle_38, &broadcasterStartSettings); break; case 39: BLEAppUtil_advStart(broadcasterAdvHandle_39, &broadcasterStartSettings); break;
在另一个器件上、我们实施了 AdvScanner 固件以打印接收到的广播数据包和接收数据的通道。
为了确认和证明两个固件都能正常工作、我们还使用了带有 Sniffer 固件和 Wireshark 的 nrf dk52。
一切看起来都很好。 我们选择信道、在扫描器和监听器上、我们只能看到来自所选信道的数据。 -看起来很完美。
直到该器件被带到实验室并将频谱分析仪连接到天线、然后所有三个通道都可见(如图像所示)。
测试失败、因为只应在一个通道上出现一个尖峰。
我们为什么可以看到全部三个引脚?
我们如何确保在广播过程中只有一个信道处于活动状态?

此致
Kamil