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.

CC2540如何象packet sniffer一样持续搜索广播

Other Parts Discussed in Thread: CC2540

请问CC2540如何象packet sniffer一样去搜索空中的广播。

即开始搜索后,会返回任何一个扫描到的广播,不会因扫描超时或达到最大扫描数而停止,

会持续去扫描广播,就像抓包工具packet sniffer一样。

我在SimpleBLECentral例程上,调用HCI_LE_SetScanEnableCmd这个函数,似乎可以启动搜索过程,但是未见有HCI数据返回。

  • Geevar,

    packet sniffer的工作原理和BLE是不一样的。所以你想要在BLE协议栈上做到这个是不可行的。

    你的确可以调用HCI_LE_SetScanEnableCmd()进行手动开启和关闭扫描。

    如果你参数一切设置正确的话,应该会通过GAP_DEVICE_INFO_EVENT 报到上面去。

  • Hi,  Y

    那是不是就是说我不可能用TI 的BLE协议栈,实现这样的广播搜索功能咯?

    你之后写道的  "如果你参数一切设置正确的话,应该会通过GAP_DEVICE_INFO_EVENT 报到上面去”

    是不是表示GAP_DEVICE_INFO_EVENT 返回的搜索结果,还是和调用startDiscovery函数一样的效果?

    另外,我应该设置哪些参数,才能使调用HCI_LE_SetScanEnableCmd()后,有GAP_DEVICE_INFO_EVENT消息返回?

    谢谢!

  • Gevvar,

    理论上,是的。实现这样的广播搜索功能需要有不同频段扫描功能。2540 dongle能做的也只是在一个频段上扫描而已。更专业的抓包工具,会具有全频段扫描功能,就是能扫描2.4G 全频段,当然,那些工具是要你的血的。

    HCI_LE_SetScanParamCmd() 这个函数必须先调用,设置你的扫描参数,然后调用HCI_LE_SetScanEnableCmd()。

  • Hi Y,

    之前搜索广播问题我可能没有描述清楚。

    我需要搜索的设备就是一些 BLE Peripheral设备,只是我希望得到它们发出的每一个advertising,

    假如这个外围设备每100毫秒发出一次广播,我的中心设备也期望每100毫秒就能搜到一次广播。

  • 一结束又重复扫描不行吗?

  • 如果蓝牙没有跳频机制,都好说,随意找一个工具就OK

    这里面的关键问题是蓝牙协议要跳频,TI的抓包工具只能在一个频段抓,会丢掉一些信息

    所以,能持续搜索,基本原理很简单

    就是直接操作寄存器层面,一直保持在接收状态,然后不断解析监听的数据流

  • 单次扫描有数量限制,重复去扫描时间也来不及。

  • cedar_xuesong:

    广播者会在3个频段都发送,我只需要在一个频段上获取到就可以了。

    TI 协议栈的的StartDiscovery()函数启动后,HCI层搜索到的许多广播信息应该被上层过滤掉了,

    比如同只返回一次同一个设备的广播消息,加入了设备数、时间限制。

    直接操作寄存器没试过,有空试试

  • 具体太底层的东西,我没深入研究

    协议栈底下有个HCI命令手册,蓝牙标准里面有规定这一层协议,你研究研究,估计能实现你要的功能

  • 试过有寄存器可以直接获取ble状态数据了吗,分享下

  •  

     没有试过,用CSR的芯片可以实现我的功能,就没有继续深入了。