文章目录
-
-
- 001I2C协议
-
- 1.1相关介绍
- 1.2硬件原理SCH
- 1.3数据传输格式
- 1.4信号传输时序图
-
- 1.5信号解析
- 1.6如何在SDA上实现双线传输
-
- 002 S3C2440的IIC控制器
-
- 2.1主从关系
- 2.2IIC控制器流程框图
- 2.3IIC读写操作步骤
- 003 程序框架
- 004 编程流程
001I2C协议
1.1相关介绍
- I2C Bus——Inter-Integrated Circuit 即集成电路总线。
- I2C总线端口为漏开结构,因此一般需要**加上拉电阻**Rp,通常选用5K~10KΩ
- I2C总线以字节为单位收发数据,一个字节为一帧,数据传输的次序为从**最高位到最低位**
- I2C由**数据线(SDA)** 与 时钟线(SCL) 组成
- SDA:Synchronous Data Adapter (同步数据衔接器)
- SCL:Serial Communication Loop(串行通讯环路
1.2硬件原理SCH
【主从结构:一主[Master]多从[Slave]】

1.3数据传输格式

-
主机写数据:

-
主机读数据:

1.4信号传输时序图
- S3C2440的i2c时序图

- SCL上拉电阻的作用:在第9个时钟之后,双方中若有一方处理还未完成,它可以**一直把SCL拉低,当SCL一直为低电平时,双方都不应该操作SDA总线**。
1.4.1读写流程
- 1.前8个clk(7bit地址 + 1bit读/写)
- 从设备不影响总线,从设备不去动三极管
- 主设备决定数据
- 2.第9个CLK,由从设备决定数据
1.5信号解析
- 起始信号[Start]:在SCL保持高电平时,SDA下降沿。
- 读写位:【0写1读】
- 数据位:SCL低电平时,SDA可变化;SCL高电平,SDA不变
- 终止信号:在SCL高电平时,SDA上升沿。
- 回应信号[ACK]:SDA低电平,低电平

1.6如何在SDA上实现双线传输
- 1.主设备发送时,从设备不发送:可以通过SCL区分控制
- 2.主设备发送时,从设备的”发送“引脚不影响数据:使用开极电路。
1.6.1开极电路

A |
B |
SDA |
0 |
0 |
1(由上拉电阻决定) |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
- SDA上拉电阻的作用:当A、B都低电平时,三极管都不导通时,SDA取决于外界电路,当什么都不接时,SDA悬空,无法获取电平,故接上拉电阻。
开极电路驱动思想
- 当某个设备不想影响SDA总线时,就不驱动三极管。
- 想输出高电平,都不驱动三极管。
- 想输出低电平,就驱动三极管。
002 S3C2440的IIC控制器
一般主控芯片都有IIC控制器,没有IIC控制器的可以用管脚模拟
2.1主从关系
|
Master |
Slave |
写 |
Transmitter |
Receiver |
读 |
Receiver |
Transmitter |
2.2IIC控制器流程框图

2.3IIC读写操作步骤

在发送模式下,当数据已经发送出去后,IIC会等待IICDS寄存器接收新的数据
- 1.IICDS = val;
- 2.发完数据,产生中断,拉低SCL
- 3.中断程序里,判断状态,IICDS = val2,IIC继续工作
在接收模式下,IIC接口会等待直到你把IICDS中的数据读走,在此期间,SCL拉低
- 1.发起传输,接收DATA
- 2.接收到数据之后,产生中断,SCL拉低
- 3.中断程序中,判断,设置中断,val = IICDS,IIC继续工作,继续接收收据
003 程序框架



004 编程流程

如果对你有帮助的话不妨点个赞鸭~