150 lines
5.4 KiB
Markdown
150 lines
5.4 KiB
Markdown
# 基于 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.0V–3.6V,推荐 3.3V)。
|
||
- `GND` → EB21-E `GND` 引脚(至少两点星形接地,靠近模组的地大面积敷铜)。
|
||
- 在 EB21-E `VCC` 旁边就近放置:
|
||
- 100nF 贴片电容(0402/0603)
|
||
- 4.7µF–10µ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 高增益定向天线(如 12–24dBi 八木/栅格)**。
|
||
|
||
## 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/心跳协议”的二进制帧格式示例;
|
||
- 与现有蓝牙协议命令一一对应的映射表。 |