使用RF通讯连接问题

RF模式下需要像蓝牙一样消耗时间“配对”吗,还是通过广播包进行通信?例如我设置两个设备配置的accessAddress相同,一个开始状态是发送,一个开始状态是接收,他们是怎么进行数据交换的,在发送和接收时广播包是什么样的?在广播包中是通过accessAddress来确认通讯双方吗?广播包的长度最大为多少?配置中的RxMaxlen是数据最大长度不是广播包长度吧?

????tmos_memset(&rfConfig,?0,?sizeof(rfConfig_t));
????taskID?=?TMOS_ProcessEventRegister(RF_ProcessEvent);
????rfConfig.accessAddress?=?0x71764129;?//?禁止使用0x55555555以及0xAAAAAAAA?(?建议不超过24次位反转,且不超过连续的6个0或1?)
????rfConfig.CRCInit?=?0x555555;
????rfConfig.Channel?=?8;
????rfConfig.Frequency?=?2480000;
????rfConfig.LLEMode?=?LLE_MODE_BASIC?|?LLE_MODE_EX_CHANNEL;?//?使能?LLE_MODE_EX_CHANNEL?表示?选择?rfConfig.Frequency?作为通信频点
????rfConfig.rfStatusCB?=?RF_2G4StatusCallBack;
????rfConfig.RxMaxlen?=?251;


您好,rfConfig结构体中的都是底层配置,rfConfig的配置不一致,会导致您的应用层代码通信异常或无法通信。一部分底层配置包含在负载数据前后的包头包尾中,验证不通过会直接被底层库屏蔽,无法传达至应用层。

accessAddress用来确认哪些包可以被接收。不清楚您说的“确认通讯双方”是要确认哪些信息。接入层地址可以视作通行证中的一环,携带在无线包头中,只有接入层地址一致的包,才会被接收方的底层解包后传达给应用层,不携带收发方的应用层信息。

RxMaxlen是应用层净负载的最大长度,也就是您说的数据的最大长度,该配置不一致可能导致发包异常。

2.4G参考代码中没有严格的“配对”,在非跳频通信时无需“配对”,直接往外广播发送就好,底层配置一致的接收方都能收到数据包;在跳频通信时,收发双方会在发送数据包前,在特定信道进行握手,类似于极简版的蓝牙“配对”,握手成功才会进行数据包的交互。


谢谢解答,意思就是没有配对,只要发送和接收的底层配置相同,他们的包头包尾就会携带验证信息。


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