(原创)24L01收发数据-续1
0赞接着上一个话题,24L01作为飞思卡尔汽车设计大赛必不可少的一个原件,我就24L01收发数据的问题做进一步的扩充。
24L01无论何时收到确认,都会认为上一个数据包发送成功,这个数据包将被从发送缓冲区清除,并且把TX_DS IRQ置为高。
每次开始spi写,读回来的都是状态字。
射频收发工作在2.4~2.4835G
收发共用天线接口
GFSK调制
250k,1M,2M的空中速率
发射输出功率最高0dBm,即1mW
6路1对6星型网络(使用6个data pipe)
增强型ShockBurst包格式
|
前置域1byte |
地址域3-5byte |
包控制域9bit |
载荷0-32字节 |
CRC1-2字节 |
地址域是接收机地址
包控制域
|
载荷长度6bit |
Pid2bit |
NO_ACK1bit |
载荷长度6bit说明最多32字节
Pid用于包编号,用于确定是重发包还是新包
NO_ACK用于表示是否自动应答,如为1则表示无需自动应答
自动应答的延时和重发次数是可编程的。
/********************************************************************************/
/*函数:void SetRX_Mode(void)
/*功能:数据接收配置
/********************************************************************************/
void SetRX_Mode(void)
{
NRFCE=0;
SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f); // IRQ收发完成中断响应,16位CRC,主接收
NRFCE = 1;
Dly_10us(15); //old is '130'
}
将00001111写入config寄存器
以下是config寄存器说明
|
保留,为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
确实,学习电子的同学都知道,格式控制最繁琐,也是电子的核心之所在,希望大家能对24L01有更加深入的认识,希望大家能共同探讨,共同进步!
