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

41 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 编码实现 - 自适应 RF 解码与发射 (Docs/60_coding/mod-rf.md)
本文件对应自适应射频解码与主动发射的具体编码实现细节。
## 1. 对应代码源文件
* [Drivers/rf.c](file:///c:/workfile/105/stc32g12k128/Drivers/rf.c) (RF 初始化、EV1527 时序比值软解码、主动发射)
* [Drivers/rf.h](file:///c:/workfile/105/stc32g12k128/Drivers/rf.h) (芯片控制管脚与编解码函数声明)
## 2. 关键代码片段与逻辑实现
### 2.1 自适应比值解码 (EV1527_Decode)
解码时,软件轮询检测接收管脚状态。
1. **抓取同步头**:检测到一个大于 `1500us` 且小于 `60000us` 的低电平。
2. **计算基准 T**`T = low_time / 31`
3. **采集 24 个数据位**:对于每一位,检测它的高电平持续时间 `h_val` and 低电平持续时间 `l_val`
```c
// 解码一位数据
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` 中实现:
```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`)。
<!-- Checked and verified with SGM3833 boost/inverting PMIC removal and LCD_PWR_CTRL update changes V4 -->