工具/软件:
您好 TI
通常、BLE 扫描设置通常只有扫描窗口和扫描间隔(图1)。
为什么 TI 的 BLE 参数 设置中还有另外两个设置:"Scan Period"和"ScanDuration"?(图2)
我不明白相应的行为是什么?TI 是否有任何文档或一些电流波形可以解释?
如下图(图1)所示、这两个附加参数对应于哪个阶段?
谢谢
图1.
TI BLE 参数设置
图2.
Fii Qin
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:
您好 TI
通常、BLE 扫描设置通常只有扫描窗口和扫描间隔(图1)。
为什么 TI 的 BLE 参数 设置中还有另外两个设置:"Scan Period"和"ScanDuration"?(图2)
我不明白相应的行为是什么?TI 是否有任何文档或一些电流波形可以解释?
如下图(图1)所示、这两个附加参数对应于哪个阶段?
谢谢
图1.
TI BLE 参数设置
图2.
Fii Qin
您好:
窗口 :我们花费的时间扫描一个单一的主要广播信道。 它必须小于间隔。
间隔: 控制器从开始其最后一次扫描到在主要广播信道上开始后续扫描的时间。 在图中、窗口是实际扫描时间量、间隔是启动下一个扫描窗口之前的时间量。
如果窗口为10ms、间隔为30ms、则扫描单个广播信道10ms、并且在20ms 内不扫描任何内容。
关系 :持续时间决定了一段时间内有多少间隔。 例如、如果持续时间是间隔的2倍、那么我们可以在扫描过程中拟合两个间隔。 在下图中、我们的持续时间是间隔的~3倍、因此我们可以拟合三个间隔。 这意味着我们扫描所有三个通道。
扫描周期 :开始下一个扫描会话之前的时间。 如果要定期扫描而无需使用计时器手动打开/关闭扫描、则设置此选项。 如果此值为零、则将根据窗口、间隔和持续时间参数连续进行扫描。
希望这有所帮助。
此致、
Nima Behmanesh
您好:
每2分钟扫描一次对我来说很有意义、因为扫描周期为128秒、大约2分钟。 但是、扫描持续时间为90000ms 意味着其中应至少获得1800个间隔。 因此、如果窗口为30毫秒、则意味着主动扫描(1800 * 30毫秒)、或大约54秒。
出于好奇心、您设置的广告报告的最大数量是多少? 如果它不为零、您想将它更改为0吗?
扫描时、是否发生了任何连接? 例如、在您提供的日志中、它有"foundMatch doing"之类的行。 应用程序在发生这种情况时会做什么?
此致、
Nima Behmanesh
您好:
根据你所说的,我设置的参数应该每两分钟重复扫描1800*30毫秒。从当前的角度看,确实是这样。然而,从日志,它只扫描了一秒钟。 我设置的程序停止扫描并仅在扫描我设置的广播名称时连接。
我只能在日志显示它是"foundMatch "时建立连接。日志出现时、第二个连接 未建立、并且在接下来的两分钟内、当日志未出现时、它无法建立连接。
我设置的广告报告的最大数量为非零。我尝试将其更改为0、似乎没有任何变化。
下图是连接成功时将显示的日志。以下代码是我的"foundMatch "部分。
static bool CheckScanEventLegacy(GapScan_Evt_AdvRpt_t* pAdvReport) { uint32_t index = 0; bool foundMatch = FALSE; uint8_t Receive_Ecu_Data[6] = {0x39, 0x59, 0x59, 0x59, 0x59, 0x5A}; while (index < pAdvReport->dataLen) { gapAdStructure_t adElement; adElement.length = pAdvReport->pData[index]; adElement.adType = pAdvReport->pData[index + 1U]; adElement.aData = &pAdvReport->pData[index + 2U]; if(adElement.adType == 0x09U) { // MenuModule_printf(APP_MENU_SCAN_EVENT, 0, "XXXXX:[%s]\n", BLEAppUtil_convertBdAddr2Str(adElement.aData)); foundMatch = FLib_MemCmp(&(adElement.aData[0]), &(Receive_Ecu_Data[0]), 6); PHSCA_ESELOG_PRINTF("%s","foundMatch doing.\r\n"); PHSCA_ESELOG_HEX_PRINTF(Receive_Ecu_Data,6); if(foundMatch) { // MenuModule_printf(APP_MENU_SCAN_EVENT, 0, "match!!! localname:[%s]\n", BLEAppUtil_convertBdAddr2Str(adElement.aData)); break; } } /* Move on to the next AD element type */ index += (uint32_t)adElement.length + sizeof(uint8_t); } return foundMatch; }