Files
akmon/doc_ble/nearlink_eb21_notes.md
2026-01-20 08:04:15 +08:00

150 lines
5.4 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.
# 基于 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/心跳协议”的二进制帧格式示例;
- 与现有蓝牙协议命令一一对应的映射表。