我在 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);
}
有谁知道我将如何将速度更改为标准模式。
谢谢
我在 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);
}
有谁知道我将如何将速度更改为标准模式。
谢谢
您可以在驱动程序的“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 频率/速度。