RF功能需求能否满足一主多从?

本来计划用蓝牙连接主机从机,为了降低功耗选择使用RF,通过查看资料,只要RF配置一样就能直接连接,主机从机只能通过软件编程来区分吗?此时再有一个配置相同的从机能否也接收主机数据?此时两个从机连接主机,配置相同,主机怎么区分,是要用程序加编号并分不同事件去处理吗?想要实现主机发送命令给从机,从机接收命令开始采集ADC值并发送给主机,使用RF能否实现功能?

您好,当前对于RF“一主多从”的方案,只有在应用层代码去分配ID或者直接在应用层通过mac地址区分从机,需要RF初始化的配置保持一致。

想要实现主机发送命令给从机,从机接收命令开始采集ADC值并发送给主机”可以用RF代码实现。规定主机在查询某个从机A时,连续广播n个携带有从机A的ID或MAC的包;主机每发一个包就切换一次收发状态,监听从机A是否回包,监听超时就继续发包,如此循环直到总时长超过X个时间单位;从机A每隔X个时间单位唤醒一次,醒来后持续启用接收扫描一段时间来监听是否有主机下发命令,在收到命令包后执行ADC采集并回包,回包中携带从机A的ID或者MAC。



如何通过MAC地址区分从机?RF初始化有一个rfConfig.accessAddress是用来配对的吧。RF_PHY例程MAC是通过以下代码设置MAC地址吗?

#if(defined(BLE_MAC)) && (BLE_MAC == TRUE)
const uint8_t MacAddr[6] = {0x84, 0xC2, 0xE4, 0x03, 0x02, 0x02};
#endif

配对只需要RF初始化的配置保持一致,MAC地址可以不同是吗?


rfConfig.accessAddress是接入层地址,是更底层的配置,建议用来划分网络。

您截图里的代码是使用程序定义的MAC,也可以。每个芯片都有一个硬件MAC地址,直接用硬件MAC不会重复,可以在flash例程里找到读取方式。MAC地址可以携带到自定义协议的包头中,用来区分指定从机。

配对只需要RF初始化的配置保持一致,MAC地址可以不同”,“配对”是一定要RF初始化里保持一致的,否则应用层都无法通信,进行不下去。主从机之间MAC地址一般配置为不同的。


RF例程发送问题:我想发送两段数据,但是接受显示只能接收一段,切换发送顺序会显示第一次发送的数据,怎么才能连续发送?


要实现从机收到数据再发回来数据需要将RF例程进行什么修改?将rfConfig.LLEMode 改为自动模式LLE_MODE_AUTO

再在收到数据时加入启动事件tmos_set_event(taskID, SBP_RF_PERIODIC_EVT);并没有我想看到的结果啊,进入了事件但是根据串口信息接收到数据后开始发送,发送成功

图片.png

然后STA12是接收超时,在另一端是

图片.png

发送成功一次然后接受超时


在自动模式下我看接收命令自动转到发送模式,我想让充当“从机”的角色接收到信息后判断指令,指令正确获取ADC并输出,用自动模式能够实现吗


BASIC模式下,A往B发送两段数据,接收方B只收到第一段数据时,请检查接收方B有没有切换收发模式,如果B在收到A的第一包后立即切换到发送模式回包,此时A又往B发了第二包,会导致第二包丢失;可以让A一直发包,B一直收包,看收包数量和发包数量是否一致。

AUTO模式建议不要用与一对多的应用,仅在一对一通信时使用。


请问还有RF的资料或者代码应用吗?现在在自动模式收发出现问题,自动模式发完数据,另一端接收没问题发送也没问题,但是发送端会接收超时,接收端接收数据后用回调函数RF_2G4StatusCallBack调用事件SBP_RF_PERIODIC_EVT发送数据,是发送端问题还是接收端问题?


BASIC模式能实现收到数据再发送,实现想要的功能,那AUTO模式是什么情况使用呢?还有我想要发送端加串口中断接收上位机指令,可以参照BLE_UART例程吗?RF能开启低功耗模式吗?


已解决收发问题,未使用自动模式,望说明为何自动模式无法有效完成需求


可以参考BLE_UART添加串口命令。

RF代码也是可以通过HAL_SLEEP启用由TMOS系统管理的低功耗的,休眠逻辑与BLE代码一致。

AUTO模式下,库中的代码做好了收发切换,不用手动切换收发模式回包,应用于对应答包时延要求较高的场景。

AUTO模式有严格的收发切换和等待窗口,双方最好都要使用该模式;如果接收方是BASIC模式,且代码需要一定的时间进行代码处理,很可能会回包超时。


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