S3C2440A 第二十章IIC总线接口

声明:在翻译本文之前并没有去查找相关的翻译文献,只是认为这样可以让自己对IIC总线有更好的了解。同时也提升一下自己的英语水平,所以如果有什么翻译不对的地方或者不清楚的地方请大家指出,谢谢,同时希望我翻译的文献对大家有用。

 

IIC总线接口

概述:

      S3C2440ARISC微处理器支持多主IIC总线串行接口。一条专用的串行数据线(SDA)和一个串行时钟线(SCL)携带总线主机和通过IIC总线连接外部设备的信息。同时SDA线和SCL线都是双向的。

       在多重主机IIC总线模式时,S3C2440A RISC微处理器可以与从机设备收发串行数据。主机设备可以通过IIC总线开始或者终止一个数据的传输。而在S3C2440A中IIC总线使用标准总线仲裁过程。

       为了控制多主机IIC总线操作,数据必须写到下面的寄存器中:

—  多重主机IIC总线控制寄存器,IICCON

—  多重主机IIC总线控制/状态寄存器,IICSTAT

—  多重主机IIC总线Tx/Rx数据传输寄存器,IICDS

—  多重主机IIC总线地址寄存器,IICADD

 

当IIC总线空闲时,SDA线和SCL线都应该处在高电平。而当SCL线一直处在高电平时,SDA线从高电平转到低电平表示一个开始信号。而一个从低电平到高电平的转化表示一个结束信号。

       而开始信号和结束信号只有主机设备可以产生。在开始信号发出后,一个7位的地址数据发送由主机发送到总线中。而第8位表示传输的方向(是读还是写)。

       每一个发送到SDA线上的数据都应该有8位。而在总线传输操作时,任何一字节的数据都可以没有限制的收发。而数据总是从高字节位开始发送,同时每字节的数据的发送之后应该立马跟随一个应答位(ACK)。

IIC总线框架图 

 

IIC总线接口:

       S3C2440A的IIC总线接口有四种操作模式

—  主机传送模式

—  主机接收模式

—  从机传送模式

—  从机接收模式

这些操作模式的功能关系描述在下面。

开始和结束信号:

        当IIC总线接口在没有使能时,他通常做从机模式。换句话说,也就是在SDA线检测到开始信号(开始信号,即当SCL线为高电平时SDA线由高电平转化为低电平)之前,这个接口应当处于从机状态。而当这个接口状态改变到主机模式时,SCL信号产生,同时SDA发起数据的传输。

        一个开始信号后可以在SDA线上传输一个一字节的数据,而一个结束信号可以终止数据的传输。而一个结束信号就是当SCL在高电平时,SDA有低电平向高电平的转化。而总是主机产生开始和结束信号。当一个开始信号产生后,IIC总线进入忙状态。而一个结束信号可以使IIC总线进入空闲状态。

        当主机发起开始信号,他应该发出一个从机地址去识别从机设备。一字节地址数据包含7位的地址位和一位的传输方向位(表示是读或者写)。如果第八位是0,表示一个写操作(传送操作),如果第八位是1,表示需要读数据(接收操作)。

        主机将通过传送结束信号来完成传输操作。如果此时主机想继续传输数据到总线,他应该再产生一个开始信号和一个从机地址。这样读写操作可以使用各种方式操作。

 

数据传输格式:

SDA线上每字节的数据长度都应该是8位。而这字节数可以没有限制的传输。而在开始信号后的一字节数据应该为地址数据。当IIC总线操作在主机模式时,地址数据可以被主机发出。而传输完每一个字节数据后都应该有一位应答位(ACK)。同时高字节在前面,而且总是第一个发地址数据。

  

应答信号传输:

       为了表示一字节传输完成,接收器要向发送器发送一位的应答信号(ACK)。这个应答信号要在SCL线发出第九个时钟时发出。前面的八个时钟用于传输一字节的数据。而主机应该产生时钟脉冲来产生ACK位。

       当接收到ACK时钟时,发送器应该释放SDA线以使其为高电平。而接收器应该再ACK时钟周期内将SDA线拉为低电平作为应答。因此SDA线保持在低电平在第九个SCL脉冲周期内。

       而ACK为可以通过软件(IICSTAT)设置为使能或者失能。然而在SCL第九个脉冲周期时ACK脉冲需要已经完成一字节的数据传输。

 

读写操作:

        在传送模式,当数据传输时,IIC总线将会处于等待状态知道IIC总线数据转移寄存器(IICDS)接收到一个新的数据。而在新的数据写入寄存器之前,SCL线将会保持低电平。而当数据写完时,SCL将会被释放回到高电平。S3C2440A可以使用中断来识别当前的数据是否传输完成。然后CPU收到中断请求,然后他再次写一个新的数据到IICDS寄存器。

       在接收模式,当数据接收时,IIC总线接口将处在等待状态,知道IICDS寄存器完成读操作。而在新的数据读出寄存器之前,SCL线将会保持低电平。而当数据读出后,SCL将会被释放回到高电平。S3C2440A可以使用中断来识别当前的数据是否接收完成。然后CPU收到中断请求,然后他再次写一个新的数据到IICDS寄存器。

 

总线仲裁过程:

仲裁发生在SDA线上来阻止在总线上两个主机的冲突。如果一个主机他的SDA处在高电平,当他检测到另一个主机的SDA处于低电平。他将不会发起一个数据的传输。因为当前层的总线和他是不一样的。而这时就要仲裁处理了,知道SDA返回高电平为止。

然而,当多个主机同时拉低他们的SDA线时,每一个主机都应该评估是否主权属于他自己。而评估的目的是每一个主机应该检测他的地址位。同时每个主机产生从机地址,同时他也应该探测SDA上的地址位,因为SDA很可能为低电平而不是保持高电平。假设一个主机产生一个低电平在第一个地址位,而其他的主机继续保持高电平。在这种情况下两个主机将在总线上检测到低电平。因为低电平状态相对于高电平在能量上有更高的优先级。当次发送,(地址的第一位)为低电平成为主机获得主权,而(地址的第一位)为高电平将要退出主权。如果第一位都为低电平,那么就应该仲裁第二位地址数据,以此类推直到最后一个地址位。

 

终止条件:

如果从机接收器不能应答来确认从机地址,那么应该将SDA拉为高电平。在这种情况下,主机应该产生一个结束信号同时终止传输。

如果一个主机接收器要结束传输,他将在从机传输完最后一个数据后取消产生应答信号(ACK)来终止这个传输。从机传输器然后应该释放SDA线给主机来产生停止信号。

 

配置IIC总线:

4位的预分频系数被编程到IICCON寄存器中来控制串行时钟(SCL)的频率。而IIC总线接口地址储存在IIC总线地址寄存器(IICADD)中。(而默认,IIC总线接口有一个未知值)。

 

在各种模式操作下的流程图:

在任何传送/接收操作前,下面的步骤一定要实施。

1. 如果需要,写自己从机地址到IICADD寄存器

2. 设置IICCON寄存器

    a) 使能中断

    b) 定义SCL周期

3. 设置IICSTAT来使能串行输出

 

 

IIC总线接口专用寄存器:

多主机IIC总线控制寄存器(IICCON):

寄存器

地址

R/W

描述

设置值

IICCON

0x54000000

R/W

IIC总线控制寄存器

0x0X

 

IICCON

Bit

描述

初始值

应答(ACK)产生

7

IIC总线应答使能位。

0:不使能

1:使能

在传送模式,IICSDA为空闲在应答时

在接收模式,IICSDA为低电平在应答时

0

传输时钟源选择

6

IIC总线传输时钟源预分频选择位。

0:IICCLK =fPCLK/16

1:IICCLK =fPCLK/512

0

收发中断

5

IIC总线收发中断使能位。

0:不使能

1:使能

0

中断悬挂标志

4

IIC总线收发中断悬挂标志。这位不能被写为1。当该位被读为1,IICSCL在低电平同时IIC被终止,而要恢复操作将该位设为0.

0: 1)(当读时)没有中断悬挂

  2)(当写时)清中断悬挂并恢复操作

1: 1)(当读时)中断悬挂

  2)(当写时)没有该操作

0

传输时钟值

3:0

IIC总线传输时钟预分频。

IIC总线传输时钟频率由这4位预分频值决定,根据下面公式:

Tx clock = IICCLK/(IICCON[3:0]+1).

没有定义

 

 

注意:

1.     接口到EEPROM,在读最后一个数据之前应答信号应该失能,以为传送模式产生结束信号。

2.     IIC中断在下面条件可产生 1)当1字节传输或者接收完成时 2)当一个常规的调用或者从机地址匹配时 3)如果总线仲裁失败。

3.     为了调整SDA的时间在SLC的上升沿,IICDS寄存器必须在清中断悬挂位之前写入。

4.     IICCLK由IICCON的第6位决定。传输时钟改变传输时间。而当IICCON[6]=0,而IICCON[3:0]=0x0或者0x1是不可取的。

5.     如果IICCON[5]=0,而对IICCON[4]的操作就不是正确的。所以建议你即使你不用IIC中断,也应该将IICCON[5]设置为1。

 

多主机IIC总线控制/状态寄存器(IICSTAT):

寄存器

地址

R/W

描述

设置值

IICSTAT

0x54000004

R/W

IIC总线控制/状态寄存器

0x0

 

IICSTAT

Bit

描述

初始值

模式选择

7:6

IIC总线主/从 收/发模式选择

00: 从机收模式

01: 从机发模式

10: 主机收模式

11: 主机发模式

00

忙状态

开始终止信号

5

IIC总线忙状态位。

0: 读) 不忙

写) 结束信号产生

1: 读)忙

写) 开始信号产生

 开始信号后IICDS中的数据自动传送。

0

串行输出

4

IIC总线串行输出使能位。

0:  失能收发

1:  使能收发

0

仲裁状态标志

3

IIC总线仲裁状态标志位。

0:  总线仲裁成功

1:  总线仲裁失败

0

从机地址状态

2

IIC总线从机地址状态位。

0:  当检测到开始结束信号,清除该位

1:  接收从地址值并将其与IICADD中的地址比较

0

地址0状态标志

1

IIC总线地址0状态标志位。

0:  当检测到开始结束信号,清除该位

1:  接收到的从地址值为00000000b

0

最后收取位状态标志

0

IIC总线最后收取位状态标志位。

0:  最后收取位为0(收到ACK应答)

1:  最后收取位为1(没有收到ACK应答)

0

 

 

 

多主机IIC总线地址寄存器(IICADD):

寄存器

地址

R/W

描述

设置值

IICADD

0x54000008

R/W

IIC总线地址寄存器

0xXX

 

IICADD

Bit

描述

初始值

从机地址

7:0

IIC总线发出的7位从机地址。

当在IICSTAT寄存器中串行输出使能位被设为0,而IICADD的写被使能。IICADD中的值随时可以被读取而不用去管当前串行输出使能位(IICSTAT)是否被设置。

从机地址:[7:1]

没有映射:[0]

XXXXXXXX

 

 

 

多主机IIC总线传输/接收数据转移寄存器(IICDS):

寄存器

地址

R/W

描述

设置值

IICDS

0x5400000C

R/W

IIC总线传输/接收数据转移寄存器

0xXX

 

IICADD

Bit

描述

初始值

数据转移

7:0

IIC总线收发操作的8位数据转移寄存器。

当IICSTAT的串行输出使能位设为1,而IICDS的写使能。IICDS的值随时可以被读取而不用去管当前串行输出使能位(IICSTAT)是否被设置。

XXXXXXXX

 

 

 

多主机IIC总线线控制寄存器(IICLC):

寄存器

地址

R/W

描述

设置值

IICLC

0x54000010

R/W

IIC总线线控制寄存器

0x00

 

IICLC

Bit

描述

初始值

过滤器使能

2

IIC总线过滤器使能位。

当SDA端被设置为输入时,该位应该为高电平。这个过滤器可以通过阻止双PCLK时间时的小故障来阻止错误的发送

0:  失能过滤器

1:  使能过滤器

0

SDA输出延时

1:0

IIC总线延时长度选择位。

随时钟时间(PCLK)SDA线的延时

00:  0个时钟

01:  5个时钟

10:  10个时钟

11:  15个时钟

00

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值