起因:同事问起来为啥S=8和S=2需要用数据包类型为全1的方式进行测试时才能读取到Delta F1或者Delta F2;
此处对自己分析的进行了一些记录,主要参考蓝牙标准文档:RFPHY.TS.p20ed2 和 Core_v5.4;
1、首先了解Delta F1和DeltaF2的计算方式,见下图(图中为蓝牙标准文档RFPHY.TS.p20ed2内容)
大致就是说Delta F1需要固定数据为00001111才能计算,Delta F2需要固定数据为10101010,具体原因请自行了解蓝牙BLE的调制方式(GFSK);
2、然后了解一下S=8和S=2是做了什么
可以理解为通过FEC编码方式将数据改变了,但是其实际的传输方式还是采用的1M LE的方式。
需要理解的是,在BLE CODED模式下,首先会将蓝牙所有的数据使用FEC进行编码,这时原有的1个bit就变成2个bit,可以参照下图 CODED举例;而S=2其实就是进行CODED后保持不变,所以其对应的速率变成了500K,S=8则会在CODED的基础上将0变化为0011,将1变化为1100,这也就是为什么S=8速率为125k,因为1bit输入数据需要8bit输出来表示;
下图是BLE CODED的方式和部分数据
编码计算图
CODED举例
S=2/8对应CODED码
3、最后其实结合起来看
如果需要测试Delta F1和Delta F2,就需要获取到00001111及10101010这样序列的数据才行。
S=8的逻辑很简单,它根本就不能出来1010这样的,因为其最基本的组合都是0011这样,所以对应S=8只能测试Delta F1。
那么S=2呢?参考下面的图,当发送的数据bit全为1时,在进行3次运算后就可以得到输出为0101这样的序列,也就可以得到Delta F2的值,但是S=2时无法得到Delta F1的值,可以自行验证将10101010或PRBS9这样的包数据类型代入都是无法得到规律的00001111的。