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

5.4 KiB
Raw Blame History

基于 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 版的关键)

  • ANTRF 口 → IPEX 连接器 → 高频同轴线 → 外部天线2.4GHz)。
  • PCB 布线:
    • ANT 到 IPEX 尽量短直,50Ω 微带线
    • 下方禁止铺地/信号(或按参考设计做阻抗控制)。
  • 天线选型:
    • 若追求极致远距离:选 2.4GHz 高增益定向天线(如 1224dBi 八木/栅格)

3. 固件初始化最小流程MCU 侧)

以下示例为伪代码/结构化步骤,可根据具体 MCU 平台改写为 C/C++/Rust 等实现。

3.1 上电与 UART 初始化

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 命令风格接口(示例):

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