分类: LINUX
2015-12-11 11:07:23
原文地址:IIC 总线控制器工作原理 作者:bluefishing
S3C4510B 片内的 IIC 总线控制器具有如下重要特性:
- 仅需要两根传输线。一根为串行数据线(Serial Data Line,SDA),另一根为串行时钟 线(Serial Clock Line,SCL)。当 IIC 总线处于空闲状态时,两根传输线均为高电平。
- 连接到总线上的每一个设备都可以通过一个主控器使用唯一的地址进行软件寻址。总线主 控器既可以是一个主发送器,也可以是一个主接收器。但 S3C4510B 的 IIC 总线控制器仅支持单主 控器模式。
- 支持 8 位、双向,串行数据传输。
- 连接到 IIC 总线的器件数目仅受到最大总线电容(400PF)的限制。 图 6.2.6 为 S3C4510B IIC 总线控制器的功能模块。
图6.2.6 S3C4510B
IIC总线控制器的功能模块图
功能描述(Functional Description)
S3C4510B 的 IIC 总线控制器为一个串行 IIC 总线主控器。可通过设置预分频寄存器
(Prescaler Register,IICPSR)对串行时钟频率进行编程。串行时钟频率可由下式计算: MCLK/(16×(预分频寄存器的值+1)+3) 可通过对控制状态寄存器(IICCON)的位[5:4]写入“01”发送启动码初始化串行 IIC 总线,
然后总线控制器发送 7 位的从设备地址并通过移位缓冲寄存器发送读/写控制位,接收器则在主控 器的 SCL 脉冲期间通过将 SDA 线从高电平下拉到低电平作为应答信号。
写数据的操作:先设置控制状态寄存器的 BF 位,然后写入数据到移位缓冲寄存器。移位缓冲 寄存器无论是被读还是写,BF 位均会自动清零。若要进行连续的读/写操作,必须设置控制状态寄 存器的 ACK 位。
读数据的操作:在设置控制状态寄存器的 BF 位以后,可以进行读数据的操作,当读/写完最后 一个字节时,可对 ACK 位进行复位通知发送器/接收器读数据操作的结束。
在读/写操作完成以后,可通过设置 IICCON[5:4]=“10”生成结束码。
IIC 总线概念(IIC-BUS Concepts)
基本操作(Basic Operation):IIC总线通过两根传输线,一根串行数据线 SDL,一根串行时 钟线 SCL,在连接到总线上的 IC 器件之间传递信息,每一个 IC 器件通过唯一的地址进行识别,根 据其特性,可作为发送器或接收器工作。
IIC 总线是一种多主控器总线,有多个 IC 器件具有控制总线的能力。 IIC 总线的数据传输过程描述如下:
第一种情况,一个主 IC 器件要传送数据到其他的从 IC 器件,可分为如下三个步骤:
1、主 IC 器件寻址从 IC 器件。
2、主 IC 器件发送数据到从 IC 器件(此时,主器件为发送器,从器件为接收器)。
3、主 IC 器件终止数据的传输。
第二种情况,一个主 IC 器件要从其他的从 IC 器件获取数据,可分为如下三个步骤:
1、主 IC 器件寻址从 IC 器件。
2、主 IC 器件从从 IC 器件接收数据(此时,主器件为接收器,从器件为发送器)。
3、主 IC 器件终止数据的传输。
即使是在第二种情况,也由主 IC 器件产生时序信号并终止数据的传输。
通
用特性(GeneralCharacteristics):SDL 和SCL 均为双向传输线,各通过一个上拉电阻连 接到电源正端,当 IIC
总线空闲时,SDL 和 SCL 传输线均为高电平,连接在总线上的 IIC 接口在输
出阶段通过漏极开路(Open-drain)或集电极开路(Open-collector)的方式完成线与(Wired-AND) 功能。IIC
总线的数据传输速率最高可达到 100Kb/S。可连接到总线上的 IC 器件数目仅受到总线电 容的限制(400PF)。
位传输(BitTransfers):由于连接到 IIC 总线上的器件各不相同(如有 CMOS 器件,NMOS 器 件,TTL 器件等),逻辑 0 或逻辑 1 的电平会根据电源电压的高低发生变化,因此,每传输一个位 就产生一个时钟脉冲。
数据有效性(Data Validity):在时钟信号的高电平期间,SDA 传输线上的电平必须稳定,只 有在 SCL 传输线上的时钟信号为低电平时,数据线上的高低电平才允许发生变化。
开始与停止条件(Start and Stop Conditions):开始和停止条件总是由主器件产生。在开 始条件产生后,总线被认为处于忙状态,在完成数据传输产生停止条件后,总线被认为处于空闲状 态。
- 开始条件:当 SCL 为高电平时,SDA 产生由高电平到低电平的跳变。
- 停止条件:当 SCL 为高电平时,SDA 产生由低电平到高电平的跳变。 图 6.2.7 为开始与停止条件:
图6.2.7 开始与停止条件
数据传输操作(Data Transfer Operations)
数据字节格式(Data Byte Format):每一个写到 SDA 传输线上的数据字节必须为 8 位的长 度,每一次传输的字节数没有限制,每传输一个字节必须跟一个应答位 ACK(如图 6.2.7),传输 字节时最高位在前(MSB-first)。
如果接收器因为执行其他功能(如中断服务)而不能接收其他剩余的数据字节时,接收器就保
持时钟线 SCL 为低电平强制发送器进入等待状态,只有当接收器准备接收其他字节并释放 SCL 传 输线时,数据传输才会继续进行。
应答过程(Acknowledge Procedure):在数据的传输过程中必须带有应答信号,与应答信号
相关的时钟脉冲必须由总线主控器产生。在应答时钟脉冲期间,发送器释放 SDA 传输线(为高电 平),但此时接收器必须下拉 SDA 传输线,以便在时钟脉冲的高电平期间 SDA 能够保持稳定的低 电平。
通常,被寻址的接收器在接收到每一个字节后必须产生一个应答信号,当从接收器不能产生应 答信号时,必须释放数据线,然后由主控器产生停止条件中止数据传输。
数据传输格式(Data Transfer Format):图 6.2.8 显示传输数据的格式。当产生开始条件后, 首先发送 7 位的从器件地址,第八位为数据方向位(R/W),“0”表示发送数据(写),“1”表 示请求数据(读)。
的格式
图6.2.8 数据传输
数据传输一般总是在主控器产生停止条件后中止。但当主控器还要利用总线进行通讯时,主控 器可以在不产生前一个停止条件的情况下,再产生开始条件并寻址另一个从器件,该特性可用于支 持不同数据传输读/写格式的联合使用。
IIC 总线寻址(IIC-Bus Addressing):IIC 总线的寻址过程为在开始条件后发送的第一个字 节,该字节地址决定主控器选择哪一个从器件。通常,第一个字节总是紧跟在开始过程之后。
还可以通过“广播”寻址方式同时寻址所有的 IC 器件,当使用广播寻址时,理论上所有的 IC
器件都应该返回应答信号,但器件也可以忽略这个这个地址。广播寻址的第二个字节决定其后的操
作。
第
一个数据字节的位定义(Definition of Bits in the First Data Byte 第一个数据字节的前 7
位为从器件地址,第 8 位为方向位,决定数据的传输方向(读/写)。 当地址字节发出以后,总线上的每一个 IC
器件将该地址与自己的地址进行比较,若地址匹配,
则这个 IC 器件就认为自身被主控器寻址为一个从发送器或从接收器。
广播寻址(General Call Address):广播寻址方式可用于寻址连接在 IIC 总线上的每一个 IC
器件,但当某个 IC 器件不需要进行数据传输时,将忽略广播寻址而不作任何应答。 如果某个 IC 器件需要获取数据,将发出应答信号并作为一个从接收器。
开始字节(Start Byte):在每一次的数据传输之前都有一个开始过程,描述如下:
- 一个开始条件,S
- 一个开始字节,“00000001”
- 一个应答时钟脉冲
- 一个重复开始条件,Sr
当需要访问总线的主控器在发送完开始条件 S 后,接着发送开始字节(“00000001”),总线 上其余的 IC 器件以较低的采样率对 SDA 传输线进行采样,一直到检测到开始字节中七个零中的某
一个。当检测到 SDA 传输线上的低电平时,IC 器件就切换到较高的采样率检测重复开始条件 Sr 用 于同步,接收器在检测到重复开始条件 Sr 后复位,忽略该开始字节。
在开始字节发送完毕之后产生一个应答时钟脉冲。
IIC 总线特殊功能寄存器(IIC Bus Special Registers)
IIC 总线控制器由三个特殊功能寄存器:一个控制状态寄存器(IICON),一个预分频寄存器
(IICPS)和一个移位缓冲寄存器(IICBUF)。
控制状态寄存器(Control Status Register,IICON):
寄存器 | 偏移地址 | 操作 | 功能描述 | 复位值 |
IICCON | 0xF000 | 读/写 | 控制状态寄存器 | 0x0000,0000 |
IIC 总线的控制状态寄存器描述如表 6-2-10。
表6-2-10 IICCON 寄存器描述
位 | 位名 | 功能描述 |
[0] | 缓冲标志(BF) | 在发送模式下缓冲区空时,或在接收模式下缓冲区满时, BF 置位。 通过对该位写“0”可以清除缓冲区。 IICBUF 寄存器无论是被读还是写,BF 位都自动清零。 如果将该位置为“1”,IIC 总线停止工作,要激活IIC 总 线,应将该位清零。 |
[1] | 中断使能(IEN) | 该位置“1”,使能IIC 总线中断 |
[2] | 最后接收位(LRB) | LRB 位为只读。该位保持IIC 总线上最后接收到的位。通 常该位为从器件的应答信号。要检测从器件的应答信号, 可以测试LRB 位。 |
[3] | 应答使能(ACK) | ACK 位通常置为“1”,以便IIC 总线控制器在每一个字 节后自动发送一个应答信号。 当IIC 总线控制器工作在接收器模式,且不需要从从发送 器接收数据时,该位必须清零。 |
[5:4] | COND1,COND0 | 该两位控制开始条件、停止条件和重复开始条件的生成: “00”= 无影响 “01”= 开始 “10”= 停止 “11”= 重复开始 |
[6] | 总线忙(BUSY) | 该位为只读,用以指示IIC 总线是否被使用。为“1”表 示总线忙。该位由开始条件和停止条件置位或清零。 | |
[7] | Reset | 如果向该位写“1”,IIC 总线控制器复位为初始化状态。 | |
[31:8] | 保留 | 无 |
[0]缓冲标志(BF)
0 = 当 IICBUF 寄存器被读或写时,该位自动清零。可通过写“0”手动清除 BF。
1 = 在发送模式下缓冲区空时,或在接收模式下缓冲区满时,BF 自动置位。
[1]中断使能(IEN)
0 = 禁止
1 = 使能;BF 位为“1”时产生中断。 [2] 最后接收位(LRB) 使用该只读状态位可以检测接收器(从器件)的应答信号,或当写“11”到 IICCON[5:4]重复
开始时监控 SDA 操作。
0 = 最近 SDA 为低电平(接收到 ACK)。
1 = 最近 SDA 为高电平(未接收到 ACK)。 [3]应答使能(ACK) 在接收模式下控制产生 ACK 信号。
0 = 在第 9 个 SCL 脉冲时不产生 ACK 信号。
1 = 在第 9 个 SCL 脉冲时产生 ACK 信号。。 [5:4]COND1 和 COND0 用于总线控制信号的生成,如开始或停止信号。
00 = 无影响。
01 = 产生开始条件。
10 = 产生停止条件。
11 = SCL 被释放为高电平产生重复开始条件。
[6]总线忙(BUSY)
0 = 总线当前未被使用(空闲)。
1 = 总线正被使用(忙)。
[7]Reset
0 = 正常工作状态。
1 = 复位 IIC 总线控制器。
[31:8]系统保留
移位缓冲寄存器(Shift Buffer Register,IICBUF):
寄存器 | 偏移地址 | 操作 | 功能描述 | 复位值 |
IICBUF | 0xF004 | 读/写 | 移位缓冲寄存器 | 未定义 |
IIC 总线的移位缓冲寄存器描述如表 6-2-11。
表6-2-11 IICBUF 寄存器描述
位 | 位名 | 功能描述 |
[7:0] | 数据 | 该数据区域用作串行移位寄存器和IIC 总线的读缓冲接 口。所有对总线的读/写操作均要通过该寄存器。IICBUF 寄存器由移位寄存器和数据缓冲两部分构成。 发送数据时,8 位的并行数据首先写入移位寄存器。 |
接收数据时,从数据缓冲区读取。 | |||
[31:8] | 保留 | 无 |
预分频寄存器(Prescaler Register,IICPS):
寄存器 | 偏移地址 | 操作 | 功能描述 | 复位值 |
IICPS | 0xF008 | 读/写 | 预分频寄存器 | 0x0000,0000 |
IIC 总线的预分频寄存器描述如表 6-2-12。
表6-2-12 IICPS 寄存器描述
位 | 位名 | 功能描述 |
[15:0] | 预分频值 | 该预分频值用于产生IIC 总线的串行时钟。系统时钟除以 (16×(预分频值+1)+3)作为IIC 总线的串行时钟。 若预分频值为0,则将系统时钟除以19 作为IIC 总线的串 行时钟。 |
[31:16] | 保留 | 无 |
关于 IIC 总线控制器工作原理和使用方法的更详细内容,可参考 S3C4510B 用户手册。