博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IIC原理及简单流程
阅读量:5067 次
发布时间:2019-06-12

本文共 1184 字,大约阅读时间需要 3 分钟。

IIC 即 inter-integrated-circuit,又称 I2C 一种总线结构,具体接受请度娘。

I2C串行总线一般有两根信号线,一根是双向的数据线SDA,另一根是时钟线SCL。所有接到I2C总线设备上的串行数据SDA都接到总线的SDA上,各设备的时钟线SCL接到总线的SCL上。

以下为mini2440的IIC设备:AT24C08

 

IIC遵从 主/从结构,通信由主机发起,并且由主机结束。

开始信号(s):当时钟信号处于高电平,向数据信号线发送下降沿。

结束信号(p):当时钟信号处于高电平,向数据信号线发送上升沿。

 

由于IIC总线上可能连有多个设备,因此我们应该在开始信号后进行设备选择,也就是发送地址信号,当设备收到符合自己地址的信号后会返回响应。

一般地址位宽为7位,而发送的数据位为8位,除了7位地址,剩下的一位为读写位。

 

如果为写,则在设备返回ack信号后,接着主机发送8位数据,当设备收到数据后,设备返回ack信号。

如果为读,则在设备返回ack信号后,接着设备返回8位数据,当主机接收到信号后,接下来的ack信号就由主机发送。

Data Transferred段周而复始,直到数据传输完成。

 

而在主机发送(R)或者接受(W)到ack信号后,会产生中断,我们可以在中断处理程序中对数据进行进一步处理,或者在中断处理程序内继续发送/接收数据。

 

当传输完成后,

       如果主机作为数据发送方,可以发送停止信号,终止IIC传输过程。

       如果主机作为数据接收方,可以不发送响应信号ack,终止传输过程。

 

寄存器配置:

根据芯片手册,IICCON用于初始化,其余用于数据传输的相关操作。

IICCON:  IIC控制寄存器

IICDS:  IIC数据移位寄存器

IICSTAT:  IIC状态寄存器

IICADD:   IIC地址寄存器

流程如下

主机发送流程:

 

主机接收流程:

 

设备发送流程:

 

设备接收流程:

 

另外,对于AT24C08,值得注意的是,该设备是先进行地址选择(非IIC设备的地址选择,而是AT24C08内部的地址选择),然后进行数据读写。

因此,AT24C08来说,当该设备被选择后(IIC地址匹配),然后对收到的第一个数据进行片内地址选择(写地址),然后:

 

如果需要写数据,因为同为写模式,所以可以直接进行

 

如果需要读数据,因为要转换为读模式,所以需要重新发送开始信号,在当前地址读数据

 

 

AT24C08是10位地址,所以8位的word address根本不够进行地址选择,因此以device address的最后两位,加上word address 的8位,一共10位数据进行地址选择。

转载于:https://www.cnblogs.com/TaigaCon/archive/2012/11/22/2782584.html

你可能感兴趣的文章
NYOJ-613//HDU-1176-免费馅饼,数字三角形的兄弟~~
查看>>
graphite custom functions
查看>>
一个自己写的判断2个相同对象的属性值差异的工具类
查看>>
oracle连接的三个配置文件(转)
查看>>
Python内置函数(29)——help
查看>>
oracle导出/导入 expdp/impdp
查看>>
Objective - C基础: 第四天 - 10.SEL类型的基本认识
查看>>
Android TextView加上阴影效果
查看>>
《梦断代码》读书笔记(三)
查看>>
Java8 Lambda表达应用 -- 单线程游戏server+异步数据库操作
查看>>
[Unity3D]Unity3D游戏开发MatchTarget的作用攀登效果实现
查看>>
AngularJS学习篇(一)
查看>>
关于Xshell无法连接centos6.4的问题
查看>>
css3动画——基本准则
查看>>
输入月份和日期,得出是今年第几天
查看>>
pig自定义UDF
查看>>
spring security 11种过滤器介绍
查看>>
代码实现导航栏分割线
查看>>
大数据学习系列(8)-- WordCount+Block+Split+Shuffle+Map+Reduce技术详解
查看>>
【AS3代码】播放FLV视频流的三步骤!
查看>>