我在雪球板上使用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);
}
有誰知道我怎麼會去改變的速度標準模式。
由於
我在雪球板上使用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);
}
有誰知道我怎麼會去改變的速度標準模式。
由於
您可以更改驅動程序'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設備的時鐘頻率。
,則應該更換I2C Frequency
在相應的外圍的驅動源文件(即:Slave device
到要通過I2C通信示例:EEPROM
/Camera
等)
您可能會發現一些在驅動程序源代碼中定義的宏...這樣的:
#define EEPROM_I2C_FREQ 400000 //400KHz
將其更改爲:
#define EEPROM_I2C_FREQ 100000 //100KHz
只有相應的驅動程序,I2C頻率/速度纔會改變。
我在哪裏可以找到這個驅動程序源文件? – ManuelSchneid3r 2013-06-08 12:47:15
@ ManuelSchneid3r這取決於你的驅動程序。在Linux驅動程序將在/ drivers/YourDriver文件夾。例如:/ driver/EEPROM文件夾中的EEPROM驅動程序! – GNKeshava 2013-06-10 04:52:07
我不相信你可以從用戶模式做到這一點。問題是'i2c'總線上的所有外設都使用相同的時鐘。您可以找到您的機器文件(或設備表)並在那裏更改時鐘。這裏是'i2c'用戶文檔https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/i2c/dev-interface – 2013-03-12 03:28:25