关于读写I2C总线的时候出错的问题

我的程序是这样的:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

int main()

{

int fd,ret;

struct i2c_rdwr_ioctl_data codec_data;

fd=open("/dev/i2c-3",O_RDWR);

if(fd<0)

perror("open error");

codec_data.nmsgs=2;

codec_data.msgs=(struct i2c_msg*)malloc(codec_data.nmsgs*sizeof(struct i2c_msg));

if(!codec_data.msgs)

{

perror("malloc error");

exit(1);

}

ioctl(fd,I2C_TIMEOUT,1);/*超时时间*/

ioctl(fd,I2C_RETRIES,2);/*重复次数*/

sleep(1);

codec_data.nmsgs=1;

(codec_data.msgs[0]).len=2;

(codec_data.msgs[0]).addr=(0x36 >> 1);//我的音频硬件地址;

(codec_data.msgs[0]).flags=0; //write

(codec_data.msgs[0]).buf=(unsigned char*)malloc(2);

(codec_data.msgs[0]).buf[0]=0x04;

(codec_data.msgs[0]).buf[1]=0x55;//the data to write

ret=ioctl(fd,I2C_RDWR,(unsigned long)&codec_data);

if(ret<0)

perror("ioctl error1");

sleep(1);

/******read data from e2prom*******/

printf("read start\n");

codec_data.nmsgs=2;

(codec_data.msgs[0]).len=1; //e2prom 目标数据的地址

(codec_data.msgs[0]).addr=(0x36 >> 1);//yinpin;

(codec_data.msgs[0]).flags=0;//write

(codec_data.msgs[0]).buf[0]=0x04;

(codec_data.msgs[1]).len=1;//读出的数据

(codec_data.msgs[0]).addr=(0x36 >> 1);

(codec_data.msgs[1]).flags=I2C_M_RD;//read

(codec_data.msgs[1]).buf=(unsigned char*)malloc(1);//存放返回值的地址。

(codec_data.msgs[1]).buf[0]=0;//初始化读缓冲

ret=ioctl(fd,I2C_RDWR,(unsigned long)&codec_data);

if(ret<0)

perror("ioctl error2");

close(fd);

return 0;

}

音频的硬件地址是没有错误的。在开发板上运行的结果是这样的

ioctl error2: Remote I/O error

只提示了读的时候错误了。请问,这个错误是怎么造成的,我一直困惑了好久!

音频,I2C

------解决方案--------------------

读的时候,codec_data.msgs[1] 没有赋值。

linux i2c ioctl错误,关于读写I2C总线的时候出错的有关问题相关推荐

  1. 总结:linux驱动之I2C至少四种读写方法

    总结在linux环境下四种读写I2C设备的方法: 一:读写/dev/i2c-x设备结点 /dev/i2c-x设备结点对应的驱动文件为内核目录drivers/i2c下自带的i2c-dev.c文件,通读此 ...

  2. i2c驱动架构 davinc dm368 i2c驱动分析

    预备知识 在阅读本文最好先熟悉一种i2c设备的驱动程序,并且浏览一下i2c-core.c以及芯片提供商的提供的i2c总线驱动(i2c-davinci.c).标题党请见谅! 其实i2c接口非常的简单,即 ...

  3. linux下的iic驱动程序,实战经验吐血推荐:怎样在Linux环境下轻松实现基于I2C总线的EEPROM驱动程序...

    4开发实例本文引用地址:http://www.eepw.com.cn/article/279351.htm Linux内核已经提供了I2C驱动中所需要的基本模块.i2c-core.i2c-dev和i2 ...

  4. Linux读写I2C设备I2C_RDWR用法

    i2c注册设备知识点:kernel/msm-4.9/drivers/i2c/i2c-dev.c为每个i2c设备创建设节点,所以我们不用创建./dev/i2c-0是在注册i2c-dev.c后产生的,代表 ...

  5. platform框架--Linux MISC杂项框架--Linux INPUT子系统框架--串行集成电路总线I2C设备驱动框架--串行外设接口SPI 设备驱动框架---通用异步收发器UART驱动框架

    platform框架 input. pinctrl. gpio 子系统都是 Linux 内核针对某一类设备而创建的框架, input子系统是管理输入的子系统 pinctrl 子系统重点是设置 PIN( ...

  6. Linux驱动入门学习(三):I2C架构全面理解

    I2C 概述 I2C是philips提出的外设总线. I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL ,使用SCL,SDA这两根信号线就实现了设备之间的数据交互,它方便了工程师的布线. ...

  7. 【嵌入式Linux】嵌入式Linux应用开发基础知识之I2C应用编程和SMBus协议及AP3216C应用编程

    文章目录 前言 1.IIC协议和SMBUS协议 1.1.IIC协议 1.1.1.硬件框架 1.1.2.软件框架 1.1.3.读写数据格式 1.1.4.硬件结构--在硬件上是如何实现双向传输 1.2.S ...

  8. Linux设备驱动程序架构分析之I2C架构(基于3.10.1内核)

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 内核版本:3.10.1 I2C体系架构的硬件实体包括两部分: 硬件I2C Adapter:硬件I2C Adapter ...

  9. linux下I2C驱动发送IO时序,I2C驱动情景分析——怎样控制I2C时序

    内核版本:linux-3.4.2 源程序:    linux-3.4.2\drivers\i2c\busses\I2c-s3c2410.c 这次要解决的问题是:如何配置soc的I2C模块,输出想要的时 ...

最新文章

  1. 分布式图数据库在贝壳的应用实践
  2. BeanPostProcessor —— 连接Spring IOC和AOP的桥梁
  3. Spring Cloud学习笔记-010
  4. tableau可视化数据分析60讲(十二)-过滤器详解
  5. ARM MOV指令对立即数的要求
  6. Greenplum 权限管理与客户端认证
  7. vue中设置子组件的点击事件不影响父组件的点击事件
  8. sprintf()、fprintf()的使用方法
  9. 超好用Web草图工具Balsamiq Mockups
  10. ubuntu12.10安装android编译环境
  11. 敏捷开发一千零一夜读书笔记之敏捷初探
  12. 相辅相成的知识图谱与预训练语言模型
  13. 高等数学(第七版)同济大学 习题7-8 个人解答
  14. linux的tar命令详情;linux多个文件压缩打包到一个压缩文件
  15. html仿b站页面代码,B站首页界面设计:附详细教程
  16. 科研热点|2022诺贝尔奖各领域奖项已揭晓(附获奖者详细信息)~
  17. 仿新版QQ底部导航栏动态拖动按钮
  18. Windows+CPU only+VS2013安装caffe以及配置Python接口
  19. 非局域网如何使用ssh远程访问Linux主机
  20. 大数据分析案例-基于多元线性回归算法构建用户信用评分模型

热门文章

  1. 6425C-Lab2 安全高效地管理AD
  2. 闲话能力管理(Capacity Management)
  3. x-mixed-replace - 转自博客园cnblog - Scowl Knight
  4. [探讨]一次性工具软件
  5. linux c 实现函数 trim 除去字符串首尾空格
  6. golang 发送get和post示例
  7. ERROR: glib-2.22 gthread-2.0 is required to compile QEMU
  8. 定义__asm块作为C宏
  9. MFC中定义全局变量和全局函数的方法
  10. 什么是ATL? (与COM的关系,及MFC与COM的关系)