RF_PHY开启自动模式问题

开启自动模式时,

发送模式下,先进入TX_MODE_TX_FINISH接收完后,要等待回包,自动进入这里面 TX_MODE_RX_DATA,是会自动调用接收函数RF_Rx还是需要手动去调用?

接收模式下,先执行状态函数里的RX_MODE_RX_DATA,然后执行RX_MODE_TX_FINISH,最后进入SBP_RF_RF_RX_EVT事件,请问如果要填充回发的数据,在哪个地方填充?

AUTO模式下,发包完成后由协议栈自动启用一段RF接收窗口,用户不必在应用层再开窗口。

AUTO模式,上电后默认运行RX接收的场景下,在RX方收到TX方发来的A1包后,底层会自动回复一包B1包;B1包的内容需要在收到A1包之前就填充好;SBP_RF_RF_RX_EVT事件中,调用了RF_Rx接口,可以用于填写B2包,B2包将在RX方收到A2包后立即回复给TX方(包的An/Bn编号是为了解释说明而标注,实际代码中不存在)。

image.png


假设需要根据接收到的A1包来判断回什么样的B1包,第一个执行RF_RX,那RX方就没办法在收到TX方发来A1包之前去填充特定B1包了,这怎么处理?


是的,RX方无法知道自己会收到什么数据,一定会慢一包。
可以用TX方再发一包数据,RX方在收到A2包后,将A1包的回包内容,放在B2包的位置回复给TX方。


好的明白了,谢谢,还是在LLE_MODE_BASIC模式下,收发转换更加灵活


AUTO模式下,接收模式下,接收完后自动发送回包,自动回包的对象是随机的吗?


AUTO模式下,接收模式下,接收完后自动发送回包,自动回包的对象是随机的吗?


RF_RX接口中,4个参数,有配置“包类型”的参数;其他配置,按RF初始化中的参数去发包,比如说接入地址、频点/信道。那么只要“包类型”及RF初始化中的参数一致, 对端又打开了接收窗口,对端就可以收到包。

如果要做一对多,可以在应用层做MAC地址或者其他唯一ID的区别,由应用层拆包去判断是否需要处理包内容。


在应用层处理的话,TX端发送一次,对应的RX端不一定接收到(被其他同配置的接收),需要多发几次?


“被其他同配置的接收”
在同一时刻,n个RX方均开启接收,同时收一个TX方发的包,那么n个RX方之间没有互相的干扰。某个RX端收不到包,与其他RX端的接收状态无关(配置RX有回包,存在发送状态那另说)。

需要多发几次

如果不做应答,具体多发几次,要根据无线环境去试错了;如果有做应答,那可以在收到应答包前做单包超时、计数,单包超时后重试,重试n次后判断为无法通信。


如果TX端 只 发送一个数据包,相同配置的情况下,包被RX1接收到了,RX2还能接收到这个数据包吗?


相同配置的情况下,包被RX1接收到了,RX2还能接收到这个数据包吗

可以的,可以视作物理意义上的“广播”。


RF的自动模式下,执行完RX接收后,怎么样可以不自动执行回包?调用这个RF_Shut吗?


自动模式下,有什么办法可以断掉自动回包吗,还是说一定会执行回包?


AUTO模式下,RX方收到包后没有接口可以“断掉”自动回包。

在设计好通信协议的情况下,TX方是已知待发出的包是否需要携带信息的回包的;如果不需要,TX方收到回包后无视包内容即可。AUTO模式下RX的回包,一方面可以携带信息,另一方面也可以用来表示RX方收到包了,只作为回复给TX方的应答信号。


RF是广播的形式,自动模式下,如果一台机器发,周围多台机器接收,这些机器接收到都会自动发送回包信息,我想要的是特定机器接收到,然后特定机器回包应答,其他机器不应答,这怎么处理?


只有登录才能回复,可以选择微信账号登录