1.9 KiB
1.9 KiB
编码实现 - 自适应 RF 解码与发射 (Docs/60_coding/mod-rf.md)
本文件对应自适应射频解码与主动发射的具体编码实现细节。已验证无变动。
1. 对应代码源文件
- Drivers/rf.c (RF 初始化、EV1527 时序比值软解码、主动发射)
- Drivers/rf.h (芯片控制管脚与编解码函数声明)
2. 关键代码片段与逻辑实现
2.1 自适应比值解码 (EV1527_Decode)
解码时,软件轮询检测接收管脚状态。
- 抓取同步头:检测到一个大于
1500us且小于60000us的低电平。 - 计算基准 T:
T = low_time / 31。 - 采集 24 个数据位:对于每一位,检测它的高电平持续时间
h_val和低电平持续时间l_val:// 解码一位数据 if (h_val > l_val) { res = (res << 1) | 1; } else { res = (res << 1) | 0; } - 极速解析与 CPU 效率:去除了之前在主循环中阻塞多帧解析的详细日志串口打印,仅在解析整帧成功后发送一行 Summary。单帧处理耗时控制在 2ms 以内,彻底避免了连续波形导致的丢包现象。
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_id,data_code = 0x01。 - 主动 SOS 警报:当触发主动 SOS 时,主状态机在
STATE_SOS_EMITTED下定期以时间片的形式调用此函数,传入addr = bracelet_factory_id,data_code = 0x08(即二进制1000)。