python smbus/i2c 频率

问题描述 投票:0回答:4

我想更改 i2c 总线频率,以便允许稍长的电缆。

我正在使用 python-smbus 包,它工作得很好,但是,我无法找到如何设置总线频率。

我已经浏览了docs,但无法找到任何与设置总线参数相关的内容。

这是可以用 python 完成的事情还是我需要更低级别的东西?

我使用的是Raspberry PI,它是ARM架构。

python i2c raspberry-pi
4个回答
3
投票

在具有最新 Jessie 镜像的 Raspberry Pi 上,您可以使用它来检查当前的 I2C 频率:

sudo cat /sys/module/i2c_bcm2708/parameters/baudrate

要更改频率,您可以添加/更改此参数:

dtparam=i2c_baudrate=50000

(将 50000 替换为所需频率):

/boot/config.txt

然后重新启动以更改频率。


0
投票

你必须做一些较低级别的事情。通常这些东西是由内核中的board file 设置的。除了分配资源之外,我没有看到 i2c 执行任何具体操作,因此它可能只是使用默认时钟除数。如果您查看数据表的第 28 页,您会发现默认值是 0x5dc。您需要将寄存器设置为不同的值(可能更大)以应对更长的电缆。


0
投票

我现在花费了大量时间研究所有选项。事实证明,确实存在另一篇文章中指定的低杠杆寄存器,但是,Raspberry-Pi 的驱动程序在每次使用时都会重置它们的值,使得对它们的任何修改几乎毫无用处。解决方案是编写自定义 i2c 驱动程序或只是等待更新版本。

一些底层信息可以在byval论坛找到。


0
投票

对于任何仍然感兴趣的人:

设置更高的总线速度是不够的。如果不是最低的,则 I2C 协议会发生变化,使用 100kHz。从机地址必须发送两次:首先通知从机更高速度的事务,然后让从机能够以更高的速度接收。

SMBUS 协议的总线频率固定为 100kHz。

© www.soinside.com 2019 - 2024. All rights reserved.