I2C HAL Gsensor¶
1 功能概述¶
本例程演示如何使用 I2C HAL Driver 的寄存器读写 API(HAL_I2C_Mem_ReadReg8 / HAL_I2C_Mem_WriteReg8)访问 EVB 底板上的 SC7A20 三轴加速度传感器,完成器件识别、初始化,并周期性打印 X/Y/Z 加速度数据。
重要
本例程用于验证 pan_hal_i2c 寄存器封装,不涉及蓝牙功能。I2C 读写失败时会调用 HAL_I2C_Mem_Recover 恢复总线,程序不会卡死。
2 环境准备¶
硬件设备与线材:
PAN107X EVB 核心板与底板各一块(底板需带 SC7A20 加速度传感器模块)
JLink 仿真器(用于烧录例程程序)
USB-TypeC 线一条(用于底板供电和查看串口打印 Log)
杜邦线数根或跳线帽数个(用于连接各个硬件设备)
硬件接线:
将 EVB 核心板插到底板上
使用 USB-TypeC 线,将 PC USB 插口与 EVB 底板 USB->UART 插口相连
使用杜邦线将 EVB 底板上的 TX 引脚接至核心板 P16,RX 引脚接至核心板 P17
SC7A20 通过板载 I2C 与 SoC 相连(与
ble_accelerometer方案一致):I2C SCL:P0.7
I2C SDA:P1.0
SC7A20 7-bit I2C 地址:0x18,WHO_AM_I 寄存器期望值为 0x11
使用杜邦线将 JLink 仿真器的:
SWD_CLK 引脚与 EVB 底板的 P00 排针相连
SWD_DAT 引脚与 EVB 底板的 P01 排针相连
SWD_GND 引脚与 EVB 底板的 GND 排针相连
PC 软件:
串口调试助手(UartAssist)或终端工具(SecureCRT),波特率 921600(用于接收串口打印 Log)
3 编译和烧录¶
例程位置:<PAN10XX-NDK>\01_SDK\nimble\samples\peripheral\i2c_hal_gsensor\keil_107x
双击 Keil Project 文件 i2c_hal_gsensor.uvprojx 打开工程,选择 Target PAN107x,编译并烧录至 EVB。
4 例程演示说明¶
烧录完成后,芯片会通过串口打印初始化 Log。成功识别并初始化 SC7A20 后,进入约 1 秒周期的加速度读取循环:
Try to load HW calibration data.. DONE. - Chip Info : 0x1 - Chip CP Version : 255 - Chip FT Version : 4 - Chip MAC Address : D0000000037D - Chip UID : ... - Chip Flash UID : ... - Chip Flash Size : 512 KB APP version: 255.255.65535 === i2c_hal_gsensor sample === [I2C] WHO_AM_I = 0x11 (expect 0x11) [PASS] SC7A20 init OK, enter 1s accel loop
运行中约每 1 秒打印一次三轴加速度原始值:
[GSENSOR] X=12 Y=-8 Z=1024 [GSENSOR] X=15 Y=-6 Z=1018
倾斜或翻转 EVB 板时,可观察到 X/Y/Z 中至少一轴数值发生明显变化。
若 I2C 通信异常(例如断开 SDA),约 1 秒内会打印错误 Log,总线恢复后程序继续运行;重新连接 SDA 后读数应恢复正常:
[GSENSOR] read failed (I2C timeout/NACK)
初始化失败时的典型 Log:
[FAIL] WHO_AM_I read error [FAIL] SC7A20 not detected [FAIL] SC7A20 init failed
4.1 测试清单¶
# |
步骤 |
预期 Log / 现象 |
|---|---|---|
T1 |
EVB + SC7A20 模块上电 |
出现 |
T2 |
读取 WHO_AM_I |
|
T3 |
驱动初始化 |
|
T4 |
静止平放 |
Z 轴绝对值明显大于 X/Y(量级约 ±1000,视量程而定) |
T5 |
翻转/倾斜板 |
X/Y/Z 至少一轴变化 |
T6 |
断开 SDA 后再读 / 复位 |
约 1s 内打印 |