Files
stc32g128k/Docs/60_coding/mod-rf.md

1.9 KiB
Raw Blame History

编码实现 - 自适应 RF 解码与发射 (Docs/60_coding/mod-rf.md)

本文件对应自适应射频解码与主动发射的具体编码实现细节。

1. 对应代码源文件

  • Drivers/rf.c (RF 初始化、EV1527 时序比值软解码、主动发射)
  • Drivers/rf.h (芯片控制管脚与编解码函数声明)

2. 关键代码片段与逻辑实现

2.1 自适应比值解码 (EV1527_Decode)

解码时,软件轮询检测接收管脚状态。

  1. 抓取同步头:检测到一个大于 1500us 且小于 60000us 的低电平。
  2. 计算基准 TT = low_time / 31
  3. 采集 24 个数据位:对于每一位,检测它的高电平持续时间 h_val and 低电平持续时间 l_val
    // 解码一位数据
    if (h_val > l_val) {
        res = (res << 1) | 1;
    } else {
        res = (res << 1) | 0;
    }
    
  4. 正常解码成功将 20 位地址存入 out_addr,后 4 位数据存入 out_type 并返回 1

2.2 主动广播发射 (EV1527_Transmit)

手环通过 LT4455 发送对码广播或主动 SOS 警报,在 rf.c 中实现:

void EV1527_Transmit(u32 addr, u8 data_code) {
    // 产生多帧 EV1527 时序
    // 包含同步头 (高 1T + 低 31T) 与 24 位数据码
    // ...
}

通过控制发射引脚的电平跳转产生标准的 433MHz EV1527 载波信号。

  • 绑定对码:当用户触发对码绑定时,传入 addr = bracelet_factory_iddata_code = 0x01
  • 主动 SOS 警报:当触发主动 SOS 时,主状态机在 STATE_SOS_EMITTED 下定期以时间片的形式调用此函数,传入 addr = bracelet_factory_iddata_code = 0x08(即二进制 1000)。