nrf51822和nrf52832的bug
从徐大佬那里了解到的,没想到到了nrf52832还有这个,感觉不算一个bug,而像一个设计。个人理解,哈哈
其主要是:
可以通过设置寄存器可以控制接受数据包的access address,其实就是ble的访问地址。
然后利用芯片寄存器设置CRC以及其他操作来获取到数据包数据。主要使用的寄存器字段
1.PCNF0寄存器中几个字段,来影响接受数据包的长度以及其他东西,下面详细说。
2.PCNF1寄存器 STATLEN字段,静态字段。
3.CRCCNF 配置CRC的,可以配置而不使用CRC
4.DATAWHITEIV 白化处理配置
nrf52832接受的数据
nrf52832数据手册中指出只有部分数据可以出现在内存中。对于标准的BLE数据包来说,s0,length
s1,设置成符合BLE包即。一般情况下,其中preame、address、crc是不会出现在内存中的。但static
段可以出现在内存中,可以将BLE包所有当成BLE段,然后利用下面的机制.(看过徐大佬的之后,感觉
好神奇.)
还有一个就是preame,芯片通过前导码来识别数据包,然后进行地址匹配来识别通信的终端,可以通过
PCNF0来配置其地址,利用上面所的。那个prefx是死的(1byte)。而base则是可以配置的,虽然说规定
的是[2,4],但是可以设置成1,( 这就是所说的那个bug )。然后配合preame和一些设置,可以抓取任意
包。
nrf52832的the static payload
按说BLE是不需要该段的,但是现在需要利用他。再抓取包的时候,要获取access address
不知道这个地址,所以要抓取任意包,然后分析出正确的access address。其实就是循环扫描
非广播信道,来提取access address.
nrf52832抓取任意包机制
前面说了preame配置上access address的一些设置实现这个功能。这里进行详细的说一下。
还有一点是***好像芯片在进行地址匹配的时候,可能会读取一大串数据,preame也在匹配
之列****(意思就是,地址匹配也会匹配preame,就是这个意思)。其是:
1.base address设置成0x00 PREFIX设置成AA
2.上面说地址匹配会从preame之前,所以相当于把preame当成了access address,以改机制
来完成任意数据抓取。(其更深层次从原理我也搞不懂)
3.preame可以为0xAA或者0x55,芯片根据其access address最低位来设置。而这里将preame
当作访问地址,所以匹配地址可能为0x00AA和0x0055。看徐大佬的方案,直接利用前面两个地址
数字关系。(0x55<<2不就是0xAA,也就是说AA>>两位不就是55对应的吗)
出现干扰情况还没学会。。。。,出现干扰就是多01导致提前地址匹配,从而后面数据多出来一些
杂乱数据。要明白一点,信道传输least先传输。1010传输0101 而 0101传输1010,所以匹配你懂
00000000 10101010 access address 0xAA
00000000 01010101 0 access address 0x55 所以需要删除payload的LSB
00000000 10101010 1010 access address