This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] SM72442:与 SM72442和 Raspberry PI 进行 I2C 通信

Guru**** 2386620 points
Other Parts Discussed in Thread: SM72442, SM72295
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/power-management-group/power-management/f/power-management-forum/693420/sm72442-i2c-communication-with-sm72442-and-raspberry-pi

器件型号:SM72442
主题中讨论的其他器件: SM72295

我正在尝试使用 Raspberry Pi 中的 I2C 读取/写入 SM72442寄存器。 我能够使用"i2cdetect -y 1"检测我的器件、且其地址为0x03。 目前、我正在尝试读取 reg0的内容。 请在下面查找我的代码:

导入 smbus

总线= smbus.SMBus (1)

DEVICE_ID = 0x03

寄存器= 0xE1  #base 寄存器地址0xE0

尝试:

  b = BUS.READ_BYTE_DATA (DEVICE_ID、寄存器)

  打印(十六进制(device_id)、b)

除了:

  通过

它会打印('0x3'、7)。 显然、READ_BYTE_DATA 仅告知该寄存器的字节数。 但是、即使我将寄存器编号更改为任何其他值、它始终提供值7。 从文档中可以了解到、我需要首先发送地址、从 SM72442获取一个 ACK、发送命令寄存器、Get 和 ACK、然后重复启动。 但是、我无法确定如何使用 python smbus 实现它。 有关使用 smbus 或任何其他基于 Linux 的低级 I2C 库读取/写入寄存器的任何帮助都将非常有用。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您能否引用以下 e2e 线程、尤其是 Florent 的最后一篇帖子? SM7442和 SM7445非常相似。
    e2e.ti.com/.../681745
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、非常感谢您的建议。 这对我大有帮助。 我现在能够读取寄存器、但我面临一个奇怪的问题。 如果我读取了 Reg3、Reg4和 Reg5的内容、它们看起来是正确的。

    下面给出了我的 Python 代码:

    ########
    导入 smbus
    从时间导入休眠模式开始
    总线= smbus.SMBus (1)#1表示/dev/i2c-1
    DEVICE_ID = 0x06
    寄存器= 0xE5
    data=bus.read_i2c_block_data (device_id、寄存器、8)
    打印数据
    ########

    Reg3给出了[7、24、160、128、1、 10、0、0]
    Reg4提供[7、0、0、0、0、0、 0、0、0]
    reg 5给出了[7、24、160、128、1、 10、0、0]

    所有这些寄存器都是 R/W、复位时返回的值是正确的。 但是、如果我尝试读取 Reg0或 Reg1、它们会提供随机值、每次我访问时都会更改这些值。 我是否可以在相应的引脚上未连接任何引脚并使其悬空、从而导致此问题? 我是否需要在 ADC 上设置外部值、即使我想在内部设置 V/I 限制? 此外、当我连接感应电阻器时、这个问题是否会得到解决? 我目前正在使用基本电源电路检查它。 请对此问题发表评论。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    希望获得以下帮助:

    它似乎是由悬空引脚引起的、因为 reg0是由 A1-6引脚设置的编程状态。

    关于 reg1、详细的 reg1说明

    位域复位值R/W位域说明

    55:54RSVD2'h0R保留供将来使用。
    53:44Vout10'h0R电压输出
    43:42RSVD2'h0R保留供将来使用。
    41:32输出电流10'h0R电流输出
    31:22RSVD10'h0R保留供将来使用。
    21:12V输入电压10'h0R输入电压
    11:10RSVD2'h0R保留供将来使用。
    9:0输入电流10'h0R电流输入

    谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您的回答。 我能够解释从寄存器中读取的值。 我对使用寄存器而不是外部电路来设置最大电压和电流有一个问题。 在 SM3320设计中、使用寄存器设置电压、对该部件的解释非常清楚。 我有给定分压器电路的公式、我能够为所需的输出电压设置寄存器值。 但是、由于该电路中的电流限制是在外部完成的、因此 SM3320参考设计或 SM3320数据表中未介绍用于使用寄存器进行电流限制的调节公式。  

    例如、在 SM3320电路中、AIOUT 直接连接到 SM72295的 BOUT。 如果我想在内部强制实施限制、是否有人可以解释如何为该情形设置寄存器值?