t1 芯片做433接收发送
T1 芯片做rf433 接收发送,接收会有漏包现象,发送会有断包,已使用关闭总中断,还是不行,请问还有什么办法吗?以参考此帖子 viewtopic.php?t=9260,或者有rf433 的demo吗
T1 芯片做rf433 接收发送,接收会有漏包现象,发送会有断包,已使用关闭总中断,还是不行,请问还有什么办法吗?以参考此帖子 viewtopic.php?t=9260,或者有rf433 的demo吗
你好!
T1 芯片使用 RF433 进行收发时,接收出现漏包、发送出现断包,已尝试关闭总中断但未解决。
关闭总中断是错误的方向——RF433 收发依赖硬件中断及时响应,关闭总中断反而使 RF 硬件 FIFO 无法及时被读取而溢出,加剧漏包和断包。
可能的根因有两个:
RF 收发状态机管理不当:T1 平台的
Code: Select all
tkl_subg_send是非阻塞式调用,如果在收到
Code: Select all
tx_done回调前就切换到接收或再次发送,会导致发送断包。接收时如果没有持续保持
Code: Select all
SUBG_RF_RX_FULL状态(被其他操作打断进入 IDLE),则会出现漏收数据。
RF 中断优先级不够高:T1 的中断控制器(INTC)支持 IRQ/FIQ 优先级配置,如果 RF 中断被 WiFi/BLE 等高优先级中断抢占,会导致数据丢失。
发送流程:
调用
Code: Select all
tkl_subg_rf_tx_register()注册发送完成回调
调用
Code: Select all
tkl_subg_send()发起发送(非阻塞)
等待
Code: Select all
SUBG_RF_CB_EVENT_TX_DONE回调
收到回调后再进行下一次发送或切换到接收模式
接收流程:
调用
Code: Select all
tkl_subg_rf_goto_state(SUBG_RF_RX_FULL)进入接收状态
确保接收期间持续保持
Code: Select all
SUBG_RF_RX_FULL状态,避免状态空洞
收发切换时先等发送完成再切接收
[]通过 T1 INTC 优先级机制将 RF 中断设为最高优先级(数值最小)
[*]或将 RF 中断注册为 FIQ 而非 IRQ,获得更高的响应优先级
[*]确保 WiFi/BLE 等中断不会抢占 RF 中断处理
关键文件参考:
Code: Select all
vendor/T1/tuyaos/tuyaos_adapter/include/subg/include/tkl_subg_rf.h— SubG RF TKL 接口定义
Code: Select all
vendor/T1/T1_os/T1/driver/intc/intc.h— 中断控制器优先级配置
Code: Select all
tkl_subg_sendCode: Select all
SUBG_RF_RX_FULL如有 RF433 demo 需求,建议联系涂鸦技术支持获取 SubG RF 示例工程。