(二十)linux中i2c的ioctl,write,read函数的使用
一、ioctl函数的使用:
原型:struct ioctl(struct file *file,unsigned int cmd,unsigned long arg);
cmd有I2C_SLAVE,I2C_SLAVE_FORCE,I2C_TENBIT,I2C_S3C2410_SET_SPEED几个选项;
I2C_SLAVE:对应的arg取值为I2C从机地址,用来设定I2C从机地址;
I2C_SLAVE_FORCE:对应的arg取值为I2C从机地址,用来修改I2C从机地址;
I2C_TENBIT:对应的arg取值为0:从机地址为7 bit;对应的arg取值为1:从机地址为10bit。用来指定I2C从机地址的位数;
I2C_S3C2410_SET_SPEED:对应的arg取值为I2C总线控制器分频值。用来设置I2C总线控制器时钟频率;
常用设置设置I2c从机地址为0xA0,如果选用at24c08设备,那么从机是7 bit地址,所以要右移1位,指定从机地址为7 bit,
ioctl(fd,I2C_TENBIT,0)。
ioctl(fd,I2C_SLAVE,0xA0>>1);
read()与write()函数的使用
假设子地址为12,向有子地址的器件写进7个字节:
unsigned char buf[8]={12,'s','j','s','u','n','n','y');write(fd,buf,9);/*写进7个字节,第1个字节为子地址*/
从有子地址的I2C器件读取7个字节:
unsigned char suba=0;recbuf[20];
write(fd,buf,1);/*发送子地址0*/
read(fd,recbuf,7);/*从子地址12开始读取7个字节*/
二、ioctl同read和write的区别:
ioctl被誉为Unix系统的"瑞士军刀",他被当作扩充Linux系统功
能一个通用的方法,在Linux系统中被广泛使用。
ioctl一般用来用户空间程序和驱动程序模块之间传递控制数
据,ioctl同read和write的区别是:
1、ioctl一般是用来传递控制参数的,比如:串口的波特率、串口的流控方法(xon/xoff、DTR/DSR、RTS/CTS)等等,一般不
用来传递“主要的”数据(我不到合适的词来说明:)。
2、ioctl的语义一般是非阻塞的,read和write却省是阻塞的。
3、ioctl的接口是万能的,ioctl(fd, cmd, arg)第三个参数可以是一个整形变量,也可以是一个指向某种数据结构的指针。
最新文章
- [LeetCode] Best Meeting Point 最佳开会地点
- linux 汇编
- 后端码农谈前端(CSS篇)第五课:CSS样式
- 【Beta阶段】团队源代码管理
- 使用“原生”HTML DOM获取input的输入值并显示
- 【转】区别和认识.Net四个判等函数
- 【转】linux之fsck命令
- CRC校验码
- 文成小盆友python-num12 Redis发布与订阅补充,python操作rabbitMQ
- 镜像树(dfs)
- SpringMVC批量上传
- STM32软件复位(基于库文件V3.5)
- Ubuntu14.04安装samba
- Linux安装python3.5
- Android的几种Manager
- Javascript 小练习
- 微服务 Micro services
- Python的类的组合
- Make the DbContext Ambient with UnitOfWorkScope(now named DbContextScope by mehdime)
- VC/MFC分割字符串(SplitString)返回CStringArray
热门文章
- zeppelin的数据集的优化
- SyntaxError: Non-ASCII character '\xe4' in file test.py on line 3, but no encoding declared。
- Android面试收集录16 Android动画总结
- PHP.32-TP框架商城应用实例-后台8-商品相册-添加
- java练习——多态与异常处理
- Asp.net Core发布到CentOS7
- python - web自动化测试 - 元素操作 - 鼠标键盘
- js 全局变量和局部变量
- java单例模式(类只能创建唯一对象)
- 上手Caffe(一)