问题标签 [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 回答
258 浏览

linux - 使用 /dev/i2c-%d 对 I2C 进行 Bitbanging

是否可以控制 i2c 的数据/时钟引脚以进行 bitbanging /dev/i2c-%d?如果不是,还有哪些其他选项可用于控制连接到机器的 i2c 引脚?我试过 SMBus 但根据SMBus 协议摘要

在大多数纯 SMBus 适配器上根本无法处理普通的 I2C 命令

0 投票
1 回答
24811 浏览

raspberry-pi3 - RPI 上的 SMBUS 给出 IOError: [Errno 121] 远程 I/O 错误

我尝试过通过 I2C 在 RPi3 和 stm32 之间进行通信。首先我已经安装了 i2c-tools 和 python-smbus。总而言之,我在 RPI 上使用了 python 脚本,如下所示:

当我运行脚本时,我可以看到以下错误:

STM32 配置为 I2C 从机,两个设备都正确连接(SDA、SCL 和 GND)。我怎么知道?我已经使用 BCM2835 库制作了程序。C 程序正常工作。C 程序发送缓冲区没有任何错误。STM32 也收到缓冲区没有任何错误。你能告诉我,我做错了什么吗?

先感谢您。

0 投票
1 回答
689 浏览

perl - I2C:Raspberry Pi(主)读取 Arduino(从)

我想通过 I2C 使用我的 Raspberry Pi 从我的 Arduino Mega(以及另一个项目中的 Arduino Micro)中读取数据块。代码必须在 Perl 中,因为它是我的 Home-Automation-Server 的插件。

我正在使用Device::SMBus接口并且连接正常,我能够写入和读取单个字节。我什至可以writeBlockData与注册地址一起使用0x00。我随机发现这个地址有效。

但是当我想要时readBlockData,似乎没有注册地址起作用。

有谁知道正确的寄存器地址,或者这甚至不是导致错误的问题?

提前致谢

0 投票
1 回答
1094 浏览

raspberry-pi3 - 我如何通过 i2c 从 Rpi 作为主机将多个浮点数据写入 Arduino?

我读了很多帖子 Rpi 如何通过 Arduino 通过 i2c 接收浮点数据,Rpi 作为主控。

但我需要将浮点值写入 arduino,但我没有找到任何示例。我想使用 python smbus。

任何人有一个例子?

非常感谢!

0 投票
1 回答
973 浏览

python-3.x - 在 Raspberry Pi 3 B+ 上使用 Python 3 和 smbus2 操作 AD5272

我在 Raspberry Pi 3 B+ 上使用 Python 3 操作 AD5272 时遇到问题。AD5272是带I2C接口的数控变阻器(我的部分电阻为20 kOhm)。

问题如下:

A 和 W 端子之间的电阻不会改变我尝试设置的任何位置,并且保持在 10KOhm 左右。(默认情况下,当 AD5272 开启时,将在那里设置全电阻的一半)。当我从 RDAC 读取电阻时 - 读取零电阻。

这是我的代码:

输出是:

电脑:树莓派 3,型号 B+

操作系统:Raspbian 9

Python版本:3.5.3

I2C 封装:smbus2

零件编号:AD5272BRMZ-20

数据表:http: //www.farnell.com/datasheets/1706490.pdf

产品链接:http ://www.newark.com/webapp/wcs/stores/servlet/ProductDisplay?catalogId=10001&langId=-1&urlRequestType=Base&partNumber=52R8114&storeId=10194

我做错了什么以及如何解决?

零件的接线经过三重检查。无论我试图在那里写入什么值,从 RDAC 读取的内容总是相同的。我尝试了两个命令:

结果总是一样的:阻力没有改变。用外部欧姆计装置检查电阻。

请帮忙!

0 投票
1 回答
1089 浏览

python - 树莓派 3 中的 I2C 使用 smbus

我正在尝试将我的加速度计 ADXL3458 连接到在 ubuntu mate 中运行的 Raspberry Pi 3。我已经安装了 I2C 通信所需的所有必要软件包。当我执行这个命令时i2cdetect -y 1,我得到了这个结果。在此处输入图像描述

现在我运行这个 Python 代码

我在示波器中得到了这个结果在此处输入图像描述

由此推断我的I2C通信是成功的。但是在我打印的结果中没有显示任何价值 在此处输入图像描述

可以请帮助我面临的问题。我做错了什么吗?

谢谢你

0 投票
0 回答
236 浏览

linux-kernel - 构建 I2C 结构

您好,我正在查看此文档。 https://www.kernel.org/doc/html/v4.11/driver-api/i2c.html 我的目标只是使用 I2C 总线将一些数据写入 EEPROM。我对使用哪些函数以及如何填充这些函数所需的结构有点困惑。我的猜测是我需要创建一个 i2c_client 来代表 EEPROM。我有这个设备树中 EEPROM 的位置。

我将如何用这些数据填充 i2c_client 结构?

然后我猜我会使用这个功能

int i2c_master_send(const struct i2c_client * client, const char * buf, int count)

并为它提供客户端结构和我要编写的字符串以及该字符串的长度,并规定它小于 64k。在这种情况下CPU是主控吗?

我需要包含哪些头文件才能使用文档提供的函数和结构?

谢谢。

0 投票
1 回答
145 浏览

performance - Silabs efm8bb3 在 smbus/i2c 主传输上非常慢

在使用 Simplicity Studio 和 Silabs EFM8BB3(基于 8051 的 SoC)时,我观察到传输速率非常慢,每个字节传输之间存在巨大的暂停(长达 60 毫秒),以及(长达 160 毫秒)在 smbus 主接口上的 i2c 协议上的完整消息之间。

为什么传输速度这么慢,有什么办法可以解决吗?

0 投票
1 回答
3050 浏览

driver - 如何通过 pci 设备中的 SMBus/I2C 访问(读/写)EEPROM 设备?(Linux)

我有一个支持 SMBus/I2C 的带有 EEPROM 的 PCI 设备。我想创建一个可以读取和写入目标 EEPROM 的用户空间应用程序 (Linux)。类似于 IPMI 在每个 SSD/NVME 设备上查询 VPD 信息时所做的事情。但是,我很难查询目标 i2c 总线和 i2c 设备。我正在使用 i2cdetect 查询 i2c 总线,但我无法定位是否检测到我的目标设备。问题,我还需要知道我的设备连接到的 i2c 总线/适配器吗?这是怎么做的?我一直在研究如何创建应用程序,甚至在考虑开发驱动程序。

我已经解决这个问题好几个星期了,希望有人可以帮助我解决这个问题。非常感谢!!!

0 投票
0 回答
2510 浏览

python - SMBus write_i2c_block_data() 命令

所以我在一个月前开始了一个使用 I2C 通信的微控制器项目,除了 python 之外什么都不懂。

我必须与使用 ASCII 字符串进行通信的蠕动泵交谈。所以我的设置目前由 Raspberry Pi、I2C 总线、Arduino 和蠕动泵组成。Arduino 仅用作电源。我认为一个好的起点就是尝试打开和关闭泵 LED。LED 开的代码是“L,1”,LED 关的代码是“L,0”。(“”表示里面是绝对码)。[链接] https://www.atlas-scientific.com/_files/_datasheets/_peristaltic/EZO_PMP_Datasheet.pdf

通过在 python 中使用 smbus.SMBus,我通过 write_i2c_block_data 的命令发送了数据。smbus 的文档提供以下内容:write_i2c_block_data(int addr,char cmd,long vals[]) 但是我不明白“char cmd”是什么意思。我不能在那里放一个字符串命令,它只有在我放一个整数时才起作用。

这是代码:

通过 raspberry Pi 命令提示符运行此代码后,泵 LED 在给定的时间范围内开始闪烁。不幸的是,它从未停止闪烁,并且当我使用 i2ctools 命令搜索它时也没有出现i2cdetect -y 1我假设泵的芯片现在处于无限循环中。

我的问题是: 1. 应该如何使用 write_i2c_block_data() 命令以及它需要什么参数。目前我认为第一个参数是从地址,第二个是流的初始字节,第三个参数是要发送的流整数值的其余部分。2. 泵卡在无限循环中可能出了什么问题,我该如何解决