ST意法半导体
直播中

邓长生

11年用户 997经验值
擅长:可编程逻辑
私信 关注
[问答]

LIS3DH地址更改配置后的问题求解

我正在使用表现出奇怪行为的 LIS3DH 分线板。我的 I2C master 是一块 STM32L496 板,已经用其他 I2C 芯片测试过。

启动
  • I2C 初始化至 400 KHz
  • 通过 HAL_I2C_IsDeviceReady() 循环扫描所有可能的地址
  • 记住地址
  • 读取 WHO_AM_I 注册
  • 如果是 LIS3DH,写入配置寄存器

如果我将 0x00 写入 CTRL_REG0,则下一次写入或读取是 NACK。  
如果我重置 MCU,第 3 步中报告的地址将更改为 0x10。(因此 NACK)

因此,在电源循环上,来自第 3 步的地址是 0x30 并且配置后芯片 NACK 的 0x30。
MCU 复位时,第 3 步的地址为 0x10,一切正常。   




回帖(1)

蓝孝增

2022-12-28 15:10:19
我相信将 0x00 写入 CTRL_REG0 是根本原因。这似乎是无证行为。
数据表建议将 CTRL_REG0 的第 0 位到第 6 位保留为默认值,以确保设备的正确操作。
此外,如果更改 SDO_PU_DISC 位的值,SDO/SA0 上拉会断开连接,这会直接影响 I2C 从地址值,如数据表第 25 页中所述:

SDO/SA0 焊盘可用于修改器件地址的低位。如果 SA0 焊盘连接到电源,则 LSb 为“1”(地址 0011001b),否则如果 SA0 焊盘接地,则 LSb 值为“0”(地址 0011000b)。该解决方案允许将两个不同的加速度计连接并寻址到相同的 I2C 线路。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分