问题标签 [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.
python - 使用 smbus 发送值数组
我有一段代码使用该i2ctransfer
命令将命令发送到板。
这个命令在 python 中调用subprocess.Popen
,我正在重写代码以使用一些内置的 python 包,比如 smbus,但是我在实现它时遇到了困难,所以它发送相同的数据。
目前,命令生成如下:
该命令的一个示例是:
基本上是向地址为 0x03 的设备发送 12 个字节。此命令使用一条指令更新两个寄存器:
前两个字节是地址:0x2304 后面是 4 个字节的数据 0x49742400
之后又是 2 个字节的地址:0x2305,然后是 4 个字节的数据:0x49742400
我尝试使用 write_i2c_block_data,但我对参数感到困惑,我不想直接写入寄存器,我只想发送一个字节数组,板子本身会将这些数据解析为寄存器地址和寄存器值。
但我只是得到一个
如何使用 smbus 将值数组发送到设备 0x03?
arm - STM32如何从锁定中恢复
我正在尝试与 SMBus 电池通信。那有 2 个部分,所以我使用 2 个 I2C 模块。在第一个 I2C 模块成功通信后,第二个模块卡住了。它卡在忙碌中。在那种情况下,我认为我需要重置该 I2C 模块。但是,我做不到。
我尝试了以下方法:
1)通过使用HAL库deiniting然后再次初始化模块:
2)在第一种方法中添加 Swrst 行:
3)
4)使用勘误文件和这行代码:
STM32中的I2C模块有没有合适的方法复位?如何从锁定中恢复?
编辑:我正在使用 STM32F103C8。现在我添加了 MX_GPIO_Init 函数,我可以重置模块:
但是传输中的第二个模块总是失败。如果我先使用 hi2c1 然后 hi2c2 然后 hi2c2 失败。如果我先使用 hi2c2 则反之亦然。我试图禁用第一个模块,然后尝试与第二个模块通信,但这也不起作用。
python - SMbus 的第二个版本是否正确?
我要导入 SMbus 包: 链接
(我使用 Python 3.7)
我尝试在 win10 和 Visual Code 中使用我的 cmd 窗口运行它。( pip install smbus
)
- 可以运行 install "smbus2" !但是这个包也需要“smbus” :(
我总是收到此错误消息:
raspberry-pi - 从 mbus 协议转换为 modbusIP
我正在尝试使用覆盆子将 mbus 协议转换为 modbus IP 协议。
我对此很陌生,只是在做我老板问的 bcs。我一直在谷歌上搜索,但我一无所获。任何帮助都会有所帮助。
我试图读取 mbus 字节进行转换,但这是不可能的。
python - Python smbus 读取数据
是否可以通过 Smbus 读取 3 个参数?
首先,我说要读取或写入哪个 8 位:
我写了跟随命令(3个参数):
但我只能读出所有 8 位:
这读取所有 8 位,但我需要类似:
这样就很难编程,因为如果我写其他东西然后再读一遍,我会得到其他数字。
linux - 有没有办法在基于 Linux 的 SMBus 接口上读取/写入超过 32 个字节?
我正在尝试通过 Linux 上的 SMBus ioctls 访问基于 I2C 的设备。我需要写超过 32 个字节。I2C_SMBUS ioctl 将大小限制为 32 字节。底层驱动程序不支持 I2C_RDWR ioctl 和直接 read()/write() 调用。我也尝试过逐字节读/写,但它对我不起作用。
linux-kernel - 如何在 I2C_SMBUS ioctl 的帮助下模拟 I2C_RDWR ioctl?
我系统上的底层驱动程序不支持 I2C_RDWR ioctl。它只支持 I2C_SMBUS。我的要求是在用户或内核空间中支持带有 I2C_SMBUS 的单个消息 I2C_RDWR ioctl。
我怎样才能做到这一点?
c++ - 如何使用 C++ 通过 I2C 从 MPU6050 读取数据块
我使用 MPU6050 设备并获取加速度计和陀螺仪数据。
现在我需要使用 cpp 语言从 MPU6050 读取数据块。
在 Python 中很容易做到这一点:
该函数从地址 ACCEL_XOUT_H 开始读取一个数据块(14 个字节)。
以及如何在 cpp 中做同样的事情?我应该使用这个功能:
如果是,请解释我应该如何使用它。
如果否,请给我写一个例子。
python - I2C 传感器读取树莓派和 Arduino 的区别
我正在使用 Sensirion SFM3300 流量传感器,并且可以使用以下代码 (I2C) 使用 Arduino 读取正确的值:
但是使用 Raspberry Pi,我编写了几乎相同的代码,希望它也能正常工作。这是代码:
代码看起来确实一样,但我只得到 -273,06666666666 作为返回值。有人知道 Raspberry Pi 和 Arduino I2C 之间的区别在哪里,并且可以帮助我在 Pi 上获得正确的值吗?
c - 写入初始命令后使用地址偏移读取 SMBus 块
我正在尝试实现一个主 Linux 驱动程序来与Omron D6t-PH 差压流量计从设备进行通信。
阅读该仪器的手册和提供的示例代码(用于 STM32 uC),看来我需要在初始“写入访问地址”之后增加从地址。这将允许我从设备中读取测量数据。
Linux i2c smbus 库中提供了一个函数来执行此操作,尽管它似乎不支持初始“访问寄存器写入”之后的地址增量。
有谁知道有关如何处理此设备地址递增要求的解决方法或一些建议?
以下是我一直在关注的一些文档和指南。首先是设备手册;
地址增量要求显示在D6T... 手册的 P.7 表 3 中
写入期间:将从机地址的 LSB 设置为“0”以形成 D8h (1101_1000b)。
读期间:设置从机地址的 LSB 为“1”,形成 D9h (1101_1001b)。
所需命令的流程图在 P.12,P20-22
一些概述相同的示例代码在 P.28 上
I2C1_MastrSel(添加,1);/* 从机 7bit => 8bit 用于 RD */
关于我正在尝试编写的主 Linux 用户空间驱动程序,如何更改“SMBus Block Read”命令,以便在第二个“Start”命令之后增加地址?这是命令结构:
S Addr Wr [A] Comm [A] S Addr Rd [A] [Count] A [Data] A [Data] A ... A [Data] NA P
这是我迄今为止编写的一些原型代码,它在块读取的点上是成功的: