linux驱动开发:IIC协议的了解

IIC协议介绍:
作为一种应用很广的串行总线协议,这个是需要我们很认真去了解的。绝大多数的驱动开发中均少不了IIC驱动.
我手上的板子有一个eeprom和touch screen都是IIC接口。现在我们先来研究IIC协议以及ac24cxx的spec研读.
为下一章的驱动编写做准备.

这里我们拿24cxx的datasheet来说明.

IIC协议:由一个SDA信号和一个SCL信号组成.主控mcu作为主设备,其他外围器件作为从设备.所有操作的开始均是由主设备发起。
IIC有start,stop,ACK信号.

这里写图片描述
数据传输时:在每一个scl为高 level时,要求对应的sda 数据稳定不变,当scl的level为低时,允许sda的电平进行变化.

这里写图片描述
正因为这种特性,通常我们这样讲:IIC的数据传输,波形上直观的表现为:data数据一定要包住clk.

start:SCL为高电平时,SDA产生一个下降沿
stop:当SCL处于高电平时,SDA产生一个上升沿
ACK:SCL为高电平时,SDA为低电平


24c02/24c04/24c08 spec研读:

首先:IIC设备均会有一个 dev 的addr.支持IIC的多个设备可以挂在同一条总线上,操作时以设备地址来区分.

这里写图片描述

这里写图片描述

这里写图片描述

24cxx device addr 的确定
24c02: 与A2,A1,A0的硬件连接相关
24c04 : 与A2,A1的硬件连接相关,A0未连接
24c08 : 与A2的硬件连接相关,A1,A0未连接
size:
24c02: 256 个字节, 寻址需要 8bit
24c04: 512 个字节,寻址需要 9bit
24c08: 1024个字节,寻址需要 10bit

通常,向一个地址写一个数据,需要先写dev 的地址,8bit,再写入数据存放位置的地址,此时24c02一个字节可以表示完全它本身的地址,但是24c04和24c08却不行,需要两个字节,再传数据

24cxx 写入方式:
1.字节写入,一次传送一个字节,写完结束!
2.连续写: 24c02一次可以连续写8个字节,24c04/24c08一次可以连续写16个字节
每写入一个字节,地址会自动+1,24c02的地址第三位会自动+,24c04/24c08的低四位会自动+。溢出后自动变0,恢复到起始写地址.

这里写图片描述

24cxx的读方式:
1.当前读:ic里面有一个conter会记录上次操作的地址,当再次进行不指定地址的读操作,直接返回记录地址上的数据
2.随机读:指定任意的地址,再发送读命令,返回对应地址的数据
3.顺序读:发生在当前读或者随机读方式下,一次读多个字节出来

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值