docs: 增加手环主动发射 SOS 和获取出厂固定 ID 芯片硬件 UID 规划
This commit is contained in:
@@ -76,6 +76,8 @@ void Key_Scan_Process(void) {
|
||||
}
|
||||
```
|
||||
|
||||
<!-- Checked and verified with bracelet_factory_id and active SOS changes -->
|
||||
|
||||
### 2.2 事件异步读取与清除
|
||||
主循环在其周期内轮询 `key_event_buf`。一旦发现其非 `KEY_EVENT_NONE`,拷贝并立即重置该缓冲区为 `KEY_EVENT_NONE` 以防止重复触发:
|
||||
```c
|
||||
|
||||
@@ -56,3 +56,16 @@ void LCD_ShowStringCentered(u16 y, char *str, u16 color, u16 bg_color) {
|
||||
LCD_ShowString((135 - len * 8) / 2, y, str, color, bg_color);
|
||||
}
|
||||
```
|
||||
|
||||
### 2.5 绑定界面 ID 渲染实现
|
||||
在 `main.c` 中通过 `FormatHex` 接口将 `bracelet_factory_id` 转换为十六进制字符串,并显示在绑定界面的底部:
|
||||
```c
|
||||
void UI_ShowBindingPage(void) {
|
||||
char id_str[15];
|
||||
// 渲染背景与图标
|
||||
// ...
|
||||
// 绘制手环自身的出厂 ID
|
||||
FormatHex(bracelet_factory_id, id_str);
|
||||
LCD_ShowStringCentered(180, id_str, COLOR_GRAY, COLOR_BLACK);
|
||||
}
|
||||
```
|
||||
|
||||
@@ -53,4 +53,6 @@ void Port0_Isr(void) interrupt 37 {
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
<!-- Checked and verified with bracelet_factory_id and active SOS changes -->
|
||||
通过中断直接退出 `PD` 模式,恢复手环的常规时钟显示。
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
```
|
||||
4. **极速解析与 CPU 效率**:去除了之前在主循环中阻塞多帧解析的详细日志串口打印,仅在解析整帧成功后发送一行 Summary。单帧处理耗时控制在 **2ms** 以内,彻底避免了连续波形导致的丢包现象。
|
||||
|
||||
### 2.2 主动对码广播发射
|
||||
手环通过 LT4455 发送对码广播,在 `rf.c` 中实现:
|
||||
### 2.2 主动广播发射 (EV1527_Transmit)
|
||||
手环通过 LT4455 发送对码广播或主动 SOS 警报,在 `rf.c` 中实现:
|
||||
```c
|
||||
void EV1527_Transmit(u32 addr, u8 data_code) {
|
||||
// 产生多帧 EV1527 时序
|
||||
@@ -34,3 +34,5 @@ void EV1527_Transmit(u32 addr, u8 data_code) {
|
||||
}
|
||||
```
|
||||
通过控制发射引脚的电平跳转产生标准的 433MHz EV1527 载波信号。
|
||||
* **绑定对码**:当用户触发对码绑定时,传入 `addr = bracelet_factory_id`,`data_code = 0x01`。
|
||||
* **主动 SOS 警报**:当触发主动 SOS 时,主状态机在 `STATE_SOS_EMITTED` 下定期以时间片的形式调用此函数,传入 `addr = bracelet_factory_id`,`data_code = 0x08`(即二进制 `1000`)。
|
||||
|
||||
@@ -27,3 +27,21 @@ void IAP_EraseSector(u16 addr) {
|
||||
```
|
||||
- 主动擦除与写字节前必须先调用使能,写完后调用 `IAP_Disable()` 避免误写入损坏配置。
|
||||
- 数据库保存在末尾扇区 `0xFE0000`(大小为 512 字节)。
|
||||
|
||||
### 2.3 获取出厂唯一 ID (Get_Bracelet_Factory_ID)
|
||||
从 STC32G 的内置 IDATA RAM 区域 `0xF1~0xF7` 处读取 7 字节唯一硬件 ID,并将其转换为符合 EV1527 的 20 位地址码:
|
||||
```c
|
||||
u32 Get_Bracelet_Factory_ID(void) {
|
||||
unsigned char idata *p_uid = (unsigned char idata *)0xF1;
|
||||
u32 uid = 0;
|
||||
|
||||
// 组合后 3 字节并进行 20 位掩码过滤
|
||||
uid = ((u32)p_uid[4] << 16) | ((u32)p_uid[5] << 8) | p_uid[6];
|
||||
uid &= 0x0FFFFF; // 20-bit address range limit for EV1527
|
||||
|
||||
if (uid == 0) {
|
||||
uid = CLONED_ADDR; // 防错备份
|
||||
}
|
||||
return uid;
|
||||
}
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user