S3C2440A中文Datasheet联系信箱:admin@embeddedlinux.org.cn第二十章IIC总线接口Forum:。专用串行数据线(SDA)和串行时钟线(SCL)承载总线主设备和连接IIC总线的外围设备之间的信息。SDA和SCL线都是双向的。在多主设备IIC总线模式下,多个S3C2440A微处理器可以从从属设备接收或发送串行数据。主设备S3C2440A可以初始化和终止一个基于IIC总线的数据传输。在S3C2440A中的IIC总线使用标准总线仲裁步骤。为了控制多主设备IIC总线操作,这些值必须写入以下寄存器:-多主设备IIC总线控制寄存器(IICCON)-多主设备IIC总线控制状态寄存器(IICSTAT)-多主设备IIC总线接收发送数据移位寄存器(IICDS)-多主设备IIC总线地址寄存器(IICADD)当IIC总线是空闲的,SDA和SCL线应该都是高电平。SDA从高到低的变化能够初始化一个开始条件。当SCL保持稳定在高电平下,SDA从低到高的变化可以初始化一个停止条件。开始和停止条件都是由主设备生成。在第一个字节中的一个7位的地址值可以决定一个由主设备选择的从设备,其地址值在开始条件初始化后被放到总线上。第8位决定的是传输方向(读或写)。放到SDA线上的每个数据字节总共应该是8位。在总线传输期间,该字节可以被无限制的发送或接收。数据发送总是先对MSB,每个字节应该紧跟一个应答位(ACK)。S3C2440A中文Datasheet联系信箱:admin@embeddedlinux.org.cn第二十章IIC总线接口Forum:。20.1.2开始和停止条件当IIC总线接口是不活动,其通常是在从设备模式。换言之,接口在检测到SDA线上的开始条件之间一直处于从设备模式(开始条件可以被初始化,当SCL时钟信号是高电平是SDA线下跳变)。当接口状态变为主设备模式,在SDA线上的数据传输被初始化且SCL信号生成。开始条件可以通过SDA线传输一个字节串行数据,一个停止条件可以终止一个数据传输。停止条件是当SCL是高电平时,SDA线从低电平到高电平的跳变。开始和停止条件都是由主设备生成。当开始条件生成,IIC总线忙。停止条件将使IIC总线空闲。当一个主设备初始化开始条件,它应该发送一个从地址来停止从设备。一个字节的地址域包含7位地址和一位传输方向指示(说明读写)。如果位8是0,说明是写操作。如果位8是1说明是数据读请求。主设备通过发送停止条件来完成一个传输操作。如果主设备想继续到总线的数据传输,他应该生成另一个开始条件和从地址。用这个方法,读写操作可以在不同形式下执行。20.1.3数据传输格式每个放到SDA线上的字节应该是8位长度。该字节应该被无限制的传输。紧接着开始条件的第一个字节应该有一个地址区域。当IIC在主设备模式下操作,地址区域应该由主设备发送。每个字节后面应该紧跟一个应答位(ACK)。串行数据的MSB位和地址总是先发送。S3C2440A中文Datasheet联系信箱:admin@embeddedlinux.org.cn第二十章IIC总线接口Forum:,接收器应该发送一个ACK位给发送器。ACK脉冲应该出现在SCL线的第九个时钟。一个字节数据传输需要8个时钟。主设备生成传输ACK位所需的时钟脉冲。发送器应该在接收到ACK时钟脉冲以后通过拉高SDA线释放SDA线。接收器也应该在ACK时钟脉冲期间拉低SDA线,以至于在第九个SCL脉冲为高电平期间SDA保持低电平。ACK位发送功能可以通过软件(IICSTAT)使能或使无效。但是在SCL第九个时钟的ACK脉冲是用于完成一个字节数据传输。S3C2440A中文Datasheet联系信箱:admin@embeddedlinux.org.cn第二十章IIC总线接口Forum:,如果数据传输后,IIC总线接口会等待直到IIC总线数据移位寄存器(IICDS)收到一个新数据。在新数据写入寄存器之前,SCL线将保持低电平,然后在数据写入后释放。S3C2440A应该保持中断来识别当前数据发送是否完成。在CPU收到中断请求以后,它应该再写一个新数据到IICDS寄存器。在接收模式下,当数据收到后,IIC总线几口应该等待直到IICDS寄存器被读取。在一个新数据被读出之前,SCL线应该保持低电平,在数据被读出后再释放。S3C2440A应该保持中断来识别当前数据接收是否完成。在CPU收到中断请求以后,它应该从IICDS寄存器读取数据。20.1.6总线仲裁步骤仲裁是为了避免两个主设备在总线上对SDA线的争夺。如果一个设置SDA线位高电平的主设备发现了另一个设置SDA线为低电平的主设备,它将无法初始化一个数据传输,因为总线当前电平不满足它自己设定的电平。仲裁过程将展开知道SDA线位变为高电平。但是,当主设备同时拉低SDA线,每个主设备应该估计是否控制器是分配给自己。对于估计的目的是每个主设备应该检测地址位。当每个主设备生成从属设备地址时,它也应该侦测SDA线上的地址位,因为SDA线更可能拉低而不是变高。假定一个主设备生成一个低电平信号作为第一个地址位,而另一个主设备保持高电平。在这种情况下,两个主设备都会侦测到总线上是低电平,因为在低电平状态优先于高电平状态。如果这种情况发生,产生低电平的主设备应该获得控制权而产生高电平的主设备应该放弃总线控制权。如果两个设备都产生一个低电平作为地址的第一个位,则应该再仲裁第二个地址位。仲裁会一直继续直到最后一个地址位。20.1.7中止条件如果一个从接收器不能应答从属设备地址的确认,它应该保持SDA线的电平为高。在这种情况下,主设备应该生成一个停止条件并中止传输。如果主设备的接收器也参与了被中止的传输,它应该通过在从从设备收到最后数据字节后取消ACK信号的生成,给从设备传输操作的最后发信号。从设备发送器应该释放SDA线以允许主设备产生一个停止条件。S3C2440A中文Datasheet联系信箱:admin@embeddedlinux.org.cn第二十章IIC总线接口Forum:(SCL)的频率,4位的预定标器值可以通过IICCON寄存器来被编程。IIC总线接口地址是存储在IIC总线地址寄存器(IICADD)中。(默认情况下,IIC总线接口地址有一个未知值)20.1.9每个模式下的操作流程图以下步骤必须在任何IIC接收发送操作之前被执行。(1)如果需要,写自己从属地址到IICADD寄存器。(2)设置IICCON寄存器(a)使能中断(b)定义SCL期间(3)设置IICSTAT寄存器来使能串行输出。S3C2440A中文Datasheet联系信箱:admin@embeddedlinux.org.cn第二十章IIC总线接口Forum::admin@embeddedlinux.org.cn第二十章IIC总线接口Forum::admin@embeddedlinux.org.cn第二十章IIC总线接口Forum::admin@embeddedlinux.org.cn第二十章IIC总线接口Forum:(1)多主设备IIC总线控制寄存器(IICCON)(2)多主设备IIC总线控制状态寄存器(IICSTAT)(3)多主设备IIC总线地址寄存器(IICADD)(4)多主设备IIC总线接收发送数据移位寄存器(IICDS)(5)多主设备IIC总线线路控制寄存器(IICLC)20.2.1多主设备IIC总线控制寄存器MULTI-MASTERIIC-BUSCONTROLREGISTER(IICCON)注:(1)接口EEPROM,在读取最后数据之前应答生成设置为无效,目的是在接收模式下生成停止条件。(2)IIC总线中断出现1)当一个字节发送或接收操作完成2)当一个generalcall或从设备地址匹配出现3)如果总线仲裁失败(3)为了在IISSCL上升沿之前调整IICSDA的建立时间,IICDS必须在清除IIC中断挂起位之前写。(4)IICCLK由IICCON[6]决定。发送时钟在SCL跳变时间内改变。当IICCON[6]=0,IICCON[3:0]=0x0或0x1是没用的。(5)如果IICCON[5]=0,IICCON[4]没有正确操作。因此推荐设置IICCON[5]=1,景观你寄存器地址读写描述复位值IICCON0x54000000R/WIIC总线控制寄存器0xXIICCON位描述初始值Acknowledgegeneration(1)[7]IIC总线应答使能位0:无效1:有效在发送模式下,IICSDA在应答时间内是空闲在接收模式下,IICSDA在应答时间内是L0Txclocksourceselection[6]IIC总线传输时钟预定标器源时钟选择位0:IICCLK=fPCLK/161:IICCLK=fPCLK/5120Tx/RxInterrupt(5)[5]IIC总线接收发送中断使能位0:无效1:有效0Interruptpendingflag(2)(3)[4]IIC总线接收发送中断挂起标志。该ibzhi不能被写1。当该位写1,IICSCL为L且IIC停止。为了恢复操作,清0该位。0:(1)无中断挂起(读)(2)清除挂起条件&恢复操作(写)1:(1)中断挂起(读)(2)N/A(写)0Transmitclockvalue(4)[3:0]IIC总线发送时钟预定标器。IIC总线发送时钟频率由该4位预定标器的值决定,根据以下公式:Txclock=IICCLK/(IICCON[3:0]+1)UDFS3C2440A中文Datasheet联系信箱:admin@embeddedlinux.org.cn第二十章IIC总线接口Forum:。20.2.2多主设备IIC总线控制状态寄存器MULTI-MASTERIIC-BUSCONTROL/STATUSREGISTER(IICSTAT)20.2.3多主设备IIC总线地址寄存器MULTI-MASTERIIC-BUSADDRESSREGISTER(IICADD)寄存器地址读写描述复位值IICSTAT0x54000004R/WIIC总线控制状态寄存器0x0IICSTAT位描述初始值Modeselection[7:6]IIC总线主从接收发送模式选择位00:从接收模式01:从发送模式10:主接收模式11:主发送模式00Busysignalstatus/STARTSTOPcondition[5]IIC总线忙状态位0:(读)不忙1:(读)忙(写)停止信号生成(写)开始信号输出在开始信号后,IICDS中的数据自动被传输。0Serialoutput[4]IIC总线数据输出使能位