美文网首页安卓
蓝牙开发中常用参数的解释

蓝牙开发中常用参数的解释

作者: 山羊爬山 | 来源:发表于2020-09-23 13:28 被阅读0次

    1、profile
    profile可以理解为一种规范,一个标准的通信协议,它存在于从机中。
    蓝牙组织规定了一些标准的profile,例如 HID OVER GATT ,防丢器 ,心率计等。
    每个profile中会包含多个service,每个service代表从机的一种能力。

    2、service
    service可以理解为一个服务,在ble从机中,通过有多个服务,
    例如电量信息服务、系统信息服务等,每个service中又包含多个characteristic特征值。
    每个具体的characteristic特征值才是ble通信的主题。比如当前的电量是80%,
    所以会通过电量的characteristic特征值存在从机的profile里,
    这样主机就可以通过这个characteristic来读取80%这个数据。

    3、characteristic
    characteristic特征值,ble主从机的通信均是通过characteristic来实现,
    可以理解为一个标签,通过这个标签可以获取或者写入想要的内容。

    4、UUID
    UUID,统一识别码,我们刚才提到的service和characteristic,都需要一个唯一的uuid来标识

    现在低功耗蓝牙(BLE)连接都是建立在 GATT (Generic Attribute Profile) 协议之上。
    GATT 是一个在蓝牙连接之上的发送和接收很短的数据段的通用规范,
    这些很短的数据段被称为属性(Attribute)。

    在BLE协议中,广播通信主要有两类使用场景:
    1)单一方向的、无连接的数据通信,数据发送者在广播信道上广播数据,数据接收者扫描、接收数据。
    2)连接的建立。

    Advertising,数据发送方,周期性的发送广播数据;
    Scanning,数据接收方,扫描、接收广播数据;
    Initiating,连接发起方,扫描带有“可连接”标志的广播数据,一旦发现,则发起连接请求(都是由Link Layer自动完成,不需要Host软件参与)。

    对BLE广播通信来说,Advertising的周期是一个比较重要的参数,因为它关系到系统的功耗和通信的效率,因此需要根据使用场景,小心设定。

    和经典蓝牙一样,协议为处于连接状态的BLE设备,定义了两种Link Layer角色:
    Master和Slave。Master是连接的发起方(Initiator),可以决定和连接有关的参数(很重要,后面会详细介绍)。
    Slave是连接的接受方(Advertiser),可以请求(或建议)连接参数,但无法决定。

    1)处于connectable状态设备(Advertiser),按照一定的周期广播ADV_IND或者ADV_DIRECT_IND包(可参考“蓝牙协议分析(5)_BLE广播通信相关的技术分析”)。
    2)主动连接的设备(Initiator),在收到广播包之后,会回应一个CONNECT_REQ请求,该请求携带了可决定后续“通信时序”的参数,例如双方在哪一个时间点、哪一个Physical Channel收发数据,等等,后面会详细描述。
    3)Initiator在发出CONNECT_REQ数据包之后,自动转变为Connection状态,成为Master角色(注意:这是“自动”的,不需要等待另一方的回应)。同样,Advertiser在收到CONNECT_REQ请求之后,也自动转变为Connection状态,成为Slave角色。
    4)此后,双方按照CONNECT_REQ参数所给出的约定,定时到切换到某一个Physical Channel上,按照Master->Slave然后Slave->Master的顺序,收发数据,直至连接断开。

    1)从Master的视角看,当它发出CONNECT_REQ后,会在1.25 ms + transmitWindowOffset到1.25ms + transmitWindowOffset + transmitWindowSize之间,发送第一个packet(M->S)。同理,Slave在收到CONNECT_REQ之后,也会在相应的时间区间去接收packet(M->S)。
    a)transmitWindowOffset可以控制这个LL Connection使用哪一段时间进行通信,从而保证了同一个Master和多个Slave之间的多个连接,可以互不影响的通信(时分)。transmitWindowOffset的取值范围是:0 ms到connInterval(后面会介绍connInterval)。
    b)从Master发出CONNECT_REQ,到Slave接收到CONNECT_REQ,是有一定的时间延迟的,因此需要一定的时间窗口(transmitWindowSize),才能保证第一个packet能否正确的发送并被接收。transmitWindowSize必须是1.25ms的倍数,最小值是1.25 ms,最大值是(connInterval - 1.25 ms),但不能超过10ms。
    c)正常情况下,所有“M->S”数据包的发送,不能超过transmitWindowSize,以便留出S->M的时间。但第一个packet例外(参考上面图片1)。

    2)Master发出第一个packet之后,将以此为起始点(称作anchor point),以connInterval为周期,接着发送后续的packet(M->S),以及接收Slave的packet(S->M),具体可参考上面图片1。
    a)这样以connInterval为周期的发送(M->S)、接收(S->M)组合(可能有多个),称作Connection Event。因此BLE面向连接的通信的基础,就是Connection Event。
    b)connInterval的大小,决定了数据传输的周期。对一个连接来说,每个周期只能有一次的收发,因此connInterval的选择,直接决定了数据传输的速度。BLE协议规定,connInterval必须是1.25ms的倍数,范围是7.5ms~4s。

    3)Slave如果没有收到第一个packet(M->S),则会以1.25 ms + transmitWindowOffset为起点,等待connInterval之后,再次尝试接收,直到接收到为止。Slave接收到packet之后,则以收到该packet的时间点为起始点(anchor point),以connInterval为周期,接着接收后续的packet(M->S),以及发送packet给Master(S->M),具体可参考上面图片2。

    Connection Update Procedure,连接参数(包括connInterval,connSlaveLatency,connSupervisionTimeout)更新的通知。只能由Master发起。
    Channel Map Update Procedure,更新Channel map。只能由Master发起。
    Encryption Procedure,对连接进行加密,可由master或者slave发起。
    Termination Procedure,断开连接。
    Connection Parameters Request Procedure,请求更新连接参数(connInterval,connSlaveLatency,connSupervisionTimeout),
    Slave或者Master都可以发起,和Connection Update Procedure不同是,这是一个协商的过程,不是一定能够成功。

    1)Master和Slave的Link Layer,都会启动一个名称为TLLconnSupervision的timer,每接收到一个有效的数据包时,该timer都会重置。
    2)连接建立的过程中,如果TLLconnSupervision超过6 * connInterval(没有接收到第一个数据包),则认为连接建立失败。
    3)在连接成功之后,如果TLLconnSupervision超过connSupervisionTimeout,则说明link loss,则执行超时断开。connSupervisionTimeout是一个可配置的参数,范围是100ms~32s,并且不能大于(1 + connSlaveLatency) * connInterval * 2。
    4)BLE协议允许slave忽略掉“connSlaveLatency”个Connection Event,在被忽略的这段时间内,Slave不需要收发数据包,也不会增加TLLconnSupervision,从而引发超时断开。connSlaveLatency是一个整数,有效范围应该在0到((connSupervisionTimeout / (connInterval*2)) - 1)之间,并且不能大于500。

    跳频(Hopping)策略
    BLE的跳频策略是非常简单的,即:每一个Connection Event,更换一次Physical Channel,当然,master和slave需要按照相同的约定更换,不然就无法通信。

    所谓的白名单,就是一组蓝牙地址;
    通过白名单,可以只允许特定的蓝牙设备(白名单中列出的)扫描(Scan)、连接(connect)我们,也可以只扫描、连接特定的蓝牙设备(白名单中列出的)。

    总结来说,LL Privacy机制是白名单(white list)机制的进阶和加强,它在白名单的基础上,将设备地址转变成Private addresses[2]地址,以降低“小人E“窃得设备地址进而进行伪装的概率。

    通过Resolvable Private Addresses,将在空中传输的设备地址加密,让“小人E”无法窃得,从而增加其伪装的难度。

    从字面理解,Encryption是一个名词,意思是“加密术”,因此LE Encryption就是“BLE所使用的加密技术”的意思。
    数据发送方在需要发送数据的时候,按照一定的加密算法,将数据加密;
    数据接收方在接收到数据的时候,按照等同的解密算法,将数据解密。

    相关文章

      网友评论

        本文标题:蓝牙开发中常用参数的解释

        本文链接:https://www.haomeiwen.com/subject/rnznyktx.html