nRF52/51系列
以nRF52832的RADIO外设(下文简称RADIO)为例,操作寄存器的方式介绍和使用该外设;
目的在于充分认识RADIO外设,和记录自己走过的坑;
全为自己理解,可能有不对的地方感谢指正。
1.空中无线协议
这是RADIO从天线发出的数据。顺序固定但是内容可以配置。
*【PREAMBLE】为前导码/前同步码:根据地址自动设置,我们无需关心,但是它是8bit还是16bit可以通过PCNF0寄存器的PLEN配置。(除2Mb/s BLE模式外,前导码长度都为1字节。 如果【ADDRESS】的第一位为0,则前导码将设置为0xAA,否则0x55)PS:Ble_1Mbit为带宽250 kHz,NRF_1Mbit带宽160 kHz。
*【ADDRESS】是“接入地址”,由我们的代码设置,这个地址由 BASE和PREFIX两部分组成,BASE分为BASE0(4Bytes)、BASE1(4Bytes); PREFIX分为PREFIX0(4Bytes)、PREFIX1(4Bytes),BASEn 和 PREFIXn 的值可以在RADIO的寄存器中设置。
BASEn 和 PREFIXn要怎么组合成“接入地址”呢?见下表:
地址共有8种组合方式,启用哪几种方式可以在RADIO的寄存器中设置。(下面代码启用0方案)
NRF_RADIO->TXADDRESS = 0 << RADIO_TXADDRESS_TXADDRESS_Pos; //TX使用的某一个地址
NRF_RADIO->RXADDRESSES = RADIO_RXADDRESSES_ADDR0_Enabled << RADIO_RXADDRESSES_ADDR0_Pos; //RX使用的某些地址,可以是多个
其中PREFIXn固定贡献1字节,BASEn可以贡献2~4字节(NRF_RADIO->PCNF1中的BALEN设置)一起组成“接入地址”,所以“接入地址”长度范围为 3~5字节。(PS:BLE广播时“接入地址”为0x8E89BED