RW_BLE_CORE记录传输信道BLE的传输信道在2.4G频段有40个channel包括2种物理信道:播送信道和数据信道数据帧中设置Access Address用于标识该信道,防止信道碰撞Channel MAP如下:数据帧通信蓝牙帧构造如下:Preamble:根据Access Address而定,假设AA的LSB〔最右bit〕bit为1,那么前导便是10101010b,反之那么为01010101bAccess Address:播送帧的AA为:0x8E89BED6其他情况可以是一个32bit的随机数AA需满足以下条件·不超过连续6个1或者0·与播送帧的AA不同bit超过1个·不能4byte一样·0 1跳变不能超过24次·MSB 6bit 0 1跳变超过2次以下逐个介绍PDU一、Advertising Channel PDU蓝牙播送帧帧构造其中Header的帧格式如下:其中,a、播送帧类型〔PDU Type〕分为以下几类:• ADV_IND: connectable undirected advertising event• ADV_DIRECT_IND: connectable directed advertising event• ADV_NONCONN_IND: non-connectable undirected advertising event• ADV_SCAN_IND: scannable undirected advertising eventb、Length:3~37bytes播送帧分为很多种,其区别就是payload所代表的意义不同,以下分别对几种播送帧作分别阐释:1、ADV_INDADV_IND的payload格式如下:在播送帧帧头中的TxAdd位是播送地址的标示位:TxAdd==0:AdvA地址为公用地址;TxAdd==1:AdvA地址为随机地址。
AdvData那么是播送HOST的播送数据2、ADV_DIRECT_IND这种帧用于直接接入的播送事件ADV_DIRECT_IND的payload帧格式如下:其中AdvA的意义与ADV_IND一样InitA为播送发起者地址:RxAdd==0:发起者地址是公用地址;RxAdd==1:发起者地址是随机地址注意:该帧不包含任何HOST数据3、ADV_NONCONN_IND用于不可接入不直达〔non-connectable undirected〕的网络其payload意义与ADV_IND类似4、ADV_SCAN_IND用于可扫描不直达网络Payload意义与ADV_IND类似二、Scaning PDUs1) SCAN_REQ:这是扫描请求帧,处于播送状态的接收设备接收这种帧此处,ScanA为扫描者的地址,其地址由TxAdd控制是公共地址还是随机地址AdvA为该扫描帧的目的地址由RxAdd控制意义2) SCAN_RSP扫描确认处于播送状态的设备在收到扫描请求后,需要回复扫描确认帧AdvA地址意义由TxAdd确定ScanRspData为播送端的附带数据三、Initiating PDU该局部为连接发起协议。
发起的帧格式仅一种:CONNECT_REQ由发起方发送该帧,播送方接收该帧1) CONNECT_REQCONNECT_REQ帧格式如下:TxAdd确认InitA地址为公共地址还是随机地址;RxAdd确认AdvA地址为公共地址还是随机地址LLData的数据格式如下:AA:AccessAddressCRCInit:CRC校验的初始值,它应该是LinkLayer产生的一个随机值WinSize:发送窗长度参数transmitWindowSize=WinSize*1.25msWinOffset:发送窗起始偏移量TransmitWindowOffset=WinOffset*1.25ms上述两个window意义如下:Interval:确定connect interval的时间长度connInterval = Interval * 1.25 msLatency:connSlaveLatency =LatencyTimeOut:connSupervisionTimeout= Timeout * 10 ms〔100ms~32s之间〕,当两帧数据之间的时间间隔超过6*connInterval或者connSupervisionTimeout时,那么认为连接丧失。
ChM:即ChannelMAP,一共0~36个信道LSB代表channel0,哪一个是1,那么哪一个信道有效Channel 37~39保存Hop:5~16之间的随机值,用于设置HopIncrement用于计算不使用的信道编号unmappedChannel = (lastUnmappedChannel + hopIncrement) mod 37如果计算结果是属于保存信道,那么通过下式计算:remappingIndex = unmappedChannel mod numUsedChannelsSCA:设置Master睡眠时钟准确度的最大值对应表如下:四、Data Channel PDU数据信道的帧格式如下:其中包括16bit Header,长度可变的Payload,和一个信号完整性确认字段〔MIC〕1、关于Header和MICHeader的数据格式如下:每个字段的意义如下:MIC字段使用的时候,有两个条件:1、不能使用于非加密的数据帧;2、数据帧payload长度不能为0字长为4byte2、关于PayloadPayload分为两类,LL Data PDU和LL Control PDU〔LLID==11b〕。
LL Data PDU里面又分为两类,一类是完整数据帧或帧碎片起始帧〔LLID==10b〕,另一类是帧碎片〔LLID==01b〕其中,帧碎片帧的帧长度可以为0,而完整〔起始〕帧的长度不可以为0下面具体介绍LL Control PDU:LL Control PDU的帧格式如下:其帧长度不能为0,其中包含两个字段:Opcode和CtrDataOpcode用于确定控制帧类型:假设收到的LLC PDU格式不支持或者是无用帧,那么回复LL_UNKNOWN_RSP PDU,此时的Type字段需设置成收到的无用的opcodeLL_CONNECTION_UPDATA_REQ:该帧的帧格式如下:这些信息的意义在下一章的四中有详述LL_CHANNEL_MAP_REQ:LL_TERMINATE_IND:这个ErrorCode在蓝牙协议中有具体制定意义[Vol2 Part D]LL_ENC_REQ:和加密相关的请求帧LL_ENC_RSP:和加密相关的回复帧LL_START_ENC_REQ:没有CtrData字段LL_START_ENC_RSP:没有CtrData字段LL_UNKNOWN_RSP:LL_FEATURE_REQ:LL_FEATURE_RSP:LL_PAUSE_ENC_REQ:没有CtrData字段LL_PAUSE_ENC_RSP:没有CtrData字段LL_VERSION_IND:LL_REJECT_IND:关于蓝牙通信协议的理解一、时钟要求Active状态下小于±50ppm。
Sleep Mode下小于±500ppm二、设备过滤除了仅支持不可连接的播送系统〔non-connectable advertising〕,其他模式均需支持设备过滤播送、扫描、连接发起均具有各自独立的过滤机制如果芯片不支持这几种模式的话,那就可以不支持设备过滤设备过滤是为了尽量减少不必要的数据通信设备过滤时需要具备一个白,白容包括不过滤设备的地址和地址类型〔公共或随机〕白容由HOST设置以下对各种过滤模式作一个介绍:1、播送过滤支持过滤方式如下,一次仅支持一种方式:·播送设备仅处理来自白的设备的扫描、连接请求·播送设备处理一切设备的扫描、连接请求〔复位值〕·播送设备处理所有设备的扫描请求,仅处理白的连接请求·播送设备处理所有设备的连接请求,仅处理白的扫描请求2、扫描过滤支持过滤方式如下:·扫描设备仅处理来自白设备的播送帧·扫描设备处理一切设备的播送帧假设播送方已经过滤该扫描设备的话,通信不能成功3、发起过滤支持过滤方式如下:·被发起设备处理来自白所有设备的连接发起请求·被发起设备忽略白,仅处理host给出设备的连接发起请求三、非连接状态简述1、standbyStandby是复位后的芯片初始状态,由它可以进入播送、扫描和连接状态。
2、advertising进入播送状态后,便开场发送播送帧在发送完一帧播送帧以后,advertising event将被关闭,来适应其他功能播送事件有以下几种类型:第一帧播送帧应该在channel index中的最低的播送信道发送播送事件是否有回复帧由播送帧类型决定,具体如下表:当收到错误的返回帧时,播送端会在下一个播送信道发送播送帧,或直接停顿播送事件播送事件间隔必须是625us的倍数,围在20ms~10.24s,其设置方式如下:T_advEvent = advInterval + advDelayscannable undirected和non-connectable undirected事件,advInterval长度必须大于100ms;connectable undirected事件,advInterval长度必须大于等于20ms advDelay是0~10ms的伪随机数连续播送帧发送示意图如下:a〕Connectable Undirected Event Type如图4.5接收到CONNECT_REQ之后,播送方便退出播送状态,进入Slave状态b〕Connectable Directed Event Typec〕Scannable Undirected Event Typed〕Non-connectable Undirected Event Type1、 scanning检测状态是用来监听播送帧的,其状态由HOST控制,分为主动扫描和被动扫描。
扫描状态下有两个参数scanWindow、scanInterval用于设置一次扫描的时间扫描时间不能长与10.24s,scanWindow SCAN_REQADV_DIRECT_IND PDU/ADV_NONCONN_IND不回复SCAN_REQ扫描需进展退避操作具体看文档吧,就不贴进来了2、 initiatinginitiating没有channel index的限制当收到一个在过滤白的ADV_IND或ADV_DIRECT_IND,发起者将会发送一个CONNECT_REQ给播送方发送完CONNECT_REQ后退出发起状态,进入连接状态四、连接状态简述:当发起者发送CONNECT_PDU或者播送方收到CONNECT_REQ,那么认为连接被创立,但此时并非认为已经建立连接。