突破渴望

(原创)24L01寄存器说明,及编程方法

0
阅读(7041)

前一篇文章中我介绍了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™ 模式下发送数据流程

  1. 配置config寄存器,将PRIM_RX置为0,表示发送模式
  2. 当需要发送数据时,首先需要配置地址TX_ADDR,这个地址应该是接收端地址,即应该是接收端6个data pipe地址中的一个即可保证对方收到。如果要使用自动应答,当对方进行自动应答时也会使用这个地址,应答消息由发送端的datapipe0接收,所以发送的datapipe0的地址应等于TX_ADDR,若需要自动应答则。(若是和上一次发送是相同地址,则可不用重写地址)
  3. 配置TX_PLD,将需要发送的数据送入nrf24L01,通过SPI连续写入数据载荷时,nrf24L01将自动对字节数计数。(数据载荷必须在cs为低的时候连续写入)
  4. 将CE置高并维持最少10us,这个脉冲将启动ShockBurst发送
  5. NRF24L01:
    1. 打开射频
    2. 启动晶振
    3. 数据打包
    4. 发送
  6. 如果启动了自动应答(且重传次数未达到最大值),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,用于统计丢包数。
  7. CE置低以后,设备进入STANDBY_I状态。否则TX FIFO缓冲区中的下一个数据载荷将被发送。如果数据缓冲区空,而CE仍然为高,设备将进入STANDBY-II模式。

如果设备处于STANDBY-II模式,当CE置低后,设备将进入STANDBY-I模式。
(STANDBY模式可减少电流的消耗,在该模式下,SPI通信仍然可以完成)

希望大家能在以后的使用当中不断发现24L01的魅力,在飞思卡尔的道路上一起创造传奇。