(原创)24L01寄存器说明,及编程方法
0赞前一篇文章中我介绍了24L01的数据收发方法,但是如果你对寄存器的状态和地址不清楚是很难理解的,为了消除一些初学者的顾虑。我针对这个问题,介绍一下24L01的各个寄存器的地址及格式,希望大家能彻底理解这个芯片。
1.CONFIG寄存器:地址00
|
保留,为0 |
MASK_RX_DR |
MASK_TX_DS |
MASK_MAX_RT |
EN_CRC |
CRCO |
PWR_UP |
PRIM_RX |
MASK_RX_DR 和MASK_TX_DS和MASK_MAX_RT 主要用于设置status寄存器中的这三位表示的事件发生时是否通过IRQ引脚来反映,1,不反映在IRQ上,0反映在IRQ上。
EN_CRC:1,启用CRC校验,0不启用
CRCO:0:1个字节crc,1:两个字节crc
PWR_UP:1:powerup 0:powerdown
PRIM_RX:1:PRX 0:PTX
2.EN_AA寄存器:地址01
|
保留,0 |
保留,0 |
ENAA_P5 |
ENAA_P4 |
ENAA_P3 |
ENAA_P2 |
ENAA_P1 |
ENAA_P0 |
是否启用各data pipe的自动应答功能,1启用,0,不启用,复位默认为启用
3. EN_RXADDR寄存器:地址02
|
保留,0 |
保留,0 |
ERX _P5 |
ERX _P4 |
ERX _P3 |
ERX _P2 |
ERX _P1 |
ERX _P0 |
是否启用各data pipe,1启用,0,不启用,复位为00000011,即默认启用datapipe1和datapipe 0
4. SETUP_AW寄存器:地址03
|
保留,0 |
保留,0 |
保留,0 |
保留,0 |
保留,0 |
保留,0 |
AW1 |
AW0 |
地址宽度,所有data pipe 都一样
AW1,AW0=00,非法,01,3字节地址,10,4字节地址,11,5字节地址,默认为11,即5字节地址
5. SETUP_RETR寄存器:地址04(设置自动重传参数)
|
ARD(复位为0000) |
ARC(复位为0011) |
ARD=0000,重传间隔为250+86us
0001,重传间隔为500+86us
…………………………….
1111, 重传间隔为4000+86us
ARC=0000,禁止自动重传
0001,重传1次
……………………………..
1111,重传15次
6. RF_CH寄存器:地址0x05,设置频道
|
保留,0 |
RF_CH |
7个bit用于设置通信频道,共126个频道,复位为00000010,频道2
7.RF_SETUP寄存器:地址0x06
|
保留,0 |
保留,0 |
保留,0 |
PLL_LOCK |
RF_DR |
RF_PWR |
LNA_HCURR |
PLL_LOCK:
RF_DR:速率,0:1M 1:2M
RF_PWR:00 18dbm
- 12dbm
10 6dbm
11 0dbm
8. STATUS寄存器:地址0x07
|
保留0 |
RX_DR |
TX_DS |
MAX_RT |
RX_P_NO |
|
|
TX_FULL |
RX_DR: 接收数据准备好,接收缓冲区有新的数据到达时被置为1,向该位写1可清除该位
TX_DS: 缓冲区数据被发送完后被置为1,如果自动应答启用的话,只有在对方应答到达后才会置1,向该位写1可清除该位
MAX_RT: 若没有收到对方确认,24L01会自动超时重传,当到达最大重传次数后,该位被置1,向该位写1可清除该位。若不清除该位则无法进一步通信。
RX_P_NO: 3bit,表示正在读取缓冲区数据载荷的数据管道编号。000~101:数据管道编号。
110:没有使用
111:接收缓冲区空
Ps:接收到新数据,数据发送完毕,重传到达最大次数都会引起中断,通过读取状态字可查询中断事件。
中断由IRQ引脚低电平触发。
9. OBSERVE_TX寄存器:地址0x08(发送观察寄存器,用于观察发送状态)
|
PLOS_CNT |
ARC_CNT |
PLOS_CNT:丢包计数器,最大到15,写RF_CH寄存器可清除计数值
ARC_CNT:重发次数计数
10. CD寄存器:地址0x09(载波检测寄存器)
|
保留0 |
保留0 |
保留0 |
保留0 |
保留0 |
保留0 |
保留0 |
CD |
CD:检测到载波则置1,否则为0
11.RX_ADDR_P0寄存器:地址0x0A(data pipe 0接收地址)
共5个字节,低字节在前,高字节在后默认为0xe7e7e7e7e7
12.RX_ADDR_P1寄存器:地址0x0B(data pipe 1接收地址)
共5个字节,低字节在前,高字节在后默认为0xC2C2C2C2C2
13.RX_ADDR_P2寄存器:地址0x0C(data pipe 2接收地址)
共5个字节,低字节在前,高字节在后0xC2C2C2C2C3
14.RX_ADDR_P3寄存器:地址0x0D(data pipe 3接收地址)
共5个字节,低字节在前,高字节在后0xC2C2C2C2C4
15.RX_ADDR_P4寄存器:地址0x0E(data pipe 4接收地址)
共5个字节,低字节在前,高字节在后0xC2C2C2C2C5
16.RX_ADDR_P5寄存器:地址0x0F(data pipe 5接收地址)
共5个字节,低字节在前,高字节在后0xC2C2C2C2C6
17. TX_ADDR寄存器:地址0x10(发送地址寄存器,对发送端而言,相当于源地址,也是接收端发回确认的目的地址)
共5个字节,默认为0xe7e7e7e7e7
18.RX_PW_P0寄存器:地址0x11
|
保留0 |
保留0 |
RX_PW_P0 |
RX_PW_P0:DATA PIPE0 的接收数据载荷长度
0:非法
1:1个字节
…………………..
32:32个字节
19.RX_PW_P1寄存器:地址0x12
|
保留0 |
保留0 |
RX_PW_P1 |
RX_PW_P1:DATA PIPE1 的接收数据载荷长度
0:非法
1:1个字节
…………………..
32:32个字节
20.RX_PW_P2寄存器:地址0x13
|
保留0 |
保留0 |
RX_PW_P2 |
RX_PW_P2:DATA PIPE2 的接收数据载荷长度
0:非法
1:1个字节
…………………..
32:32个字节
21.RX_PW_P3寄存器:地址0x14
|
保留0 |
保留0 |
RX_PW_P3 |
RX_PW_P3:DATA PIPE3 的接收数据载荷长度
0:非法
1:1个字节
…………………..
32:32个字节
22.RX_PW_P4寄存器:地址0x15
|
保留0 |
保留0 |
RX_PW_P4 |
RX_PW_P4:DATA PIPE4 的接收数据载荷长度
0:非法
1:1个字节
…………………..
32:32个字节
23.RX_PW_P5寄存器:地址0x16
|
保留0 |
保留0 |
RX_PW_P5 |
RX_PW_P5:DATA PIPE5 的接收数据载荷长度
0:非法
1:1个字节
…………………..
32:32个字节
24. FIFO_STATUS寄存器:地址0x17
|
保留0 |
TX_REUSE |
TX_FULL |
TX_EMPTY |
保留0 |
保留0 |
RX_FULL |
RX_EMPTY |
TX_REUSE:
Enhanced ShockBurst™ 模式下发送数据流程
- 配置config寄存器,将PRIM_RX置为0,表示发送模式
- 当需要发送数据时,首先需要配置地址TX_ADDR,这个地址应该是接收端地址,即应该是接收端6个data pipe地址中的一个即可保证对方收到。如果要使用自动应答,当对方进行自动应答时也会使用这个地址,应答消息由发送端的datapipe0接收,所以发送的datapipe0的地址应等于TX_ADDR,若需要自动应答则。(若是和上一次发送是相同地址,则可不用重写地址)
- 配置TX_PLD,将需要发送的数据送入nrf24L01,通过SPI连续写入数据载荷时,nrf24L01将自动对字节数计数。(数据载荷必须在cs为低的时候连续写入)
- 将CE置高并维持最少10us,这个脉冲将启动ShockBurst发送
-
NRF24L01:
- 打开射频
- 启动晶振
- 数据打包
- 发送
- 如果启动了自动应答(且重传次数未达到最大值),NRF24L01将自动转入接收状态。若在规定时间内收到了应答包,则这是一次成功的发送,TX FIFO中的数据被清除,同时置高status寄存器中的TX_DS位。如果在规定时间内未收到应答包则自动重传(当启用自动重传时,由SETUP_RETR寄存器中的ARC位指定重传次数)。当重传次数到达最大值依然没有收到应答,则status寄存器中的MAX_RT被置高,TX FIFO缓冲区中的数据并不被移除。MAX_RT 或TX_DS被置高都会在IRQ引脚上引起中断(低电平有效,重写status寄存器中的对应位可清除)。在到达最大重传次数并引发中断后,在没有清除MAX_RT之前,任何数据都不能发送。每次发生MAX_RT 中断,PLOS_CNT计数器都会加1,用于统计丢包数。
- CE置低以后,设备进入STANDBY_I状态。否则TX FIFO缓冲区中的下一个数据载荷将被发送。如果数据缓冲区空,而CE仍然为高,设备将进入STANDBY-II模式。
如果设备处于STANDBY-II模式,当CE置低后,设备将进入STANDBY-I模式。
(STANDBY模式可减少电流的消耗,在该模式下,SPI通信仍然可以完成)
希望大家能在以后的使用当中不断发现24L01的魅力,在飞思卡尔的道路上一起创造传奇。
