I2C总线接口

更新时间:2023-10-30 13:33:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

I2C总线接口

S3C44B0X I2C总线概述

I2C是一种双向两线制的串行数据传输标准总线。S3C44B0X RISC微处理器支持多主I2C串行接口。专用串行数据线SDA和串行时钟线SCL在总线控制器和外围设备之间传送信息,它们都连在I2C总线上。SDA和SCL线都是双向的。

在多主I2C模式下,多个S3C44B0X RISC微处理器可以从设备接收数据或传送数据到设备。启动数据传送给I2C总线的主设备也负责终止数据的传送。S3C44B0X中的I2C总线使用了标准的优先级仲裁过程。

为了控制多主I2C操作,必须为以下寄存器赋值:多主I2C控制寄存器(IICCON)、多22主IC控制/状态寄存器(IICSTAT)、多主IC Tx/Rx数据移位寄存器(IICDS)和多主I2C地址寄存器(IICADD)。

当I2C空闲时,SDA和SCL线都处于高电平。SDA由高电平到低电平的转变能够产生启动条件;当SCL在高电平保持稳定时,SDA由低电平到高电平的转变能够产生停止条件。

启动和停止条件一般由主设备产生。启动条件产生后,被放到总线上的第一个数据字节的7位地址值能够决定总线主设备所选择的从设备,第8位决定了传送的方向(读或写)。

放到SDA线上的每一个数据字节都是8位。在总线传送操作中被发送或接收的字节数是无限的,数据总是从最高位MSB开始发送,并且每个数据之后应紧跟着一个应答位ACK。

图7.35所示为I2C总线框图。

地址寄存器 比较器 I2C总线控制逻辑 SCL MCLK IICCON IICSTAT 4位预分频器 移位寄存器 SDA 移位寄存器 (IICDS) 数据线

图7.35 I2C总线框图

需要注意下面几点:

2

? IC数据保持时间tSDAH最短为0ns。

? 检查FC设备的保持时间(FC规格v2.1中,在标准/快速总线模式下,FC数据保持时间最短为0ns)。 22

? IC控制器只支持IC总线设备(标准/快速总线模式),不支持C总线设备。 S3C44B0X I2C总线接口操作

S3C44B0X I2C总线接口有4种操作模式:主传送模式、主接收模式、从传送模式和从接收模式。这些操作模式的功能关系描述如下。

1.启动和停止条件

当I2C总线接口未被激活时,一般处于从模式,也就是说,在检测到SDA线上的启动条件之前,接口应处于从模式(当SCL时钟信号保持高电平时,SDA线由高电平到低电平的转变产生启动条件)。当接口状态变为主模式时,SDA线上的数据传送被启动,且SCL信号产生。

启动条件能够在SDA线上传送一个字节的连续数据,停止条件能够结束数据的传送。停止条件是当SCL为高电平时,SDA线上由低电平到高电平的转变。启动和停止条件总是由主设备产生的。当启动条件产生时,I2C总线忙;停止条件产生后几个时钟,I2C总线又变为空闲。

当主设备产生启动条件时,将发送一个从地址通知从设备。这一字节的地址包括7位地址和1位传送方向指示(读或写)。如果第8位是0,表明是写操作(发送操作),如果第8位是1,表明是读数据(接收操作)。

主设备通过发送一个停止条件完成传送操作。如果主设备想继续传送数据到总线上,那么将产生另一个启动条件和另一个从地址,这样,读/写操作就能以不同的格式进行。

2.数据传送格式

放到SDA线上的每一个字节长度都应该是8位。每次传送的被发送的字节数没有限制。启动条件后的第一个字节应有地址域。当I2C总线在主模式下操作时,该地址域能被主设备发送。每一个字节都应紧跟着一个应答位(ACK)。连续数据和地址的MSB位总是最先被发送。

3.应答ACK信号传送

为了完全完成一字节的传送,接收器应发送一个ACK位给发送器。ACK脉冲应出现在SCL线的第9个时钟脉冲上,一字节数据传送需要8个时钟,传送ACK位需要主设备产生一个时钟脉冲。

当接收到ACK时钟脉冲时,发送器应通过使SDA线变成高电平来释放SDA线。接收器也需在ACK时钟脉冲期间使SDA线变为低电平,因此SDA在第9个SCL脉冲的高电平期间可保持低电平。

ACK位的传送功能可由软件(IICSTAT)激活或禁止。然而,完成一字节数据传送操作时,在SCI第9个时钟上的ACK脉冲是必不可少的。

4.读/写操作

在传送模式下,数据被传送后,I2C接口将处于等待状态,直到有一个新数据写入IICDS(IIC数据转移寄存器)。在新的数据写入之前,SCL线将保持低电平。新数据写入IICDS寄存器之后,SCL线将被释放。S3C44B0X保持这个中断来确定当前数据传送的完成。CPU接收到中断请求之后,将再写一个新的数据到IICDS。

在接收模式下,接收到数据后,I2C接口将处于等待状态,直到IICDS寄存器被读出。在新数据被读出前,SCL线保持低电平。在从IICDS寄存器读出新数据后,SCL线将被释放。S3C44B0X保持这个中断来确定新数据接收的完成。CPU接收到中断请求之后,将从IICDS中读出这个数据。

5.总线仲裁程序

仲裁发生在SDA线上,有效阻止了两个主设备在总线上的争夺。如果SDA为高电平的一个主设备检测到另一个主设备的SDA为低电平,那么它将不能启动数据传送,因为总线的当前电平与它自己的不相符,仲裁程序将持续到SDA线变为高电平。

然而,若两个主设备在SDA线上同时为低电平,则每一个主设备应评估总线控制权是否分配给自己。为了确认,每个主设备应测试地址位。即使每个主设备都产生从地址,也应测试SDA线上的地址位,因为一般SDA线上低电平的保持程度强于高电平的保持程度。例如,一个主设备产生一个低电平作为第一个地址位,而另一个主设备继续保持高电平。这种情况下,两个主设备都将在总线上检测到低电平,因为低电平强于高电平,即使第一个主设备尽力在总线上保持高电平。当这种情况发生时,产生低电平(作为地址的第一位)的主设备将得到总线控制权,产生高电平(作为地址的第一位)的主设备应放弃总线控制权。如果两个主设备都产生低电平作为地址的第一位,那么就需要通过地址的第2位进行仲裁。

6.异常中断条件

如果主设备从接收器不能对从地址进行确认,那么将保持SDA线的高电平。这种情况下,主设备应产生一个停止条件并终止传送。

如果主设备涉入异常中断中,在从设备接收到最后一个数据字节后,主设备将通过取消一个ACK信号的产生来通知从设备传送操作的结束,然后从发送器释放SDA,允许主设备产生一个停止条件。

7.配置I2C总线

为了控制连续时钟SCL的频率,4位预分频器值可在IICCON寄存器内设置。I2C接口地址存储在I2C地址寄存器IICADD中(默认时I2C地址是一个未知值)。

8.每种模式下操作的流程图

以下步骤应在操作任何I2C Tx/Rx之前执行。

1)如果需要,则在IICADD寄存器写入从地址。 2)设置IICCON寄存器使能中断,定义SCL周期。 3)设置IICSTAT来使能连续输出。

图7.36所示为主设备分别在发送和接收模式下的操作。图7.37所示为从设备分别在发送和接收模式下的操作。

开始 开始 配置为主传送模式 将从地址写入IICDS 将0xF0写入传送IICDS中的数据 产生ACK信号后 发生中断 YN配置为主传送模式 将从地址写入IICDS 将0xF0写入IICSTAT 传送IICDS中的数据 产生ACK信号后 发生中断 停止? 向IICDS写入新数据 停止? NY等待停止条件发生 清中断挂起位 等待停止条件发生 结束 向IICDS读出新数据 将0xF0写入IICSTAT 清中断挂起位 等待停止条件发生 结束 清中断挂起位 IICDS中的数据移位到SDA 清中断挂起位 SDA中的数据 移位到IICDS (a)主设备发送模式 (b)主设备接收模式

图7.36 主设备在发送和接收模式下的操作

开始 匹配为从发送模式 I2C检测到开始信号且 IICDS开始接收数据 I2C比较IICADD 与IICDS 匹配? 产生I2C地址匹配中断 向IICDS写入数据 清中断挂起位 开始 匹配为从接收模式 I2C检测到开始信号且 IICDS开始接收数据 12C比较IICADD 与IICDS 匹配? 产生I2C地址匹配中断 从IICDS写入数据 清中断挂起位 停止? N 停止? 结束 SDA中的数据 中断被挂起 N IICDS中的数据 中断被挂起 结束 (a)从设备发送模式 (b)从设备接收模式

图7.37 从设备在发送和接收模式下的操作

S3C44B0X I2C接口特殊功能寄存器

I2C总线在主设备和从设备之间进行数据的发送、接收之前,需根据要求对I2C的特殊功能寄存器进行相应的设置。下面就对其各寄存器进行介绍。

1.多主I2C总线控制寄存器

多主I2C总线控制寄存器IICCON见表7.53,其具体功能表中有详细的描述。

表7.53 多主IC总线控制寄存器

位 位 名 称 应答允许位: [7] Ackonwledge Enable 1=允许应答信号产生 0=禁止应答信号产生 发送模式,IICSDA在ACK时释放 接收模式,IICSDA在ACK时为低电平 [6] TxClock Source Selection Tx/Rx Interrupt Enable I2C总线的源时钟预分频值选择位: IICCLK=fMCLK/16,1为IICCLK=fMCLK/512 I2C总线Tx /Rx中断使能/禁止位: 0=禁止中断 1=允许中断 I2C总线Tx /Rx中断挂起标志: [4] Interrupt Pending Flag 写1是不可能的,当读该位为1时,IICSCL为低,I2C停止,为了恢复操作,清除该位 0=读时,没有中断;写时,清除挂起条件和恢复操作 1=读时,中断挂起;写时,无操作N/A [3:0] Transmit Clock Value 2. I2C总线中断发生的条件: ? ? ?

当一字节数据的发送和接收操作完成时。 当产生一个总线呼叫或从地址匹配发生时。 当总线仲裁失败时。

I2C总线发送时钟预分频值,发送时钟频率是由4位预分频值决定的,公式为:TxClock=IICCLK/(IICCON[3:0]+1) 描 述 2

[5] 注:1. 与EEPROM接口连接,在Rx模式下,为了产生停止条件,在读最后一个数据之前,ACK的产生可能无效。

3.为了在IISSCL上升沿之前记录IICSDA设置时间,在清除I2C中断挂起位前,IICDS必须被写。

4. IICCLK由IICCON[6]决定。TI时钟可随SCI。转变时间改变。当IICCON[6]-0时,IICCON[3:0]=0x0或0x1是无效的。 5. 如果IICCON[5]=0,那么IICON[4]将不能正确操作。因此,即使不用I2C中断,也建议设置IICCON[5]=1。 6. IICCON地址:0x01D60000;R/W初始值:0000xxxx。

2.多主I2C总线控制/状态寄存器

I2C总线控制/状态寄存器见表7.54,其具体功能表中有详细的描述。

表7.54 多主IC总线控制/状态寄存器IICSTAT

位 位 名 称 描 述 I2C总线主/从Tx/Rx模式选择位: [7:6] Mode Selection 00=从接收模式 01=从发送模式 10=主接收模式 11=主发送模式 START STOP Condition Serial Output Enable I2C总线忙信号状态位: 0=读时,I2C总线不忙;写时,I2C总线STOP信号产生 1=读时,I2C总线忙;写时,I2C总线START信号产生 I2C总线数据输出使能/禁止位: 0禁止Rx/Tx 1=使能Rx/Tx 2

[5] [4]

本文来源:https://www.bwwdw.com/article/xsi2.html

Top