BTLE/BT4.0低功耗蓝牙无线发包器(可模拟iBeacon、建链、通信等)

一个基于HACKRF板子的BTLE/BT4.0无线发包器,所有链路层包格式都支持(详见 Chapter 2&3, PartB, Volume 6, Core_V4.0.pdf 标准可自行搜索下载)。可用来发射你想要的任意BTLE包(支持RAW格式,即直接裸GFSK调制),比如iBeacon包,TI网站上(http://processors.wiki.ti.com/index.php/BLE_sniffer_guide)给的建链过程包等。配合Packet Sniffer,你想干什么都可以。

代码: https://github.com/JiaoXianjun/ (BTLE项目)

视频演示:  http://v.youku.com/v_show/id_XNzUxMDIzNzAw.html

build方法:

使用方法1:

使用方法2:

方法二只是把方法1的参数放到一个文本文件当中,每个参数一行,以#开头的表示注释行。参见hackrf-tools/src里的例子packets.txt。

“packetX”是描述包的字符串。所有包组成一个包序列。

“rN”表示该序列重复发送N次。如果不写rN,则默认发送一次。

包描述字符串格式 (“packetX”):

每个字符串以信道号开头(0~39信道),接下来是包格式关键字(RAW/iBeacon/ADV_IND/ADV_DIRECT_IND/etc,参见最后的例子) ,接下来是字段“名-值”对,最后一个字段“名-值”是Space-xxx,表示本包后等待xxx毫秒,再发送下一个包。因此可以构成任意发包序列/方案。各字段之间以“-”连接。

iBeacon包例子(iBeacon原理:http://www.warski.org/blog/2014/01/how-ibeacons-work/ )

以上命令以100ms间隔重复发送iBeacon包,可以在iPhone或者iPad下载“Locate”软件来看发出的iBeacon信息。包描述字符串解释:

TI网站上连接建立的例子:  http://processors.wiki.ti.com/index.php/BLE_sniffer_guide

以上命令模拟设备1和设备2建立连接,并可被packet sniffer捕捉到(packet sniffer设置为37号广播信道,最后会根据建链过程携带的配置信息自动跳到9号数据信道接收到数据包)

第一包:设备1在37号信道发送广播包 ADV_IND,携带自己MAC 地址  。

第二包:设备2在扫描状态收到设备1的广播包后,发送建链请求包 CONNECT_REQ,携带一些建链信息,例如:自身MAC地址(InitA),建链目标MAC地址(AdvA),接入地址(AA,供对方将来使用),CRC初始化值(供对方将来使用),跳频信道map和方案(ChM和Hop字段)供对方选择数据信道,等。

第三包:设备1根据设备2的建链请求携带的信息,在数据信道9上发送一个链路层空数据包,表示建链完成。DATA字段后的单个“X”表示无数据。

三包时间间隔1s(1000ms)。

支持的所有包格式描述字符串举例:

RAW packets: (All bits will be sent to GFSK modulator directly)

ADVERTISING CHANNEL packets:

DATA CHANNEL packets: