重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
今天就跟大家聊聊有关Linux I2C App开发的示例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
我们提供的服务有:成都网站建设、网站制作、微信公众号开发、网站优化、网站认证、安阳县ssl等。为成百上千企事业单位解决了网站和推广的问题。提供周到的售前咨询和贴心的售后服务,是有科学管理、有技术的安阳县网站制作公司
1 , 头文件
/linux/i2c-dev.h
2 , 打开文件,请看示例代码
int file; int adapter_nr = 1; /* I2C适配器编号 */ char filename[20]; snprintf(filename, 19, "/dev/i2c-%d", adapter_nr); file = open(filename, O_RDWR); if (file < 0) { /* 打开失败 */ exit(1); }
3 , 指定I2C从设备地址
int addr = 0x40; /* I2C 从机地址 */ if (ioctl(file, I2C_SLAVE, addr) < 0) { /* 打开失败 */ exit(1); }
4 , 使用SMBUS API 访问设备
5 , SMBUS 详细接口时序说明
标记符 | 长度 | 说明 |
---|---|---|
S | 1 bit | I2C启动 |
P | 1 bit | I2C停止 |
Rd/Wr | 1 bit | 控制字中的读写标志位,读操作为1,写操作为0 |
A, NA | 1 bit | 应答标志 |
Addr | 7 bits | 7位I2C地址 |
Data | 8 bits | 字节数据 |
Comm | 8 bits | 命令字节,可理解为I2C设备寄存器地址 |
[..] | N char | I2C设备返回的数据 |
6 , 相关接口及相应时序说明
【1】__s32 i2c_smbus_write_quick(int file, __u8 value);
发送一个写控制字,可用于测试I2C设备是否存在。
S Addr Rd [A] [Data] NA P
【2】__s32 i2c_smbus_read_byte(int file);
发送一个读控制字,并从I2C设备中读取一个字节。
S Addr Rd [A] [Data] NA P
【3】__s32 i2c_smbus_write_byte(int file, __u8 value);
发送一个写控制字,并向I2C设备中写入一个字节。
S Addr Wr [A] Data [A] P
【4】__s32 i2c_smbus_read_byte_data(int file, __u8 command);
向I2C设备发送一个写控制字+控制指令(寄存器地址),再发送一个读控制字,此时I2C从设备内部的读写指针转移到指定的位置,并返回一个字节,最后返回一个无应答NA。
S Addr Wr [A] Comm [A] S Addr Rd [A] [Data] NA P
【5】__s32 i2c_smbus_write_byte_data(int file, __u8 command, __u8 value);
向I2C设备发送一个写控制字+控制指令(寄存器地址),紧接着发送指令内容(寄存器内容,单字节)。
S Addr Wr [A] Comm [A] Data [A] P
【6】__s32 i2c_smbus_read_i2c_block_data(int file, __u8 command, __u8 *values);
向I2C设备发送一个写控制字+控制指令(寄存器地址),再发送一个读控制字,此时I2C从设备内部的读写指针转移到指定的位置,并连续返回多个字节,I2C主机读取到一定数量字节内容之后发送无应答NA。
S Addr Wr [A] Comm [A] S Addr Rd [A] [Data] A [Data] A ... A [Data] NA P
【7】__s32 i2c_smbus_write_i2c_block_data(int file, __u8 command, __u8 length, __u8 *values);
向I2C设备发送一个写控制字+控制指令(寄存器地址),接着发送发送指令内容(寄存器内容,多字节)
S Addr Wr [A] Comm [A] Data [A] Data [A] ... [A] Data [A] P
【注意点1】
这些函数如果返回-1代表操作失败。在一些具有写功能的函数中,返回0代表操作成功,在具有读功能的函数中,返回读取的字节数(除i2c_smbus_read_block_data)。读块(block)操作时不应超过32个字节。
看完上述内容,你们对Linux I2C App开发的示例分析有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。