Initial commit of akmon project

This commit is contained in:
2026-01-20 08:04:15 +08:00
commit 77a2bab985
1309 changed files with 343305 additions and 0 deletions

View File

@@ -0,0 +1,150 @@
# 基于 EB21-E 的星闪 SLE 硬件连接与固件初始化最小示例
> 目标:给硬件/固件同学一个可以直接落地的 EB21-E 使用备忘录,用于快速评估和原型验证。
## 1. 模组定位与典型应用
- **模组类型**EB21-E利尔达基于海思 Hi2825 SLE 低功耗星闪 SoC。
- **接口特点**UART/SPI/I2C/GPIO多数场景推荐 **UART 控制 + 外接天线**
- **典型应用**
- 低功耗远距离传感器(心率带、环境监测等);
- 手环/表带与网关之间的近距离/中距离高速链路;
- BLE → 星闪协议迁移过渡方案(利用类似 GATT 的上层抽象)。
## 2. 硬件连接最小原理图说明
以下以 **MCU 使用 UART 控制 EB21-E** 为例:
### 2.1 供电与地
- `VCC_3V3` → EB21-E `VCC` 引脚3.0V3.6V,推荐 3.3V)。
- `GND` → EB21-E `GND` 引脚(至少两点星形接地,靠近模组的地大面积敷铜)。
- 在 EB21-E `VCC` 旁边就近放置:
- 100nF 贴片电容0402/0603
- 4.7µF10µF 钽电容或陶瓷电容
### 2.2 UART 通信
- MCU `TX` → EB21-E `RX`(如 `UART0_RX`)。
- MCU `RX` → EB21-E `TX`(如 `UART0_TX`)。
- 波特率:
- 推荐从 **115200 8N1** 起步,后续可协商更高波特率。
- 注意:
- 若 MCU 为 5V IO需加 **电平转换器**(如 TXS0108E或分压电阻。
- 线长尽量 < 20cm注意地参考一致。
### 2.3 复位与启动控制
- `EB21_RST`接MCU GPIO低电平保持复位高电平正常工作。
- 上电后延时几毫秒再释放 RST。
- 如模组有 `BOOT` / `MODE` 管脚:
- 默认通过上拉/下拉电阻设置为 **正常运行模式**
- 仅在升级固件或调试时切为 Boot 模式。
### 2.4 外接天线E 版的关键)
- `ANT`RF 口 → IPEX 连接器 → 高频同轴线 → 外部天线2.4GHz)。
- PCB 布线:
- `ANT` 到 IPEX 尽量短直,**50Ω 微带线**
- 下方禁止铺地/信号(或按参考设计做阻抗控制)。
- 天线选型:
- 若追求极致远距离:选 **2.4GHz 高增益定向天线(如 1224dBi 八木/栅格)**
## 3. 固件初始化最小流程MCU 侧)
以下示例为伪代码/结构化步骤,可根据具体 MCU 平台改写为 C/C++/Rust 等实现。
### 3.1 上电与 UART 初始化
```c
void eb21_hw_init(void) {
// 1. 供电已由电源管理完成,此处只负责 IO 初始化
// 2. 配置 UART
uart_init(EB21_UART_PORT, 115200, UART_DATABITS_8, UART_STOPBITS_1, UART_PARITY_NONE);
// 3. 配置 RST 引脚
gpio_set_mode(EB21_RST_PIN, GPIO_MODE_OUTPUT);
gpio_write(EB21_RST_PIN, 0); // 先保持复位
delay_ms(10);
gpio_write(EB21_RST_PIN, 1); // 释放复位
// 4. 等待模组自检完成
delay_ms(100); // 视实际文档可调
}
```
### 3.2 与 EB21-E 的简单 AT/协议握手
很多厂商提供两种固件形态:
- AT 命令固件UART 上下发 ASCII 命令)。
- 自定义二进制协议固件(类似本项目中蓝牙协议的 CMD/SEQ/CRC 格式)。
假设 EB21-E 提供 AT 命令风格接口(示例):
```c
void eb21_send_cmd(const char *cmd) {
uart_write(EB21_UART_PORT, (const uint8_t *)cmd, strlen(cmd));
uart_write(EB21_UART_PORT, (const uint8_t *)"\r\n", 2);
}
bool eb21_wait_ok(uint32_t timeout_ms) {
char buf[64] = {0};
size_t len = uart_read_line(EB21_UART_PORT, buf, sizeof(buf), timeout_ms);
if (len == 0) return false;
return strstr(buf, "OK") != NULL;
}
bool eb21_basic_handshake(void) {
eb21_send_cmd("AT"); // 心跳
if (!eb21_wait_ok(100)) return false;
eb21_send_cmd("AT+VER?"); // 查询版本
if (!eb21_wait_ok(100)) return false;
// 其他必要的初始化命令,如设置角色/信道/功率
// eb21_send_cmd("AT+ROLE=PERIPHERAL");
// eb21_send_cmd("AT+POWER=MAX");
return true;
}
```
如果厂商提供 SLE 自定义协议栈,则可以将其看作“星闪版 GATT”
1. 先发“PING”/“HELLO”命令确认链路正常
2. 然后配置本端角色(主/从)、频道、配对参数;
3. 建链后以 TLV/帧格式收发业务数据。
## 4. 与现有 BLE 协议文档的映射思路
你当前的 `doc_ble/蓝牙协议.md` 已经定义了:
- 服务/特征 UUID
- CMD 分段(控制/健康数据/紧急事件等);
- 统一数据包结构 (STX/LEN/CMD/SEQ/DATA/CRC)。
迁移到 EB21-E / 星闪 SLE 时,可以:
1. **上层 CMD 不变**
- 继续使用现有 CMD_xxx 定义和数据结构(如心率包、血氧包)。
2. **底层链路从 BLE GATT → SLE 链路**
- 将原本通过 GATT Notification/Write 的数据,改为通过 EB21-E 的“透传通道”发送;
- 在 MCU 上维护同样的打包/解包逻辑。
3. **安全与加密**
- 若 EB21-E 内置加密/配对机制,可视作“链路加密”;
- 应用层仍可复用 AES/SM4 等加密封装敏感字段。
## 5. 调试建议
- 使用 USB-UART 转串口工具直接与 EB21-E 对话,先确认:
- 上电是否有启动 log
- AT 命令是否响应;
- 在射频侧:
- 初期可用小 PCB 天线进行近距离联调;
- 功能 OK 后再换成高增益天线进行远距离验证。
---
如后续你确定具体 EB21-E 的数据手册/AT 指令集,我可以在本文件中继续补充:
- 完整 AT 命令表;
- 一个“星闪版 PING/心跳协议”的二进制帧格式示例;
- 与现有蓝牙协议命令一一对应的映射表。