您好,欢迎访问三七文档
当前位置:首页 > 资格认证/考试 > 技工职业技能考试 > 技能培训专题 C8051F MCU 应用笔记 2
C8051FMCU应用笔记SiliconLaboratoriesInc.新华龙电子有限公司4635BostonLane深圳市福田区华强北路现代之窗大厦A座13FC室(518013)Austin,TX787350755-83645240836452428364524483645251AN013—用SMBus实现串行通信相关器件本应用笔记适用于下列器件:C8051F000、C8051F001、C8051F002、C8051F005、C8051F006、C8051F010、C8051F011和C8051F012。引言C8051F0xx系列器件有一个符合系统管理总线标准1.1版以及I2C串行总线标准的SMBus串行I/O器件。SMBus是一个双向、二线接口,能与多个器件通信。SMBus是英特尔公司的商标;I2C是菲力浦半导体公司的商标。本应用笔记介绍SMBus总线的配置和操作。本文提供示例汇编代码和‘C’代码:(1)与单个具有一字节地址空间的EEPROM接口的汇编语言程序;(2)与多个具有二字节地址空间的EEPROM接口的C语言程序;(3)两个C8051F0xx点对点通信的C语言程序。SMBus规范本节介绍SMBus协议。对SMBus的讨论从下一节--“使用SMBus”开始。SMBus结构一个SMBus系统是一个二线网络,网络中的每一个器件有一个唯一的地址并可以被网络中的其它器件访问。所有的传输过程都由一个主器件启动;如果一个器件识别出自己的地址并回应,它就是那次传输的从器件。值得注意的是,没有必要指定一个主器件。对于任何一次数据传输,任何一个器件都可以作为主器件或从器件。当两个器件试图同时启动一次传输时,仲裁机制将强迫一个器件放弃总线。这种仲裁机制是非破坏性的(一个器件赢得总线,但没有信息丢失)。我们将在仲裁一节深入讨论仲裁机制。SMBus通信使用两根线:SDA(串行数据)和SCL(串行时钟)。每根线都是双向的,其方向取决于器件所处的工作方式。主器件总是提供SCL;主、从器件都可以在SDA上传输数据。两根线都应通过一个上拉电路接到正电源。SMBus线上的所有器件都应有漏极开路或集电极开路输出,这样可使总线空闲时保持高电平。如果一个或多个器件输出低电平信号,总线被拉为低电平。要使总线保持在高电平,所有的器件都必须输出高电平。第二页中的图1给出一个典型的SMBus总线配置。电话:Email:mcuinfo@silabs.com(版权所有)电邮:shenzhen@xhl.com.cnInternet:网址:—用SMBus实现串行通信VDD=+5V/+3VSDASCL器件3器件2器件1图1.典型的SMBus总线配置握手SMBus采用多种线路条件作为器件间的握手信号。注意,在一次数据传输中,SDA只能在SCL为低时改变电平。在SCL为高电平时SDA发生改变则是代表如下的开始和停止信号:开始:该条件启动一次传输过程。当SCL为高电平时SDA上出现一个下降沿。结束:该条件结束一次传输过程。当SCL为高电平时SDA上出现一个上升沿。应答:也称为ACK,接收器件发送该信号表示确认。例如,在器件X收到一个字节后,它将发送一个ACK确认传输成功。ACK条件是在SCL为高时采样到SDA为低电平。非应答:也称为NACK,这是在SCL为高电平时采样到SDA为高电平。当接收器件不能产生ACK时,发送器件看到的是NACK。在典型的数据传输中,收到NACK信号表示所寻址的从器件没有准备好或不在总线上。一个处于接收状态的主器件发送NACK表示这是传输的最后一个字节。在下一节中将对这两种情况进行进一步讨论。图2给出了握手信号时序。SLA6R/WSLA5-0D7D6-0STARTSTOPNACKSTOPSDASCLSTARTACK图2.SMBus时序传输方式有两种可能的传输方式:写(从主器件到从器件)和读(从从器件到主器件)。在一次传输中,任何一个器件都可以是四种角色之一。这四种角色将在下面说明。注意,‘从地址+R/W’是指一个8位传输(7位地址,1位R/W)。1)主发送器:在该方式下,器件在SDA上发送串行数据,在SCL上输出时钟。器件用一个起始条件启动传输过程,发送从地址+W,然后等待从器件的ACK。收到ACK后,器件发送一个或多个字节数据,每个字节都要由从器件确认。在发送完最后一个字节后,器件发送一个停止条件。2AN013-1.0MAR01AN013—用SMBus实现串行通信2)主接收器:在该方式下,器件在SDA上接收串行数据,在SCL上输出时钟。器件用一个起始条件启动传输过程,之后发送从地址+R。在收到从器件对地址的ACK后,在SCL上输出时钟并在SDA上接收数据。在接收完最后一个字节后,器件将发送一个NACK和一个停止条件。3)从发送器:在该方式下,器件在SDA上输出串行数据,在SCL上接受时钟。器件接收一个起始条件和它自己的从地址+R,然后发出ACK并进入从发送方式。器件在SDA上发送数据,在发送完每个字节后都要收到一个ACK。在传输完最后一个字节后,主器件发送一个NACK和一个停止条件。4)从接收器:在该方式下,器件收到来自主器件的起始条件和和它自己的从地址+W。然后发出ACK并进入从接收方式。现在器件在SDA上接收串行数据,在SCL上接收时钟。在接收完每个字节后都要发送一个ACK,在接收到主器件的停止条件后退出从接收方式。图3示出典型的写操作情况。(1)示出一个成功的传送过程。在(2)中,主器件在发送完从地址+W后收到一个NACK。这种情况发生在从器件‘离线’时,表示它不能回应其从地址。在这种情况下主器件应发出一个停止条件或重新发出起始条件。为了重试传输过程,主器件在发出停止条件后重新发送起始条件和从地址+W。主器件将一直重复该循环过程,直到收到一个ACK为止。这被称为“应答查询”。PA(2)(3)ASLA+RS(4)PAS=SLA=(7)W=R=Data=A=A=P=SSLA+WADataPAAData(1)Data写成功在SLA+W后收到NACK在应答后发出重复起始条件在数据之后收NA到CK从主器件到从器件从从器件到主器件任意数据字节数和应答起始从地址位写(1位)读(1位)串行数据(8位)确认非确认停止图3.典型的写操作情况在(3)中,主器件在收到一个ACK后重新发出起始条件。这一过程允许主器件在不放弃总线的情况下启动一个新的传输过程(例如,从写操作切换到读操作)。重复起始条件通常在访问EEPROM时使用,因为一个读操作前面必须有一个写存储器地址的操作。在所提供的三个代码示AN013-1.0MAR013AN013—用SMBus实现串行通信例中都有重复起始条件。在(4)中,NACK是在接收完一个数据字节后收到的。在典型的SMBus总线中,这是接收器指示错误的方式。主器件或者象在(2)中那样发送一个停止条件后重试传输过程,或者放弃这次传输。注意:NACK的使用并不仅限于发生错误的情况,应答级别是一个用户可定义的特性,可以随着应用的不同而变化。图4示出典型的读操作情况。(1)示出一个成功的读过程。在(2)中,主器件在发送完从地址+R后收到一个NACK。这种情况的处理与在写操作的(2)中讨论的一样。主器件可用应答查询来重试传输过程或放弃这次传输。(3)示出主器件在发送完一个字节数据后重复发出起始条件的过程。这与写操作中讨论的重复起始条件状态是一样的。一个主器件可以在传输完任何一个字节后重新发出起始条件,可以在重复起始条件之后启动读或写操作。一般来说,重复起始条件用于改变方向(R/W)或改变地址(从器件)。注意,在读和写的示意图中所看到的只是典型情况。总线错误、超时和总线竞争都有可能发生。超时用于检测一次传输过程是否停止或总线何时空闲。常常有这样的情况:一个器件保持SCL为低电平,直到它准备好继续传输过程为止。这种过程允许一个低速从器件与一个快速的主器件通信,因为停止总线操作实际上相当于降低了SCL频率。系统管理总线协议规定:SMBus系统中的所有器件必须将任何大于25ms的SCL低电平视为“超时”。发生种情况时,总线上的所有器件必须进行通信复位。也有可能发生高电平SCL超时。如果SDA和SCL同时为高电平的时间大于50微秒,则可认为总线处于空闲状态。S=SLA=W=R=Data=A=A=P=DataPA(2)(3)ASLA+RS(1)SSLA+RADataPAAData读成功在SLA+R后收到NACK在ACK后发出重复起始条件从主器件到从器件从从器件到主器件任意数据字节数和应答起始停止从地址写(1位)读(1位)串行数据(8位)确认非确认(7)位图4.典型的读操作情况4AN013-1.0MAR01AN013—用SMBus实现串行通信总线竞争如果在同一个SMBus系统中有多个主器件,有可能出现两个主器件同时启动传输过程的情况。如果发生这种情况,总线仲裁机制就会强迫一个器件放弃总线。总线仲裁机制是什么:两个主器件继续发送过程,直到其中一个试图发送高电平而另一个试图发送低电平为止。由于总线是漏极开路的,试图发送低电平的器件将获得总线控制权。发送高电平的器件放弃总线,其它器件继续其传输过程。注意,这种总线争用是非破坏性的:总会有一个器件赢得总线。总线仲裁机制如何工作:假设器件X和器件Y争用总线。赢得总线的器件X不受仲裁机制的任何影响。因为数据是在移位寄存器中移出、移入,所以器件Y不丢失任何数据。图5给出了两个器件在总线竞争期间输出时序示例。注意:器件Y在放弃总线后开始接收数据。011101100111101110110器件X器件Y总线上的信号器件Y放弃总线图5.总线竞争过程使用SMBusSMBus可以工作在主和从方式。总线硬件为串行传输提供了时序和移位控制;字节控制是用户定义的。SMBus硬件完成下列与应用无关的任务:时序控制:在主方式,硬件在SCL上产生时钟信号用来同步SDA上的数据。硬件还识别超时和总线错误。串行数据传输:硬件控制所有在SDA上移入和移出的数据,包括应答级别。应答级别是用户定义的,细节在下面的寄存器定义中解释。从地址识别:硬件能识别来自另一个器件的起始条件,并读取随后的从器件地址。如果从地址与SMBus地址寄存器(下面将定义)中的内容匹配,则硬件应答该地址。注意:只有在AA(地址应答)被置位时该功能才被允许。配置与控制SMBus的工作由下列寄存器中的内容决定。SMB0STA。SMBus状态寄存器保持着代表SMBus当前状态的8位状态代码。只有在SI位被AN013-1.0MAR015AN013—用SMBus实现串行通信置‘1’时SMB0STA才有意义。共有28种可能的状态,所有的状态都有一个唯一的代码(代码是8的整数倍)。永远不要对SMB0STA写入。第12页中的表1给出了这28种状态和它们的说明。SMB0CN。SMBus控制寄存器用于允许SMBus总线并操纵可能的SMBus状态。该寄存器包含起始和停止控制以及中断、应答和超时控制。一次传输过程是通过将STA位置1来启动的。SMBus硬件将等待到总线空闲后发送一个起始条件。注意:STA不是由硬件来清除的。用户必须用软件来清除STA,以避免产生不希望的重复起始条件。一次传输过程是通过将STO位置1来中止的。在主方式,置位STO将导致产生一个停止条件。如果在STO置‘1’时STA也被置‘1’,则在起始条件后会跟随一个停止条件。在从方式,置位STO会导致硬件产生象接收到一个停止条件那样的动作,尽管实际上发送没有停止条件。当进入到28种可能状态中的任何一个(空闲状态除外)时,SI位被置‘1’。注意:在SI位被置‘1’期间,SCL保持低电平。这意味着在SI被清除之前总线将停止工作,使主器件与从器件同步。AA位决定了在应答期间返回的应答类型。如果AA=1,将发送一个ACK;如果AA=0,将发送一个NACK。这意味着只有在AA为被置‘1’时器件才能应答它的从地址。SCL高电平和低电平超时检测允许是通过分别将FTE和TOE位置‘1’来实
本文标题:技能培训专题 C8051F MCU 应用笔记 2
链接地址:https://www.777doc.com/doc-7911685 .html