zoukankan      html  css  js  c++  java
  • 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如下:

     

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

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

  • 相关阅读:
    单变量线性回归
    【记】国奖交流会
    转【研究生第一篇学术论文常犯问题总结】
    this.$confirm里面使用await异步调取接口数据
    margin和padding的值是百分比的时候是怎么计算的?
    原生js实现三级联动下拉框
    两个数组里面的对象元素根据相同的id合并到一个数组
    制作遮罩层的样式
    自定义表单验证方法的使用
    封装获取操作系统和浏览器类型的方法
  • 原文地址:https://www.cnblogs.com/Montauk/p/6296751.html
Copyright © 2011-2022 走看看