2026-07-09 10:49:15 +08:00
|
|
|
|
# 模块拆分 - 自适应 RF 解码与发射 (Docs/50_module-breakdown/mod-rf.md)
|
2026-07-09 10:31:36 +08:00
|
|
|
|
|
2026-07-09 10:49:15 +08:00
|
|
|
|
本模块管理射频芯片 GPIO 初始化、433MHz EV1527 解调接收(宽限时序比值算法)与射频打包主动发射。已确认此模块与新的 1.14寸屏幕/5按键物理变更兼容。
|
2026-07-09 10:31:36 +08:00
|
|
|
|
|
|
|
|
|
|
## 1. 模块职责说明
|
|
|
|
|
|
|
|
|
|
|
|
* **职责范围**:
|
|
|
|
|
|
1. 初始化射频接收和发射控制引脚。
|
|
|
|
|
|
2. 对射频输入引脚进行高低电平时序轮询解码,计算其高低电平比值,实现自适应 EV1527 24位数据解码。
|
|
|
|
|
|
3. 在特定系统请求下(例如发送 SOS 呼救或与 IPC 对码绑定),主动通过发射引脚发出 EV1527 编码帧。
|
|
|
|
|
|
* **自适应比值解调机制**:
|
|
|
|
|
|
不依赖死宽度的微秒延迟。检测同步头低电平(时间在 1500~60000us 之间)与高电平时间(时间在 50~2500us 之间),算出两者的时序比例。
|
|
|
|
|
|
* 以 `31` 作为低电平对高电平的时钟倍率基准(高低比值支持在 `15` 到 `48` 倍范围)。
|
|
|
|
|
|
* 计算出每 bit 的标准时钟周期 `T = low_time / 31`,根据此动态 `T` 进行后续 24 个数据位(高/低电平宽度)的比值反解。
|
|
|
|
|
|
|
|
|
|
|
|
## 2. 接口与函数说明
|
|
|
|
|
|
|
|
|
|
|
|
* `void RF_Init(void)`:配置射频芯片引脚方向,初始化控制端口电平。
|
|
|
|
|
|
* `bit EV1527_Decode(u32 *out_addr, u8 *out_type)`:
|
|
|
|
|
|
进行射频接收包解码尝试。
|
|
|
|
|
|
* 首先通过计数检测大于 `1500us` 的同步低电平前导信号。
|
|
|
|
|
|
* 自适应计算时钟基准 `T`。
|
|
|
|
|
|
* 连续接收 24 位宽数据:如果某个数据位的高电平比低电平长,则认为该位为 `1`;反之为 `0`。
|
|
|
|
|
|
* 解码成功将 20 位地址存入 `out_addr`,后 4 位数据存入 `out_type` 并返回 `1`;否则返回 `0`。
|
|
|
|
|
|
* `void EV1527_Transmit(u32 addr, u8 data_code)`:
|
|
|
|
|
|
主动发射一帧数据。生成同步头,并按 `1` 码(高电平 3T, 低电平 1T)或 `0` 码(高电平 1T, 低电平 3T)依次驱动发射引脚电平,持续多帧以确保接收方捕获。
|
2026-07-09 11:03:18 +08:00
|
|
|
|
* 该函数被手环用作向 IPC 摄像头主动对码绑定(`data_code = 0x01`)。
|
|
|
|
|
|
* 该函数也用于手环主动发射 SOS 紧急呼救包(`data_code = 0x08`),此时传入手环自身的出厂固定 ID `bracelet_factory_id`。
|
2026-07-09 11:32:00 +08:00
|
|
|
|
|
2026-07-09 13:06:01 +08:00
|
|
|
|
<!-- Checked and verified with always-on screen and sleep removal changes -->
|