一、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)第三个参数可以是一个整形变量,也可以是一个指向某种数据结构的指针。

最新文章

  1. [LeetCode] Best Meeting Point 最佳开会地点
  2. linux 汇编
  3. 后端码农谈前端(CSS篇)第五课:CSS样式
  4. 【Beta阶段】团队源代码管理
  5. 使用“原生”HTML DOM获取input的输入值并显示
  6. 【转】区别和认识.Net四个判等函数
  7. 【转】linux之fsck命令
  8. CRC校验码
  9. 文成小盆友python-num12 Redis发布与订阅补充,python操作rabbitMQ
  10. 镜像树(dfs)
  11. SpringMVC批量上传
  12. STM32软件复位(基于库文件V3.5)
  13. Ubuntu14.04安装samba
  14. Linux安装python3.5
  15. Android的几种Manager
  16. Javascript 小练习
  17. 微服务 Micro services
  18. Python的类的组合
  19. Make the DbContext Ambient with UnitOfWorkScope(now named DbContextScope by mehdime)
  20. VC/MFC分割字符串(SplitString)返回CStringArray

热门文章

  1. zeppelin的数据集的优化
  2. SyntaxError: Non-ASCII character '\xe4' in file test.py on line 3, but no encoding declared。
  3. Android面试收集录16 Android动画总结
  4. PHP.32-TP框架商城应用实例-后台8-商品相册-添加
  5. java练习——多态与异常处理
  6. Asp.net Core发布到CentOS7
  7. python - web自动化测试 - 元素操作 - 鼠标键盘
  8. js 全局变量和局部变量
  9. java单例模式(类只能创建唯一对象)
  10. 上手Caffe(一)