问题标签 [smbus]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
39 浏览

stm32 - STM32CubeMx 中的问题

在使用 STM32 CubeMX(版本 5.2.1)并在 SMBus-two-wire-Interface 中选择 i2c 时,它显示如下:-

警告:STM32 CubeMX 不支持此 IP 的此模式的配置。但是,此 IP 可以手动配置。

任何人请告诉我此警告的原因以及解决方案

0 投票
0 回答
101 浏览

qemu - QEMU 中的 Smbus 设备仿真

我想在 QEMU 中模拟 SMBus/I2C 设备。我看到 QEMU 中有现有模块具有 SMBus 功能,但我不知道如何创建新模块或使用现有模块的命令。有人可以在这里帮忙吗?

0 投票
1 回答
187 浏览

qemu - 在 qemu 中使用 SMBUS_EEPROM

我正在尝试在 QEMU 中模拟和使用 smbus_eeprom 设备。smbus_eeprom 实现已经是开源 QEMU 代码库的一部分。我在启动命令中给出了以下参数以使用相同的参数:

但是,我收到一个错误:“参数“驱动程序”需要可插入的设备类型”?谁能告诉我我错过了什么。

谢谢。

0 投票
2 回答
1171 浏览

python - ImportError:没有名为“smbus2”的模块

我在 VScode 上使用 Pymakr 来编写一个连接到多个传感器的 Pycom L01。我正在尝试使用 smbus2 库,但我无法导入它。
我创建了一个 python 虚拟环境并使用“pip install smbus2”安装它,但是当我尝试上传草图时,输出是:

有人可以帮助我吗?

0 投票
0 回答
467 浏览

qt - #包括文件未找到

在我的 qt 程序中,我包含了 i2c/smbus 的标头(就像我为其他项目所做的那样,也使用 yocto 但不同的 SoC 供应商)。

内核 4.14.24

在 conf/local.conf 文件中,我添加了 i2c-tools

构建工具链并检查 i2c/smbus.h 的 rootfs。没运气。
i2cdetect/get/set 有效(在添加 i2c-tools 之前也做过)。

我在 rootfs 中看不到 smbus.h:/usr/include/i2c/ 有一个 i2c-core-smbus.c,其中功能 i2c_smbus_... ... () 位于但没有 h 文件。

编辑:添加内核版本。

0 投票
1 回答
118 浏览

c - MCP3424 ADC 问题:未保存配置字节/未根据数据表读取

我在使用 MCP3424 ADC 时遇到了一些困难。(数据表)

设置

该设备通过 I2C (100kB/s) 连接,地址为“1101000”(A1 和 A2 连接到 GND)。

我可以根据第 21 页的时序图与设备通信并写入配置字节。

重置

根据第 25 页,建议通过通用地址调用重置设备一次。这看起来像是在工作,因为设备确实发送了 ACK 位(第 9 位保持低电平):
图片: 示波器 - 通用调用 RESET


写入配置字节

等待 >300us(再次上电)后,我写入配置字节,该字节也被确认:

默认配置寄存器字节(第 18 页):

RDY C1 C0 开/关 S1 S0 G1 G0
0 0 0 1 0 0 0 0
  • RDY 位不相关(参见转换模式)
  • 选择通道 0
  • 转换模式是连续的(->设置RDY位无效)
  • 分辨率为 12 位
  • 增益 = 1

现在进行一个测试,我想从通道 2 读取,所以配置字节是:01010000

图片: 数据表图与示波器 - 写入配置字节


从设备读取数据

根据第 24 页的时序图,当使用 12 到 16 位分辨率时,必须读取至少 3 个字节。第一个和第二个字节(地址字节之后)是实际值,第三个字节是配置寄存器,只要提供时钟并且主机不发送 NAK,它就会重复:

问题

当我读取 4 个字节时:

  • 我没有得到有效的原始电压值(CH3 上的 VDD)
  • 设备将默认配置字节作为第三个字节发送。
  • 设备不会在第四个字节上重复配置字节。

图片: 数据表图表与示波器 - 读取 4 个字节


我也尝试过

  • 我确实尝试了另一个 MCP3424 IC 以排除它出现故障的可能性。
  • 我查看了一些 Python 库,发现人们正在使用 smbus_i2c_read_block_data 方法。(显然是因为没有方法可以在不先发送命令(或寄存器)字节的情况下仅读取 n 字节)。我也尝试过使用i2c_smbus_read_i2c_block_data()“i2c-utils.h”中的方法,使用 0x00 作为命令代码(也是 treid 配置字节)。
    但这只会给出空响应(仍然设备发送 ACK 位。):

图片: 示波器 - i2c_read_block_data

非常感激你的帮助!干杯,罗马

0 投票
1 回答
630 浏览

python - Raspi I2c IOError:[Errno 121] 远程 I/O 错误

我正在尝试从 i2c 获取数据,但它显示为IOError: [Errno 121] Remote I/O error. 我会知道哪个部分出了问题以及如何修复它。

这是完整的错误跟踪:

0 投票
0 回答
16 浏览

batterymanager - STM32L 系列。SMBUS。如何让量规 IC 知道我想读的是字而不是字节?

单片机:STM32L系列

协议:SMBUS

如何让量规 IC 知道我想读的是一个字而不是一个字节?

我想要的结果。它在发送命令 0x09 后读取字。

我做了什么。它只读取一个字节...

我将大小参数设置为 2 在接收函数中......但它仍然只读取一个字节。

0 投票
1 回答
84 浏览

python - 如何使用 Python 从 Rapsberry 获取 i2c 值?

我使用 ads1115 从模拟传感器获取值到树莓派 3,但我很难弄清楚如何从 python 中获取它们。

我使用 SMBus 库来获取 i2c 值,但我找不到如何实际获取模拟 0AIN0通道值。我发现 ads1115 的 i2c 地址是,0x48但我找不到 AIN0 通道的地址,因此我没有命令的第二个参数,smbus.read_byte_data(0x48, ???)我尝试了一些地址,例如0x000x01但它总是给我相同的值即使传感器值应该改变。这是我的代码:

0 投票
1 回答
144 浏览

c - 如何使用 i2c/smbus 执行 256 字节块读取

我有这个电源监视器,我正试图与之交互以检索它的故障日志 LTC2977(数据表:https ://www.analog.com/media/en/technical-documentation/data-sheets/ltc2977.pdf )

我是 i2c / pmbus / smbus 的新手,所以请原谅我糟糕的术语或对事物工作方式的不正确描述。在第 18 页,数据表声明我可以像这样与它进行交互:

LTC2977 是一个从器件。主器件可以使用以下格式与 LTC2977 通信:

  • 主发送器,从接收器
  • 主接收器,从发射器

支持以下 SMBus 协议:

  • 写字节,写字,发送字节
  • 读字节、读字、读块
  • 警报响应地址

图 1a-12 说明了上述 SMBus 协议。所有事务都支持 PEC(数据包错误检查)和 GCP(组命令协议)。块读取支持 255 字节的返回数据。因此,可以使用 Mfr_config_all_longer_pmbus_timeout 设置延长 PMBus 超时。

可以使用 SMBus (PMBus?) 命令 0xEE 访问相关日志,其中将输出 0xFF 后跟包含日志数据的 255 个字节。现在我可以通过执行查看设备及其所有内部命令/寄存器(?)i2cdump,同样,如果我这样做,i2cget ... 0xEE我会得到输出0xff,这就是日志中的第一个条目应该是什么。我也可以i2cget ... 0xEE w,所以输出一个单词来获取0x--ff每次调用i2cget时“-”的值在哪里发生变化,也许是我的日志数据?

我的问题是我试图将其作为一个块来阅读,就像我在上面所说的文档一样。我不完全确定如何做到这一点,所以我尝试了以下方法:

过去我在其他 i2c 设备这样读取它们时取得了成功,首先发出命令,然后读入缓冲区。我之前成功使用过的最大缓冲区是 4 字节缓冲区,所以我认为这不会有什么不同,但是在此操作之后我的缓冲区的内容是现在每个条目都是0xff我不认为是正确的,因为i2cget ... 0xEE w有更多不仅仅是0xff在里面。

接下来我尝试模拟一些我看到其他人使用的功能<smbus.h>,我没有这个库可供我使用,所以我尝试重新创建 smbus 块读取功能,结果如下:

不幸的是,这根本不起作用,它冻结了我的目标,我不得不重新启动它。我不确定这里出了什么问题,但我相信这是与设备交互的更合适或更正确的方式,如果我能让它工作的话。我注意到的一件事是块数据大小i2c_smbus_data只有 32 字节,这令人困惑,因为我的数据表似乎表明它将向我发送一个 256 字节的块,这可能是导致它崩溃的原因吗?我读到你可以忽略这个内置的块大小并自己实现它,但我不确定从哪里开始,这和我第一次尝试写入和读取缓冲区不一样吗?

非常感谢任何帮助或了解如何正确使用此 SMBus 或读取日志数据的地方。我相信最坏的情况是我可以在 log 命令上检索一个单词 255 次来构建它,但这似乎是一个非常糟糕的方法