TI CC2541的通讯抓包.

Posted Montauk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TI CC2541的通讯抓包.相关的知识,希望对你有一定的参考价值。

 

Preamble: 引导码, 为1个字节, 不显示出来.

Access Address: 访问地址, 长度为4个字节, 所有广播包的访问地址都是0x8E89BED6, 如下图.

 当PDU在广播信道传输时, 就是广播PDU, 如果在数据信道传输, 就是数据PDU, CRC就是根据这个PDU计算的.

广播信道的PDU包括一个16bit的头, 跟一个可变长度的负载.

 

 

发送跟接受地址的0/1, 代表发送或者接收方的地址是:

0: 公共地址

1: 随机地址

 

 

这里, 发送方地址为随机地址, 接收方地址为公共地址, PDU长度为17个byte.

说回PDU类型:

ADV_IND用于可连接的非定向广播时间中, 具有以下格式:

 

 

TxAddr为随机地址, 那么这个地址就在AdvA中, 6个字节, 即MAC地址, 而且是随机的.

AdvData里面是广播者的数据.

 

再看一个ScanQeq跟ScanRsp的两个数据包:

 

首先,发请求的

TxAdd是1, 证明是随机地址.

Adv的PDU头展示的Type是4, 即: ADC_SCAN_RSP

static uint8 scanRspData[] =
{
  // complete name
  0x14,   // length of this data
  GAP_ADTYPE_LOCAL_NAME_COMPLETE,   //0x09
  0x53,   // \'S\'
  0x69,   // \'i\'
  0x6d,   // \'m\'
  0x70,   // \'p\'
  0x6c,   // \'l\'
  0x65,   // \'e\'
  0x42,   // \'B\'
  0x4c,   // \'L\'
  0x45,   // \'E\'
  0x50,   // \'P\'
  0x65,   // \'e\'
  0x72,   // \'r\'
  0x69,   // \'i\'
  0x70,   // \'p\'
  0x68,   // \'h\'
  0x65,   // \'e\'
  0x72,   // \'r\'
  0x61,   // \'a\'
  0x6c,   // \'l\'

  // connection interval range
  0x05,   // length of this data
  GAP_ADTYPE_SLAVE_CONN_INTERVAL_RANGE,
  LO_UINT16( DEFAULT_DESIRED_MIN_CONN_INTERVAL ),   // 100ms
  HI_UINT16( DEFAULT_DESIRED_MIN_CONN_INTERVAL ),
  LO_UINT16( DEFAULT_DESIRED_MAX_CONN_INTERVAL ),   // 1s
  HI_UINT16( DEFAULT_DESIRED_MAX_CONN_INTERVAL ),

  // Tx power level
  0x02,   // length of this data
  GAP_ADTYPE_POWER_LEVEL,    //0x0A
  0       // 0dBm
};

这样看来, 这个ScanRspData里面包含几部分,包括

第1个字节, 是名称的数据长度: 0x14, 注意, 是20

第2个字节, 0x09, 表示接着是BLE全名, 如果0x08表示是短名.

接下来就是BLE的名字SimplePeripheral, 一共19个字节, 加上前面一个字节, 就是20个字节.

接着又是数据长度, 5个字节

接着是最小最大连接间隔设定的代号, 0x12

接着是4个字节的具体设置.

最后是关于发射的强度/功率的设置的3个字节, 0dBm.

 

 

再来看一个从扫描到连接的例子:

 首先发一个连接请求:

 

 连接请求的格式是:

 

InitA是发起者的地址, AdvA就是广播者的地址, 也就是要连接的目标地址.

接着是LLData里面22个字节.

 

Inteval/Lantency/Timeout就是BLE连接属性

0x0018/0x0000/0x0048,  这是iPhone手机的默认设置.

LLID为1, 表示负载域是一个LL DATA PDU, 数据包, 如果是3, 表示是控制包.

NESN: nextExpectedSeqNum.

MD如下:

 

 

看得我都要怀疑人生了, 我看这个干嘛???

好吧, 这个是整个通讯的建立过程, 对无线的架构师可能是有参考意义的...

 

以上是关于TI CC2541的通讯抓包.的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 和 TI BLE CC2541 之间发送文本?

TI CC2541的整体目标

蓝牙(BLE)应用框架接口设计和应用开发——以TI CC2541为例

在做cc2541主从一体机时碰到的问题

CC2541 Large OAD 空中升级方式

IAR 9+ 编译 TI CC2541 出现 Segment ISTACK (size: 0xc0 align: 0) is too long for segment definition.(示例代码