在linux上层有一个操作i2c的通用接口——smbus,在这里我们不介绍smbus的使用,但要知道wiringPi的i2c接口就是在linux上层基于smbus封装的。
wiringPi封装的函数中,有byte和word的读写,但是没有封装block的读写。也就是说,没有提供一次写大块数据的方法。

<file> = wiringPiI2CSetup(int <从机地址>);
打开i2c设备。
输入的是7位的从机地址,不需要输入i2c设备节点路径。
返回的是linux标准的设备文件描述符。

实际的处理过程是这样的:
wiringPi自动检测i2c设备文件路径(/dev/i2c-0或/dev/i2c-1);
然后打开文件,获取到了标准文件描述符;
然后通过ioctl设置从机地址。

int wiringPiI2CWrite(int fd,int data);
往从机写一个字节。
也就是从机地址后的一个字节,通常是command。
<起始> + <从机地址W> + <data> + <结束>

int wiringPiI2CWriteReg8(int fd, int reg, int data);
往从机指定的reg写入1个字节。
<起始> + <从机地址W> + <reg> + <data> + <结束>

int wiringPiI2CWriteReg16(int fd, int reg, int data);
往从机指定的reg写2个字节,先传输低8位,后传输高8位。
<起始> + <从机地址W> + <reg> + <data低8位> + <data高8位> + <结束>

int wiringPiI2CRead(int fd);
从从机直接读取一个字节,不写入任何cmd。
<起始> + <从机地址R> + <读1个字节> + <结束>

int wiringPiI2CReadReg8(int fd, int reg);
读取从机指定reg的一个字节。
<起始> + <从机地址W> + <reg> + <起始> + <从机地址R> + <读1个字节> + <结束>

int wiringPiI2CReadReg16(int fd, int reg);
读取从机指定reg的两个字节,先传输低8位,后传输高8位。
<起始> + <从机地址W> + <reg> + <起始> + <从机地址R> + <读低8位> + <读高8位> + <结束>


本站所有文章欢迎转载,但请保留作者信息和原文地址。

Comments