注意点:
- 如果在设置I2C_SLAVE的时候,提示device_busy,可以使用I2C_SLAVE_FORCE, 在驱动里面二者对应同一个case语句
- 应用层可以调用接口:i2c_smbus_write_word_data(fd, __, __);和i2c_smbus_read_word_data(fd,__);
分享:
问题如下:
1. 应用程序中直接fd句柄是整个I2C0总线的文件句柄,而只是在set地址的时候,将I2C address设置下去,后面操作该芯片还是操作全局I2C0总线上这个文件,并没有指定去操作该芯片,这其中是怎么做到的?这样的话,如果在一个main程序中, 操作同一总线上不同i2c设备,而文件句柄是同一个,这要如何操作?
--------------------------------------------------------------------------------------------
驱动方面:
首先配置I2C内核驱动,将pca9555的源码built-in进入(这里根据需要可能要配thermal的驱动),然后在devicetree中根据pca9555硬件I2C地址配置节点。
测试源码:
// I2C test program for a PCA9555 #include <stdint.h> #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <linux/i2c-dev.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/ioctl.h> #include <fcntl.h> // I2C Linux device handle int g_i2cFile; // open the Linux device void i2cOpen() { g_i2cFile = open("/dev/i2c-0