一、NRF24L01的通讯方式
NRF24L01是Nordic公司研发的一款2.4G通信芯片,具备以下特性:
1、最多支持6通道接收。
2、支持自动应答功能,在EN_AA设置。
3、支持在0-125个频道下进行数据手法。
4、可设置接收数据有效宽度。
两个nrf24l01通讯必须满足以下条件
1、频道相同,可设置的频道为0-125,共126个频道。
2、收发地址必须相同。发送端的RX_ADDR_P0为应答通道,必须要和TX_ADDR相同;接收端的RX_ADDR_Px必须与发送端的TX_ADD相同。
3、发送的字节数和接收设置的字节数一致,默认接收长度为0。
二、通讯配置过程
接收端:
1、配置通道0-5的地址,之一,通道2-5的通道高4字节与通道1的地址共用。
2、使能全部接收的自动应答接收地址功能,都设置为0x3f。
3、设置接收端的通讯频道,0-125。
4、设置通道0-5的接收数据宽度,最大32字节。
5、设置发射增益参数。
6、配置接收工作模式。
NRF24L01_CE=0;
NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS0,RX_ADR_WIDTH);//写RX节点地址
NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P1,(u8*)RX_ADDRESS1,RX_ADR_WIDTH);//写RX节点地址
NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P2,(u8*)RX_ADDRESS2,1);//写RX节点地址
NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P3,(u8*)RX_ADDRESS3,1);//写RX节点地址
NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P4,(u8*)RX_ADDRESS4,1);//写RX节点地址
NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P5,(u8*)RX_ADDRESS5,1);//写RX节点地址
NRF24L01_Write_Reg(NRF_WRITE_REG+EN_AA,0x3f); //使能通道0的自动应答
NRF24L01_Write_Reg(NRF_WRITE_REG+EN_RXADDR,0x3f);//使能通道0的接收地址
NRF24L01_Write_Reg(NRF_WRITE_REG+RF_CH,40); //设置RF通信频率
NRF24L01_Write_Reg(NRF_WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//选择通道0的有效数据宽度
NRF24L01_Write_Reg(NRF_WRITE_REG+RX_PW_P1,RX_PLOAD_WIDTH);
NRF24L01_Write_Reg(NRF_WRITE_REG+RX_PW_P2,RX_PLOAD_WIDTH);
NRF24L01_Write_Reg(NRF_WRITE_REG+RX_PW_P3,RX_PLOAD_WIDTH);
NRF24L01_Write_Reg(NRF_WRITE_REG+RX_PW_P4,RX_PLOAD_WIDTH);
NRF24L01_Write_Reg(NRF_WRITE_REG+RX_PW_P5,RX_PLOAD_WIDTH);
NRF24L01_Write_Reg(NRF_WRITE_REG+RF_SETUP,0x0f);//设置TX发射参数,0db增益,2Mbps,低噪声增益开启
NRF24L01_Write_Reg(NRF_WRITE_REG+CONFIG, 0x0f);//配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式
NRF24L01_CE = 1; //CE为高,进入接收模式
发送端:
1、设置发送地址;接收端通道0-5的任意地址。
2、设置RX_ADDR_P0的应答地址,和步骤1地址相一致。
3、设置对应通道的自动应答功能。
4、设定最大重发次数,达到一定次数会产生中断输出。
5、设置通讯频道,0-125。
6、设置发射增益参数。
7、配置发送工作模式。
NRF24L01_CE=0;
NRF24L01_Write_Buf(NRF_WRITE_REG+TX_ADDR,(u8*)TX_ADDRESS4,TX_ADR_WIDTH);//写TX节点地址
NRF24L01_Write_Buf(NRF_WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS4,RX_ADR_WIDTH); //设置TX节点地址,主要为了使能ACK
NRF24L01_Write_Reg(NRF_WRITE_REG+EN_AA,0x3f); //使能通道0的自动应答
NRF24L01_Write_Reg(NRF_WRITE_REG+EN_RXADDR,0x3f); //使能通道0的接收地址
NRF24L01_Write_Reg(NRF_WRITE_REG+SETUP_RETR,0x1a);//设置自动重发间隔时间:500us + 86us;最大自动重发次数:10次
NRF24L01_Write_Reg(NRF_WRITE_REG+RF_CH,40); //设置RF通道为40
NRF24L01_Write_Reg(NRF_WRITE_REG+RF_SETUP,0x0f); //设置TX发射参数,0db增益,2Mbps,低噪声增益开启
NRF24L01_Write_Reg(NRF_WRITE_REG+CONFIG,0x0e); //配置基本工作模式的参数;PWR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断
NRF24L01_CE=1;
注意:配置地址为5byte,SPI写入地址从低到高写入。
char addr[5] = {0x01,0x02,0x03,0x04,0x05};//其中先写入的0x01为NRF通道地址的最地位。
三、通讯测试如下:
四、一对多通讯原理
1、修改通讯频道进行通讯。发送端设置不同的频道进行通讯,接收端想要和对应通道的时候在切换过去与相应的发送端通讯。
2、修改通讯地址进行通讯。发送端设置为不同的发送地址,接收端可轮询设置RX_ADDR_P0地址,最终实现多通道通讯。
3、以上两种方式可组合使用,实现一对多通讯的功能。