配置 Linux I2C 速度

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

我在 Snowball 板上使用 I2C,默认以 400KHz 运行,并希望将其降低到 100KHz。

我使用

<linux/i2c.h>
中定义的api,配置如下

m_fd = open(m_filename.c_str(), O_RDWR);

if (ioctl(m_fd, I2C_SLAVE_FORCE, m_addr) < 0) 
{
    throw I2cError(DeviceConfigFail);
}

有谁知道我如何将速度更改为标准模式。

谢谢

performance linux-kernel i2c
2个回答
1
投票

您可以在驱动程序的“struct i2c_gpio_platform_data”中更改 I2C SCL 频率。

    static struct i2c_gpio_platform_data xyz_i2c_gpio_data = {
    .sda_pin = GPIO_XYZ_SDA,
    .scl_pin = GPIO_XYZ_SCL,
    .udelay = 5, //@udelay: signal toggle delay. SCL frequency is (500 / udelay) kHz
    ....
};

更改“udelay”会更改“xyz”i2c 设备的时钟频率。


0
投票

您应该更改相应外设驱动程序源文件中的

I2C Frequency
(即:您通过I2C通信的
Slave device
。示例:
EEPROM
/
Camera
等)

您可能会发现该驱动程序源代码中定义了一些宏...例如:

#define EEPROM_I2C_FREQ 400000 //400KHz

更改为:

#define EEPROM_I2C_FREQ 100000 //100KHz

仅针对相应的驱动程序,I2C 频率/速度才会改变。

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