DS1337 时钟芯片在 C8051F 上的实现
能在SCL为低时改变电平。在SCL为高电平时SDA发生改变则是代表如下的开始和停止信号:
开始:该条件启动一次传输过程。当SCL为高电平时SDA上出现一个下降沿。
结束:该条件结束一次传输过程。当SCL为高电平时SDA上出现一个上升沿。
应答:也称为ACK,接收器件发送该信号表示确认。例如,在器件X收到一个字节后,它将发送一个ACK确认传输成功。ACK条件是在SCL为高时采样到SDA为低电平。
非应答:也称为NACK,这是在SCL为高电平时采样到SDA为高电平。当接收器件不能产生ACK时,发送器件看到的是NACK。在典型的数据传输中,收到NACK信号表示所寻址的从器件没有准备好或不在总线上。一个处于接收状态的主器件发送NACK表示这是传输的最后一个字节。图2给出了握手信号时序。
图6 SMBus 时序
2.2 传输方式
有两种可能的传输方式:写(从主器件到从器件)和读(从从器件到主器件)。在一次传输中,任何一个器件都可以是四种角色之一。这四种角色将在下面说明。注意,从地址+R/W’是指一个8位传输(7位地址,1位R/W)。
1)主发送器:在该方式下,器件在SDA上发送串行数据,在SCL上输出时钟。器件用一个起始条件启动传输过程,发送从地址+W,然后等待从器件的ACK。收到ACK后,器件发送一个或多个字节数据,每个字节都要由从器件确认。在发送完最后一个字节后,器件发送一个停止条件。
2)主接收器:在该方式下,器件在SDA上接收串行数据,在SCL上输出时钟。器件用一个起始条件启动传输过程,之后发送从地址+R。在收到从器件对地址的ACK后,在SCL上输出时钟并在SDA上接收数据。在接收完最后一个字节后,器件将发送一个NACK和一个停止条件。
3)从发送器:在该方式下,器件在SDA上输出串行数据,在SCL上接受时钟。器件接收一个起始条件和它自己的从地址+R,然后发出ACK并进入从发送方式。器件在SDA上发送数据,在发送完每个字节后都要收到一个ACK。在传输完最后一个字节后,主器件发送一个NACK和一个停止条件。
4)从接收器:在该方式下,器件收到来自主器件的起始条件和和它自己的从地址+W。然后发出ACK并进入从接收方式。现在器件在SDA上接收串行数据,在SCL上接收时钟。在接收完每个字节后都要发送一个ACK,在接收到主器件的停止条件后退出从接收方式。
图7为典型的写操作情况。图8为典型的读操作情况。
图7 写操作
(1)为一个成功的传送过程。在(3)中,主器件在收到一个ACK后重新发出起始条件。这一过程允许主器件在不放弃总线的情况下启动一个新的传输过程(例如,从写操作切换到读操作)。重复起始条件通常在访问EEPROM时使用,因为一个读操作前面必须有一个写存储器地址的操作。
图8 读操作
2.3 SMBus特殊功能寄存器
对 SMBus 串行接口的访问和控制是通过 5 个特殊功能寄存器来实现的:控制寄存器 SMB0CN、时钟速率寄存器 SMB0CR、地址寄存器 SMB0ADR、数据寄存器 SMB0DAT 和状态寄存器 SMB0STA。系统器件可以有一个或多个 SMBus 串行接口。
2.3.1 控制寄存器SMB0CN
SMBus 控制寄存器 SMB0CN 用于配置和控制 SMBus 接口。该寄存器中的所有位都可以 用软件读写。有两个控制位还受 SMBus 硬件的影响。当发生一个有效的串行中断条件时,串 行中断标志(SI,SMB0CN.3)被硬件设置为逻辑 1,该标志只能用软件清 0。当总线上出现 一个停止条件时,停止标志(STO,SMB0CN.4)被硬件清 0。
2.3.2 时钟速率寄存器SMB0CR
在器件工作于主方式时SMBus时钟寄存器用于控制SCL时钟速率。SMB0CR中的8位数决定了时钟速率,公式如下:
其中,SMB0CR是一个负数的补码。因此,对于100kHz的SCL频率和16MHz的SYSCLK,应向SMB0CL装入-80,即0xB0。
2.3.3 地址寄存器 SMB0ADR
SMBus地址寄存器保存器件在从方式时将要应答的从地址。位(7:1)保存从地址;位0是通用呼叫允许。如果位0被置位,器件将应答通用呼叫地址(0x00)。
2.3.4 数据寄存器 SMB0DAT
SMBus数据寄存器用于保存将要发送或刚刚接收的数据。只有在SI=1时,从该寄存器读出的数据才是有效的。当SI不为1时,SMBus可能处在向SMB0DAT移入数据或从SMB0DAT移出数据的过程中。注意:在传输过程中,从SMB0DAT移出的最高位又移回到最低位,因此在一次传输完成后SMB0DAT中仍然保存着原始数据。
1.3.5 状态寄存器 SMB0STA
共有28个可能的SMBus状态,每个状态对应一个唯一的状态码。状态码的高5位是可变的,而一个有效状态码的
低3位固定为0(当SI=1时)。因此所
- 芯片I2C通信异常无法读写寄存器破解(08-20)
- 基于C8051F330的便携式生理参数监测仪设计(06-17)
- 基于USB接口的高增益数据采集系统的设计(04-03)
- 便携式设备的低功耗MCU系统设计方法及应用(06-10)
- MC8051 IP核基本结构及原理(04-22)
- 基于C8051F120核心的嵌入式彩色显示系统设计(05-04)