在我们的测试环境中、我们 每2秒就有6000个标签信标。 然后、当 TI2652R1/R7在几秒钟内进行连续扫描或60%或更高占空比时、主机正在通过 UART 接收垃圾位。 然后、我们需要重置无线电以恢复它。
可以使用50多个标签重现此过程、但可能需要几秒钟时间。
硬件:CC26x2R1 Launch Pad
FW:HOST_TEST 版本:0.2.40.552 00 (SDK:7_10_01_24)
我们仍然会看到最新 SDK 存在问题。
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.
在我们的测试环境中、我们 每2秒就有6000个标签信标。 然后、当 TI2652R1/R7在几秒钟内进行连续扫描或60%或更高占空比时、主机正在通过 UART 接收垃圾位。 然后、我们需要重置无线电以恢复它。
可以使用50多个标签重现此过程、但可能需要几秒钟时间。
硬件:CC26x2R1 Launch Pad
FW:HOST_TEST 版本:0.2.40.552 00 (SDK:7_10_01_24)
我们仍然会看到最新 SDK 存在问题。
尊敬的 Sen:
感谢您与我们联系。
如前所述、该问题是由 UART 接口提供的吞吐量有限引起的。 这意味着我无法提供修复、而是解决问题的方法。
之前提出的建议(在您引用的主题中)仍然是准确的。 我假设您应用了与您的用例相关的线索、现在我将为您提供其他线索。
-首先,你可以考虑在 UART 级别实施某种流量控制,这样就能避免 UART 过度泛滥(导致崩溃)。 注意:这是以可能丢弃一些数据包为代价的。 我建议在文件中实现此目的、 \SOURCE\ti\ble5stack\NPI\NPI\NPI_task.c src 请参阅我在身边执行此操作的方式(未经过全面测试、仅供您参考) /cfs-file/__key/communityserver-discussions-components-files/538/npi_5F00_task.diff
第二,我理解你的系统的主要任务是收集信标。 但是、您需要传输到主机的最小数据子集是多少? 以不符合 HCI 标准的方式报告信标是否可行? 例如、您可以考虑更改数据包的第一个字节(通常包含 HCI 事件的类型)、并且仅传输对主机有用的元素。 例如、根据此建议、您可以为广告事件设置固定大小的报告、因此您只需要事件的类型(1字节)、 然后、您可以去掉 EventCode (2字节)、DataLength (1字节)、 Event (2字节)、状态(1字节)和 EventID (4字节)。 此外、如果您知道所有广播器都使用相同的广播类型、地址类型、主 PHY、辅助 PHY、AdvSid、 TxPower、directAddrType、DirectAddr、PeriodicAdvInt 和 DataLength、您可以清除更多的字节。
这是广告报告看起来的样子。 主机在与您的用例类似的用例中通常所需的元素均为绿色(当然、这将取决于您的要求)。
为了实现这一点、我建议修改文件中的 HCI_tl_aeScanEventCallbackProcess 和 HCI_tl_legacyScanEventCallbackProcess 的内容 \source\ti\ble5stack\iCall\app\iCall_hci_tl.c
下面介绍了如何修改上述两个回调中的代码(应根据您的确切要求进行调整)。
msg->hdr.event = HCI_EVENT_PACKET; // Keep this msg->hdr.status = 0xFF; // Keep this msg->pktLen = HCI_EVENT_MIN_LENGTH + HCI_ADV_DIRECTED_REPORT_EVENT_LEN; // Reduce this to fit your needs msg->pData = (uint8*)(msg+1); msg->pData[0] = HCI_EVENT_PACKET; // Change this to use a different one (so you can recognize the packet) msg->pData[1] = HCI_LE_EVENT_CODE; // May be removed msg->pData[2] = HCI_ADV_DIRECTED_REPORT_EVENT_LEN; // May be removed msg->pData[3] = HCI_BLE_DIRECT_ADVERTISING_REPORT_EVENT; // May be removed msg->pData[4] = extAdvRpt->numRpts; // May be removed msg->pData[5] = 1; // May be removed msg->pData[6] = extAdvRpt->addrType; // Keep this one but change the table index memcpy(&msg->pData[7], extAdvRpt->addr, B_ADDR_LEN); // Keep this one but change the table index msg->pData[13] = LL_DEV_ADDR_TYPE_RANDOM; // May be removed memcpy(&msg->pData[14], extAdvRpt->directAddr, B_ADDR_LEN); // May be removed msg->pData[20] = extAdvRpt->rssi; NPITask_sendToHost((uint8_t *)msg);
-第三,你可能想考虑购买一个稍大的 RAM 的设备(它只有当你看到一些尖峰在活动,但它不会帮助增加吞吐量)。 为此、可以考虑使用与 CC2652R 引脚对引脚兼容并具有相同软件 API 的 CC2652R7。
请告诉我您的反馈。
此致、