linux i2c ioctl错误,关于读写I2C总线的时候出错的有关问题
关于读写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总线的时候出错的有关问题相关推荐
- 总结:linux驱动之I2C至少四种读写方法
总结在linux环境下四种读写I2C设备的方法: 一:读写/dev/i2c-x设备结点 /dev/i2c-x设备结点对应的驱动文件为内核目录drivers/i2c下自带的i2c-dev.c文件,通读此 ...
- i2c驱动架构 davinc dm368 i2c驱动分析
预备知识 在阅读本文最好先熟悉一种i2c设备的驱动程序,并且浏览一下i2c-core.c以及芯片提供商的提供的i2c总线驱动(i2c-davinci.c).标题党请见谅! 其实i2c接口非常的简单,即 ...
- linux下的iic驱动程序,实战经验吐血推荐:怎样在Linux环境下轻松实现基于I2C总线的EEPROM驱动程序...
4开发实例本文引用地址:http://www.eepw.com.cn/article/279351.htm Linux内核已经提供了I2C驱动中所需要的基本模块.i2c-core.i2c-dev和i2 ...
- Linux读写I2C设备I2C_RDWR用法
i2c注册设备知识点:kernel/msm-4.9/drivers/i2c/i2c-dev.c为每个i2c设备创建设节点,所以我们不用创建./dev/i2c-0是在注册i2c-dev.c后产生的,代表 ...
- platform框架--Linux MISC杂项框架--Linux INPUT子系统框架--串行集成电路总线I2C设备驱动框架--串行外设接口SPI 设备驱动框架---通用异步收发器UART驱动框架
platform框架 input. pinctrl. gpio 子系统都是 Linux 内核针对某一类设备而创建的框架, input子系统是管理输入的子系统 pinctrl 子系统重点是设置 PIN( ...
- Linux驱动入门学习(三):I2C架构全面理解
I2C 概述 I2C是philips提出的外设总线. I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL ,使用SCL,SDA这两根信号线就实现了设备之间的数据交互,它方便了工程师的布线. ...
- 【嵌入式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 ...
- Linux设备驱动程序架构分析之I2C架构(基于3.10.1内核)
作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 内核版本:3.10.1 I2C体系架构的硬件实体包括两部分: 硬件I2C Adapter:硬件I2C Adapter ...
- linux下I2C驱动发送IO时序,I2C驱动情景分析——怎样控制I2C时序
内核版本:linux-3.4.2 源程序: linux-3.4.2\drivers\i2c\busses\I2c-s3c2410.c 这次要解决的问题是:如何配置soc的I2C模块,输出想要的时 ...
最新文章
- 分布式图数据库在贝壳的应用实践
- BeanPostProcessor —— 连接Spring IOC和AOP的桥梁
- Spring Cloud学习笔记-010
- tableau可视化数据分析60讲(十二)-过滤器详解
- ARM MOV指令对立即数的要求
- Greenplum 权限管理与客户端认证
- vue中设置子组件的点击事件不影响父组件的点击事件
- sprintf()、fprintf()的使用方法
- 超好用Web草图工具Balsamiq Mockups
- ubuntu12.10安装android编译环境
- 敏捷开发一千零一夜读书笔记之敏捷初探
- 相辅相成的知识图谱与预训练语言模型
- 高等数学(第七版)同济大学 习题7-8 个人解答
- linux的tar命令详情;linux多个文件压缩打包到一个压缩文件
- html仿b站页面代码,B站首页界面设计:附详细教程
- 科研热点|2022诺贝尔奖各领域奖项已揭晓(附获奖者详细信息)~
- 仿新版QQ底部导航栏动态拖动按钮
- Windows+CPU only+VS2013安装caffe以及配置Python接口
- 非局域网如何使用ssh远程访问Linux主机
- 大数据分析案例-基于多元线性回归算法构建用户信用评分模型
热门文章
- 6425C-Lab2 安全高效地管理AD
- 闲话能力管理(Capacity Management)
- x-mixed-replace - 转自博客园cnblog - Scowl Knight
- [探讨]一次性工具软件
- linux c 实现函数 trim 除去字符串首尾空格
- golang 发送get和post示例
- ERROR: glib-2.22 gthread-2.0 is required to compile QEMU
- 定义__asm块作为C宏
- MFC中定义全局变量和全局函数的方法
- 什么是ATL? (与COM的关系,及MFC与COM的关系)