使用usrp + universal radio hacker分析2.4G无线信号
相关工具安装
需要使用usrp b210 、universal radio hacker、nrf24l01无线模块、stm32开发板。
usrp b210配置
需要安装uhd
universal radio hacker安装
sudo python3 -m pip --upgrade pip
sudo python3 -m pip install urh
如果遇到numpy报错,更新一下nmpy。
sudo python3 -m pip --upgrade numpy
sudo urh
ps:命令如果加sudo就全加,如果不加sudo就全都不加。
stm32开发板设置
nrf24l01地址设置:地址为 0x34,0x43,0x10,0x10,0x01
波特率和通信信道设置,其中波特率为2M,通信信道为40,即中心频率为2.44Ghz,带宽为2Mhz。
使用gnuradio进行抓包
根据带通采样定律,采样率要设置为4M。中心频率设置为2440M,带宽设置为2M进行采样。
使用单片机进行数据的发送,将usrp放在旁边进行抓包,将数据包保存成raw格式。
信号持续的时间非常短,很难在屏幕上看到。
信号分析
使用urh打开刚刚保存的文件,其中幅值比较高的,就是nrf24l01的信号
放大后。
接着调整urh的参数,对信号进行解调。
最下面的框里会出现解调过的bit流。
协议分析
nrf24l01使用的是Enhanced Short Burst协议
发送的数据格式为:
前导码(1 byte)(01010101或者10101010)
地址(3-5 byte)(刚刚单片机代码中设置的0x34,0x43,0x10,0x10,0x01)
包控制字节(9 bit)
数据(32byte)
crc校验(2 byte)
Enhanced Short Burst协议内容很多,就不详细讲了,有兴趣可以查看官方资料。
根据这个协议,我们尝试对解读一下urh解调的数据。
首先找到前导码,然后按照8字节对数据进行切片。
分析数据如下:
同步载波:(这部分应该是载波同步用的,博主对信号同步不是很了解,往指正。)
11111111111111100110000000000000000000000000000000000000000000000000000000000000000000000000000
前导码:
01010101
地址:0x01,0x10,0x10,0x43,0x34
00000001 00010000 00010000 01000011 00110100
包控制字节:
110011010
数据:
01110000 01110001 01110010 01110011 01110100 01110101 01110110 01110111 01111000 01111001 01111010 01111011 01111100 01111101 01111110 00100000 00100001 00100010 00100011 00100100 00100101 00100110 00100111 00101000 00101001 00101010 00101011 00101100 00101101 00101110 00101111 00110000
CRC校验
01000011 00111100
00
使用二进制转字符串工具可以验证解调的是否正确。
接收端回复格式为:
1111111111110011000100000000000000000000000000000000000000000000000000000011000100000000010
前导码:
01010101
地址:
00000001 00010000 00010000 01000011 00110100
包控制字节
110011100
CRC校验字节
11010010 11100111
0
ps:只有发送端数据正确的情况呀,接收端才会回复,因此有回复的发送信息一定是正确的,没有回复的一定是错误的。但是回复信息可能是对的,也可能是错误,因为接收端没有去验证回复信息是否格式正确。