配置Linux I2C速度

时间:2013-03-11 11:47:23

标签: performance linux-kernel i2c

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

我使用定义的api并配置如下

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

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

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

由于

2 个答案:

答案 0 :(得分: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设备的时钟频率。

答案 1 :(得分:0)

您应该更改相应外设的驱动程序源文件中的I2C Frequency(例如:Slave device,您要通过I2C进行通信。示例:EEPROM / Camera等。)

您可能会在该驱动程序源代码中找到一些宏...如:

#define EEPROM_I2C_FREQ 400000 //400KHz

将其更改为:

#define EEPROM_I2C_FREQ 100000 //100KHz

仅对于相应的驱动程序,I2C频率/速度将被更改。