当前页面为 开发中 版本,查看特定版本的文档,请在页面左下角的下拉菜单中进行选择。

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 例程演示说明

  1. 烧录完成后,芯片会通过串口打印初始化 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
    
  2. 运行中约每 1 秒打印一次三轴加速度原始值:

    [GSENSOR] X=12 Y=-8 Z=1024
    [GSENSOR] X=15 Y=-6 Z=1018
    
  3. 倾斜或翻转 EVB 板时,可观察到 X/Y/Z 中至少一轴数值发生明显变化。

  4. 若 I2C 通信异常(例如断开 SDA),约 1 秒内会打印错误 Log,总线恢复后程序继续运行;重新连接 SDA 后读数应恢复正常:

    [GSENSOR] read failed (I2C timeout/NACK)
    
  5. 初始化失败时的典型 Log:

    [FAIL] WHO_AM_I read error
    [FAIL] SC7A20 not detected
    [FAIL] SC7A20 init failed
    

4.1 测试清单

#

步骤

预期 Log / 现象

T1

EVB + SC7A20 模块上电

出现 === i2c_hal_gsensor sample ===

T2

读取 WHO_AM_I

[I2C] WHO_AM_I = 0x11

T3

驱动初始化

[PASS] SC7A20 init OK

T4

静止平放

Z 轴绝对值明显大于 X/Y(量级约 ±1000,视量程而定)

T5

翻转/倾斜板

X/Y/Z 至少一轴变化

T6

断开 SDA 后再读 / 复位

约 1s 内打印 [GSENSOR] read failed,程序不卡死;接回 SDA 后读数恢复

5 RAM/Flash资源使用情况

PAN107x:

Flash Size:  21.96k
RAM Size:  13.88 k