t1 芯片做433接收发送

Wi-Fi 设备、蜂窝设备、WuKongAI、开发板、TuyaOS 移植等


Post Reply
xiaobaia
Posts: 1

T1 芯片做rf433 接收发送,接收会有漏包现象,发送会有断包,已使用关闭总中断,还是不行,请问还有什么办法吗?以参考此帖子 viewtopic.php?t=9260,或者有rf433 的demo吗

Attachments
Snipaste_2026-06-12_19-55-15.png

Tags:
愚者千虑必有一得
Posts: 951

Re: t1 芯片做433接收发送

你好!

问题概述

T1 芯片使用 RF433 进行收发时,接收出现漏包、发送出现断包,已尝试关闭总中断但未解决。

根因分析

关闭总中断是错误的方向——RF433 收发依赖硬件中断及时响应,关闭总中断反而使 RF 硬件 FIFO 无法及时被读取而溢出,加剧漏包和断包。

可能的根因有两个:

  1. RF 收发状态机管理不当:T1 平台的

    Code: Select all

    tkl_subg_send

    是非阻塞式调用,如果在收到

    Code: Select all

    tx_done

    回调前就切换到接收或再次发送,会导致发送断包。接收时如果没有持续保持

    Code: Select all

    SUBG_RF_RX_FULL

    状态(被其他操作打断进入 IDLE),则会出现漏收数据。

  2. RF 中断优先级不够高:T1 的中断控制器(INTC)支持 IRQ/FIQ 优先级配置,如果 RF 中断被 WiFi/BLE 等高优先级中断抢占,会导致数据丢失。

解决方案

方案一:正确使用 RF 状态机

发送流程:

  1. 调用

    Code: Select all

    tkl_subg_rf_tx_register()

    注册发送完成回调

  2. 调用

    Code: Select all

    tkl_subg_send()

    发起发送(非阻塞)

  3. 等待

    Code: Select all

    SUBG_RF_CB_EVENT_TX_DONE

    回调

  4. 收到回调后再进行下一次发送或切换到接收模式

接收流程:

  1. 调用

    Code: Select all

    tkl_subg_rf_goto_state(SUBG_RF_RX_FULL)

    进入接收状态

  2. 确保接收期间持续保持

    Code: Select all

    SUBG_RF_RX_FULL

    状态,避免状态空洞

  3. 收发切换时先等发送完成再切接收

方案二:提升 RF 中断优先级

[]通过 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

— 中断控制器优先级配置

验证方法

  1. 检查代码中

    Code: Select all

    tkl_subg_send
    调用后是否有等待 tx_done 回调的逻辑
  2. 检查接收时是否始终处于

    Code: Select all

    SUBG_RF_RX_FULL
    状态
  3. 在 tx_done 回调中添加日志确认发送完整完成
  4. 提升 RF 中断优先级后对比漏包断包率

如有 RF433 demo 需求,建议联系涂鸦技术支持获取 SubG RF 示例工程。

Post Reply