2013-03-11 1785 views
2

我在雪球板上使用I2C,默認運行頻率爲400KHz,並希望將其降低到100KHz。配置Linux I2C速度

我使用定義的API,並配置如下

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

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

有誰知道我怎麼會去改變的速度標準模式。

由於

+2

我不相信你可以從用戶模式做到這一點。問題是'i2c'總線上的所有外設都使用相同的時鐘。您可以找到您的機器文件(或設備表)並在那裏更改時鐘。這裏是'i2c'用戶文檔https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/i2c/dev-interface – 2013-03-12 03:28:25

回答

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在相應的外圍的驅動源文件(即:Slave device到要通過I2C通信示例:EEPROM/Camera等)

您可能會發現一些在驅動程序源代碼中定義的宏...這樣的:

#define EEPROM_I2C_FREQ 400000 //400KHz 

將其更改爲:

#define EEPROM_I2C_FREQ 100000 //100KHz 

只有相應的驅動程序,I2C頻率/速度纔會改變。

+0

我在哪裏可以找到這個驅動程序源文件? – ManuelSchneid3r 2013-06-08 12:47:15

+0

@ ManuelSchneid3r這取決於你的驅動程序。在Linux驅動程序將在/ drivers/YourDriver文件夾。例如:/ driver/EEPROM文件夾中的EEPROM驅動程序! – GNKeshava 2013-06-10 04:52:07