131***415
各位 Goodix 师好,
我们在儿童情绪监测手环项目里选用了 GH3011,做完打样后 I2C 通路一直无法稳定起算 BPM,
卡在了"扫得到设备但确认不了 Chip ID、写不了正确的 PPG 初始化序列"这一步。希望寻求贵司
寄存器手册和 HBD 算法 SDK 的支持,详细信息按官方模板列在下面。
#### 1. 软件版本
| 项目 | 版本 |
|-------------------|-----------------------------------------|
| MCU 固件框架 | QuecPython(基于 移远 EC800M 模组) |
| QuecPython 版本 | 【EC800MCNLE_QPY_V0008】 |
| 主机固件版本 | EmoBand v1.1.0(自研) |
| 上位机 / IDE | Thonny 4.x via USB CDC REPL |
| 已参考资料 | GH3011 公开 brief / 部分网络上残缺的 datasheet 片段 |
| 已申请 NDA 文档 | 暂无(这是申请重点) |
#### 2. 硬件环境信息
- **MCU**:移远 EC800M-CN(Cat.1 4G 模组),裸 PCB(非 EVB)
- **PPG 传感器**:GH3011(贴片到客制化 0.96" 手环主板)
- **I2C 总线**:
- SCL → EC800M `pin67`(硬件 I2C0 SCL)
- SDA → EC800M `pin66`(硬件 I2C0 SDA)
- 上拉电阻:4.7 kΩ → VDDIO(1.8 V 域)
- **GH3011 配置脚**:
- `IIC_EN (pin 2)` = **NC 悬空**(已用万用表确认不与 GND 短接)
- `RSTN (pin ?)` → EC800M `GPIO7`(MAIN_RTS)
- `INT (pin ?)` → EC800M `GPIO6`(MAIN_CTS)
- **电源**:
- `VDD_LED ≈ 3.3 V`(实测)
- `VDDIO ≈ 1.8 V`(实测)
- **结构**:传感器表面已加滤光片 + 透光窗口,背面 LED 与 PD 间黑胶圈隔光
- **原理图局部**:附件已上传(GH3011 周边 + I2C 上拉部分截图)
#### 3. 问题描述
按以下顺序排查,结果如下:
1. **I2C 总线扫描**(QuecPython 5-参数 API,`i2c.read(addr, reg_buf, 1, data_buf, 1, 0)`):
- I2C0 扫描到地址 **`0x36`** 有 ACK,其余地址无响应
- reg 0x00 读到 `【0x??】`,不是预期的 `0x04`
- 写回测试:reg 0x10 写 `0xA5` 后回读 `【0x??】`,**写回不成功** / **写回成功**(二选一)
2. **多候选 Chip ID 寄存器尝试**(0x00 / 0x01 / 0x7F / 0x80 / 0xFC / 0xFD / 0xFE / 0xFF):
- 全部读出值见下方代码块,未找到能稳定标识 GH3011 的字段
3. **RSTN 复位时序**:已按 datasheet 推荐 `VCC 稳定 ≥4ms → RSTN 低 20ms → 高 100ms`
4. **IIC_EN**:上电前 → 悬空 → 上电后再用万用表确认对 GND 不通
也就是说:**电气连接是通的,但因为缺寄存器手册,无法确认扫到的 0x36 就是 GH3011,
更无法进入 PPG 工作模式去拿 BPM。**
#### 4. 复现步骤(含日志)
把附件里 `validate_hr.py`(5-参数 I2C API 版本)放到模组 `/usr/`,
Thonny 里 `F5` 运行,得到的典型日志如下(节选):
```
==================================================
GH3011 心率芯片验证(5-参数 QuecPython I2C API)
==================================================
[RSTN] ✅ 复位序列已完成(GPIO7 低 20ms / 高 100ms)
[I2C] pins.py 配置: BUS=1 ADDR=0x28
[I2C] 扫描 I2C1 总线(0x08~0x77)...
[+] 0x36 reg0x00=0x【??】
[I2C] 扫描 I2C0 总线(0x08~0x77)...
❌ 总线上无设备响应
[TGT] I2C1 地址 0x36
[CID] 尝试多个候选 Chip ID 寄存器位置:
reg 0x00 = 0x【??】
reg 0x01 = 0x【??】
reg 0x7F = 0x【??】
reg 0x80 = 0x【??】
reg 0xFC = 0x【??】
reg 0xFD = 0x【??】
reg 0xFE = 0x【??】
reg 0xFF = 0x【??】
[WB] reg 0x10 写前=0x【??】 写后=0x【??】
```
> 论坛贴里请把【??】替换成实际跑出来的值,越具体 FAE 越容易判断。
#### 5. 期望获得的帮助
希望贵司能在 **NDA 框架下**提供以下三类资料中的任一项(最好全套):
1. **GH3011 Register Manual / 完整 Datasheet**
- 寄存器映射、真实 Chip ID 寄存器位置和期望值
- PPG / LED / 采样率 / FIFO 配置位
2. **GH3011 Reference Driver C SDK**
- 含 HBD(心率算法引擎)调用、佩戴检测、信号质量评估
- 任何 Cortex-M 平台示例都可以,我们会移植到 QuecPython
3. **GH3011 硬件参考设计 Application Note**
- 推荐光学叠层、LED 走线、滤光片选型、PCB 布局
**项目背景**(便于评估优先级):
- 项目阶段:rev 1.1 样机已打样,2026 Q3 进入小批量试产
- 预估采购量:首年 【20K】 ~ 【50K】 颗,三年累计 【150K+】 颗
- 应用:儿童(4–14 岁)情绪监测手环,端侧 BPM + 云端 HRV/音频特征做情绪分类
- 已有方案:EC800M(QuecPython)+ GH3011 + ST7735S + 4G
---
che****com

您好,
可以参考如下说明进行IIC通信移植:
可按照如下步骤,调通主控平台与GH30x模组间的通信功能:
1. 根据平台实现精准的μs级延时函数。
GH30x的上电时序(如图 2‑2所示)明确地规定了上电后需要完成的初始化工作及精准的μs级延时。在gh30x_example_port.c文件中,用户需实现精准的μs级延时函数hal_gh30x_delay_us(),具体实现方法可能因平台差异稍有不同。

2. 设置IIC通信。
(1) 设置IIC管脚:将IIC_EN管脚配置为IIC,并设置内部上拉(若外部硬件增加了上拉,可无需使用内部上拉)、IIC通信速率以及IIC数据传输方式等。
(2) 实现IIC读写函数:在gh30x_example_port.c文件中,实现IIC写函数hal_gh30x_i2c_write()和IIC读函数hal_gh30x_i2c_read()。IIC读函数需先利用IIC写函数写入一个数据,再进行读操作。对GH30x的所有操作均通过IIC读写函数实现,因此,需保证这两个函数的准确性。
(3) 验证IIC通信:在应用工程中调用gh30x_module_init()函数,并利用UART打印信息验证IIC通信是否正常。
- 如果IIC读写函数不正常或者IIC管脚设置不正确,UART会打印出类似“gh30x init error[*]”的Log信息。
- 如果IIC读写正常并且IIC管脚设置正确,UART会打印出类似“gh30x module init ok”的Log信息。
- 直接读取寄存器0x0028的值,判断是否为0x31。若寄存器值为0x31,则表示IIC通信正常。
Open WeChat, use "Scan" to follow.