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