I2C的简单实用案例

本文介绍了一个Linux系统中通过I2C总线与从设备0x30通信的实例。首先打开`/dev/i2c-0`设备文件,然后使用`ioctl`设置超时时间和重试次数。接着,通过动态分配内存创建`i2c_msg`结构体数组,进行数据写入操作。在写入时,需注意从设备地址的7位形式以及目标寄存器地址的处理。最后,提供了相关参考资料链接以供深入学习。
摘要由CSDN通过智能技术生成

//利用i2c总线进行通信,从设备地址是0x30

//头文件
#include <stdio.h>
#include <linux/types.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <errno.h>
#define I2C_RETRIES 0x0701
#define I2C_TIMEOUT 0x0702
//I2C_RDWR指令在i2cdev_ioctl函数中,会调用内核中的i2cdev_ioctl_rdrw函数
#define I2C_RDWR 0x0707

/*********定义struct i2c_rdwr_ioctl_data和struct i2c_msg,要和内核一致*******/
struct i2c_msg
{
unsigned short addr; //slave addr,需要右移1bit
unsigned short flags;//读写操作标志位
#define I2C_M_TEN 0x0010
#define I2C_M_RD 0x0001
unsigned short len;//读写的长度
unsigned char *buf;//读写的缓冲区
};
struct i2c_rdwr_ioctl_data
{
struct i2c_msg *msgs;
int nmsgs;
/* nmsgs这个数量决定了有多少开始信号,对于“单开始时序”&#

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值