既然是一对多可变payload宽度的通信,肯定是包含两个方面:
(1)能进行一对多通信(同个频道下一般最多是一对六)
(2)发送的数据包宽度是可变的
配置NRF24L01进行一对多通信,前提是一对一通信机制必须要清楚。
我个人的理解是这样的
PTX端需要配置的地址TX_ADDR和RX_ADDR
PRX端需要配置的地址RX_ADDR
至于以上地址在这个机制中是怎么用的,为什么会相同,下面会解释。
进入正题
ShockBurst™下数据包格式:
PTX端发送数据前,会先对数据进行打包。在这个数据包红色框中的就是PTX发射端的地址TX ADDR。当PRX接收到一包有效的数据时,它会解析这个数据包中的Address地址是否跟它自身RX_ADDR相同,如果是相同的,那它就认为这是个发给我的包,如果不相同呢,那肯定是发给别人的包,就会被丢弃。好的,发送和接收都搞明白了,还有应答信号(前提是使能了自动应答)。前面说了PRX会对比Address地址是否跟自身RX_ADDR相同,一旦对比成功,PRX会自动转换到发送模式并以这个地址作为发送地址发送应答信号。那么PTX是怎么接收这个应答信号的呢(前提是使能了自动应答),PTX在发送了一包数据后会自动转换为接收模式,等待接收PRX发过来的应答信号。那PTX是怎么知道需要接收哪个从机发送过来的应答信号呢,PTX端的RX_ADDR就起作用了,PTX也会检测应答包中的地址是不是跟自身的RX_ADDR地址相同,相同就表示这是个正确的应答包,TX_DS中断被触发,MCU通过识别中断号就能知道发送成功。
明白了一对一通信的机制,也就明白了为什么PTX端的TX_ADDR,RX_ADDR,和PRX端的RX_ADDR是相同的。其实这三个地址说白了就是一个地址,就是PRX某个PIPEx的地址,这就是一对多通信的基础
一般来说一对多说的是,一个接收N个发送
MultiCeiver(多方通信):
MultiCeiver 是接收模式下的一个功能,包含了一组共六个并行的数据通道,每个通道都拥有独一无二的地址。一个RF通道对应一个逻辑数据通道。在NRF24L01+中,每个数据通道都有其自身的物理地址。