Linux驱动学习——I2C

I2C概念相关:
1.串行传输:一个时钟周期传输一个bit位,通过一根数据线完成
2.主端,主设备,master:一般就是常说的CPU
3.从端,从设备,slave:一般就是说的I2C设备
4.I2C总线:两线式串行总线,CPU跟外设之间的连接通过2根线进行,数据交互通过1根数据线完成。                  
                     在这两个线上可以挂接很多I2C设备。这两个线会接上拉电阻,默认的电平状态是高电平。
5.SDA:数据线,CPU和外设之间的数据传输,如果CPU向外设写入数据,SDA由CPU控制,如果CPU从外设读取数据,SDA由外设来控制。
6.SCL:时钟线,时钟信号由CPU发起,由CPU控制。

在I2C总线协议中

START信号:起始信号,CPU要访问从设备,必须首先由CPU发送一个START信号, SCL为高电平,SDA由高向低跳变,产生START信号
STOP信号:结束信号,如果CPU结束对从设备的访问,有CPU发送一个STOP信号, SCL为高电平,SDA由低向高电平跳变,产生一个STOP信号
ACK信号:应答信号,这个信号用于标识外设是否存在于总线上和CPU与外设之间的一个数据交互的结果。低电平有效!
设备地址:用于标识设备在总线上的唯一性。如果CPU要想访问某一个从设备,CPU必须发送这个从设备的地址。设备地址由芯片厂家和硬件原理图一块来决定。
以EEPROM,AT24C02为例:
设备地址:
1010A2A1A0R/W=>A2,A1,A0原理图接地
读设备地址:10100001 = 0xA1
写设备地址:10100000 = 0xA0
=》设备地址不算读写位,去除读写位,然后右移1位,高位补0=》AT24C02的设备地址=01010000=0x50

以I2C接口的LM77温度传感器为例:
10010A1A0:如果A1,A0都接地=》
LM77的设备地址=1001000=0x48
读设备地址:0x48<<1|1
写设备地址:0x48<<1|0

以I2C接口的背光灯芯片ADP8860为例:
ADP8860的设备地址:0101010x(x=1:read,x=0:write)
读设备地址:0x55;
写设备地址:0x54
最终的设备地址=0x2A

CPU和I2C从设备之间的数据交互过程: 必须参看从设备的芯片手册,参看其中的I2C时序操作!
1.CPU都会首先发送一个START信号
2.CPU会发送设备地址,包括读写位(到底是读设备还是写设备)
3.设备给CPU发送一个应答信号,前提是设备确实存在于总线上。如果不存在于总线上,从设备不会给CPU发。
4.根据读写进行数据的交互
5.CPU再发S
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux驱动开发中的I2C(Inter-Integrated Circuit)是一种串行通信协议,用于连接微控制器、传感器、存储器等外设。下面是关于Linux驱动开发中的I2C的一些重要概念和步骤: 1. I2C总线:I2C总线是一种多主从设备的串行通信总线,可以同时连接多个设备。在Linux中,I2C总线由I2C控制器和I2C适配器组成。 2. I2C控制器:I2C控制器是硬件模块,负责控制I2C总线的通信。在Linux中,每个I2C控制器都有一个对应的驱动程序。 3. I2C适配器:I2C适配器是与I2C总线连接的硬件接口,可以是主机上的硬件接口或者通过GPIO模拟的软件接口。在Linux中,每个I2C适配器都有一个对应的驱动程序。 4. I2C设备驱动:每个连接到I2C总线上的设备都需要一个对应的设备驱动程序来进行控制和通信。在Linux中,每个I2C设备都有一个对应的驱动程序。 在Linux驱动开发中,使用I2C的步骤如下: 1. 注册I2C适配器:首先需要在Linux内核中注册I2C适配器,以便系统能够识别和管理I2C总线上的设备。 2. 创建I2C设备驱动:为每个连接到I2C总线上的设备编写对应的设备驱动程序,包括设备的初始化、读写操作等。 3. 注册I2C设备驱动:将设备驱动程序注册到Linux内核中,以便系统能够正确地加载和使用该驱动程序。 4. 使用I2C设备:在应用程序中通过打开设备文件、调用相应的读写接口来使用I2C设备。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值