I2C总线原理及应用实,i2c总线的应用场合
本作品内容为I2C总线原理及应用实,格式为 docx ,大小 481979 KB ,页数为 24页
('I2C总线原理及应用实例I2C(Inter-IntegratedCircuit,内置集成电路总线)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。I2C总线产生于在80年代,最初为音频和视频设备开发,如今主要在服务器管理中使用,其中包括单个组件状态的通信。例如管理员可对各个组件进行查询,以管理系统的配置或掌握组件的功能状态,如电源和系统风扇。可随时监控内存、硬盘、网络、系统温度等多个参数,增加了系统的安全性,方便了管理。1I2C总线特点I2C总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数量,降低了互联成本。总线的长度可高达25英尺,并且能够以10Kbps的最大传输速率支持40个组件。I2C总线的另一个优点是,它支持多主控(multimastering),其中任何能够进行发送和接收的设备都可以成为主总线。一个主控能够控制信号的传输和时钟频率。当然,在任何时间点上只能有一个主控。2I2C总线工作原理总线的构成及信号类型I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据。在CPU与被控IC之间、IC与IC之间进行双向传送,最高传送速率100kbps。各种被控制电路均并联在这条总线上,但就像电话机一样只有拨通各自的号码才能工作,所以每个电路和模块都有唯一的地址,在信息的传输过程中,I2C总线上并接的每一模块电路既是主控器(或被控器),又是发送器(或接收器),这取决于它所要完成的功能。CPU发出的控制信号分为地址码和控制量两部分,地址码用来选址,即接通需要控制的电路,确定控制的种类;控制量决定该调整的类别(如对比度、亮度等)及需要调整的量。这样,各控制电路虽然挂在同一条总线上,却彼此独立,互不相关。I2C总线在传送数据过程中共有三种类型信号,它们分别是:开始信号、结束信号和应答信号。开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。结束信号:SCL为高电平时,SDA由低电平向高电平跳变,结束传送数据。应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。目前有很多半导体集成电路上都集成了I2C接口。带有I2C接口的单片机有:CYGNAL的C8051F0XX系列,PHILIPSP87LPC7XX系列,MICROCHIP的PIC16C6XX系列等。很多外围器件如存储器、监控芯片等也提供I2C接口。3总线基本操作I2C规程运用主/从双向通讯。器件发送数据到总线上,则定义为发送器,器件接收数据则定义为接收器。主器件和从器件都可以工作于接收和发送状态。总线必须由主器件(通常为微控制器)控制,主器件产生串行时钟(SCL)控制总线的传输方向,并产生起始和停止条件。SDA线上的数据状态仅在SCL为低电平的期间才能改变,SCL为高电平的期间,SDA状态的改变被用来表示起始和停止条件。参见图1。图1串行总线上的数据传送顺序控制字节在起始条件之后,必须是器件的控制字节,其中高四位为器件类型识别符(不同的芯片类型有不同的定义,EEPROM一般应为1010),接着三位为片选,最后一位为读写位,当为1时为读操作,为0时为写操作。如图2所示。图2控制字节配置写操作写操作分为字节写和页面写两种操作,对于页面写根据芯片的一次装载的字节不同有所不同。关于页面写的地址、应答和数据传送的时序参见图3。图3页面写读操作读操作有三种基本操作:当前地址读、随机读和顺序读。图4给出的是顺序读的时序图。应当注意的是:最后一个读操作的第9个时钟周期不是“不关心”。为了结束读操作,主机必须在第9个周期间发出停止条件或者在第9个时钟周期内保持SDA为高电平、然后发出停止条件。图4顺序读4实例:X24C04与MCS-51单片机软硬件的实现X24C04是XICOR公司的CMOS4096位串行EEPROM,内部组织成512×8位。16字节页面写。与MCS-51单片机接口如图5所示。由于SDA是漏极开路输出,且可以与任何数目的漏极开路或集电极开路输出“线或”(wire-Ored)连接。上拉电阻的选择可参考X24C04的数据手册。下面是通过I2C接口对X24C04进行单字节写操作的例程。流程图及源程序如下:图5X24C04与51单片机接口;名称:BSENT;描述:写字节;功能:写一个字节;调用程序:无;输入参数:A;输出参数:无BSEND:MOVR2,#08H;1字节8位SENDA:CLR;RLCA;左移一位MOV,C;写一位SETBDJNZR2,SENDA;写完8个字节?CLR;应答信号SETBSETBRET图6流程图5结束语在I2C总线的应用中应注意的事项总结为以下几点:1)严格按照时序图的要求进行操作,2)若与口线上带内部上拉电阻的单片机接口连接,可以不外加上拉电阻。3)程序中为配合相应的传输速率,在对口线操作的指令后可用NOP指令加一定的延时。4)为了减少意外的干扰信号将EEPROM内的数据改写可用外部写保护引脚(如果有),或者在EEPROM内部没有用的空间写入标志字,每次上电时或复位时做一次检测,判断EEPROM是否被意外改写。++++++++++++++++++++++++++++++++++++++基于DSP与CPLD的I2C总线接口的设计与实现上传者:阅读次数:86摘要:介绍了一种利用CPLD完成DSP芯片I2C总线接口的设计和实现方案,重点表达了I2C核的设计思想。关键词:PWMSG3524操纵器带有I2C总线接口的器件能够十分方便地将一个或多个单片机及外围器件组成单片机系统。尽管这种总线结构没有并行总线那样大的吞吐能力,但由于连接线和连接引脚少,因此其组成的系统价钱低、器件间总线连接简单、结构紧凑,而且在总线上增加器件不阻碍系统的正常工作,系统修改和可扩展性好。即便有不同时钟速度的器件连接到总线上,也能很方便地确信总线的时钟。此刻,为了提高系统的数据处置精度和处置速度,在家用电器、通信设备及各类电子产品中已普遍应用DSP芯片。但大多数的尚未提供I2C总线接口,本文将介绍一种基于CPLD的已实现的高速DSP的I2C总线接口方案。图1I2C总线接口电路结构点击放大1I2C通信协议I2C总线是一种用于IC器件之间的二线制总线。它通过SDA(串行数据线)及SCL(串行同步时钟线)两根线在连到总线上的器件之间传送信息,通过软件寻址实现片选,减少了器件片选线的连接。CPU不仅能通过指令将某个功能单元电路挂靠或摘离总线,还可对该单元的工作状况进行检测,从而实现对硬件系统的扩展与操纵。I2C总线接口电路结构如图1所示,I2C总线时序图如图2所示。I2C总线依照器件的功能通过软件程序使其可工作于发送(主)或接收(从)方式。总线上主和从(即发送和接收)的关系不是一成不变的,而是取决于数据传送的方向。SDA和SCL均为双向I/O线,通过上拉电阻接正电源。当总线空闲时,两根线都是高电平。连接总线的器件的输出级必需是集电极或漏极开路的,以具有线“与”功能。I2C总线的数据传送速度在标准工作方式下为100kbit/s,在快速方式下,最高传送速度可达400kbit/s。在数据传送进程中,必需确认数据传送的开始和终止信号(也称启动和停止信号)。那时钟线SCL为高电平常,数据线SDA由高电平跳变成低电平那么概念为“开始”信号;当SCL为高电平常,SDA由低电平跳变成高电平那么概念为“终止”信号。开始和终止信号都由主器件产生。在开始信号以后,总线即被以为处于忙状态;在终止信号以后的一段时刻内,总线被以为是空闲状态。在I2C总线开始信号后,依次送出器件地址和数据,I2C总线上每次传送的数据字节数不限,但每一个字节必需为8位,而且每一个传送的字节后面必需跟一个认可位(第9位),也叫应答位(ACK)。从器件的响应信号终止后,SDA线返回高电平,进入下一个传送周期。2设计方案本文以DSP芯片ADSP21992与时钟芯片PCF8583的操纵接口为例,说明基于CPLD的I2C总线接口设计方案。ADSP21992是2003年最新推出的160MIPS、带CAN通信接口的适合于高精度工业操纵和信号处置的高性能DSP芯片。它带有48K片内RAM、SPORT通信接口、SPI通信接口、8通道14位A/D转换器和PWM等。PCF8583是一款带有256字节静态CMOSRAM的时钟/日历芯片。地址和数据严格依照双向双线制I2C总线协议传输。内置地址寄放器在每次读/写后自动递增。系统结构设计系统的大体功能是通过CPLD的I2C总线接口完成ADSP21992(主控芯片)与PCF8583的数据互换。系统框图如图3所示。系统要紧由两个部份组成:一是DSP与CPLD的接口;另一是I2C核。为了能在DSP指定的时刻读/写PCF8583的数据,利用DSP的读写信号、同步时钟和最高位地址操纵数据的传输。最高位地址作为操纵信号是因为DSP的I/O口比较少,必需优先供给给其它外设,因此用它来产生DSP提供给I2C核的片选信号。而DSP的地址总线位数较多,最高位一样利用不到,如此正好能够充分利用资源。I2C核I2C核原理示用意如图4所示。整个I2C核由操纵模块和I/O模块组成。其中,操纵模块包括操纵信号发生部份和时钟开关,I/O模块包括数据缓存和同步时钟缓存。当DSP的最高地址位显现一个有效信号时,便会使I2C核内的触发器产生一个全局使能信号EN?熏它将会启动时钟、计数器和其它操纵信号,但数据可不能显现互换。假设是此刻DSP的读/写同步产生,那么会启动相应的读/写进程,进行数据传输。I2C核的关键技术是:①用计数器和全局使能信号EN配合触发进程。由于I2C核的片选信号EN是由触发产生的,不能象电平信号一样由DSP的I/O操纵,因此只能通过精准的计数器按时和读/写使能信号一路判别操纵。读/写使能信号WR_EN/RD_EN也象EN那样由触发产生,因此也要用一样的方式判别。②同步时钟的产生。从图2中能够看到,数据在同步时钟的高电平脉冲时必需维持稳固,假设是此刻发生转变将会被视为一个操纵信号,而通信也会被中断。因此,同步时钟的高电平脉冲必然要在有效数据的中间显现。而所需的操纵信号必需在同步时钟正脉冲的时候显现。③对数据总线进行三态设置。因为SDA和DSP_DATA都是双向数据线,在写SDA和DSP_DATA的进程中必需设置高阻态,不然会显现数据线状态“不确信”。图5I2C核工作时序图点击放大DSP与CPLD的接口模块依照DSP的时序,DSP与CPLD之间必需依照两边(ADSP21992和PCF8583)的时序制定一个握手协议。当读程序时,由于I2C总线协议只能支持最高400kbit/s的传输速度,而DSP的同步时钟可达几十兆赫。因此,DSP必需等到I2C核把PCF8583的数据读到CPLD后才能取得正确的数据(那个地址能够通过设立一个忙标志来实现)。而当写程序时,为了节约CPLD的资源(数据缓存专门占用资源),能够设置DSP按时输出数据给I2C核,让I2C核的一次只送一个数据。硬件设计此I2C核可外挂多个带有I2C总线接口的芯片,能够通过发送不同的器件地址来选择。SDA和SCL线必需接上拉电阻。另外,同步时钟不能太高,不然会阻碍数据传输的稳固性。时序(1)I2C核时序以写为例,I2C核时序如图5所示。(2)PCF8583时序PCF8583的数据是8bit一个存储单元,共256个字节,因此只需要8位地址,而且器件本身有两种寻址方式:一种是从指定地址开始递增寻址,另一种是从首地址开始递增寻址。两种寻址方式的时序是不一样的,如图6所示。图6PCF8583时序图点击放大3实现方式本系统是选用ALTERA公司CPLD7000S系列EPM7128S芯片,并基于MAXPLUSII开发的。I2C核采纳VHDL语言编写,利用SYNPLIFY编译、综合,用AHDL绘成图表,用MAXPLUSII仿真和布局。DSP采纳VISUALDSP++编写。最后别离通过JTAG口下载到芯片并联机调试成功。随着DSP芯片和I2C通信方式的普遍应用,它们之间的接口问题必需取得解决。本文提出的解决方案具有超级好的可移植性和产品开发能力。本系统既能够作为一个单独的系统运行,又能够作为一个通信模块植入一个大系统中,而其中的I2C核又是一个可移植IP核。利用CPLD的逻辑可编程性,还能够在其剩下的资源中再开发所需的逻辑器件,既能降低硬件本钱又能大大减小系统主板的面积,使电路的设计更具灵活性。++++++++++++++++++++++++++++++++++++++&id=9670新一代串行接口――I2C总线陈志浩I2C总线是一种用于IC器件之间连接的二线制总线。它通过SDA(串行数据线)及SCL(串行时钟线)两根线在连到总线上的器件之间传送信息,并依照地址识别每一个器件:不管是单片机、存储器、LCD驱动器仍是键盘接口。1.I2C总线的大体结构采纳I2C总线标准的单片机或IC器件,其内部不仅有I2C接口电路,而且将内部各单元电路按功能划分为假设干相对独立的模块,通过软件寻址实现片选,减少了器件片选线的连接。CPU不仅能通过指令将某个功能单元电路挂靠或摘离总线,还可对该单元的工作状况进行检测,从而实现对硬件系统的既简单又灵活的扩展与操纵。I2C总线接口电路结构如图1所示。2.双向传输的接口特性传统的单片机串行接口的发送和接收一样都各用一条线,如MCS51系列的TXD和RXD,而I2C总线那么依照器件的功能通过软件程序使其可工作于发送或接收方式。当某个器件向总线上发送信息时,它确实是发送器(也叫主器件),而当其从总线上接收信息时,又成为接收器(也叫从器件)。主器件用于启动总线上传送数据并产生时钟以开放传送的器件,此刻任何被寻址的器件均被以为是从器件。I2C总线的操纵完全由挂接在总线上的主器件送出的地址和数据决定。在总线上,既没有中心机,也没有优先机。总线上主和从(即发送和接收)的关系不是一成不变的,而是取决于此时数据传送的方向。SDA和SCL均为双向I/O线,通过上拉电阻接正电源。当总线空闲时,两根线都是高电平。连接总线的器件的输出级必须是集电极或漏极开路,以具有线“与”功能。I2C总线的数据传送速度在标准工作方式下为100kbit/s,在快速方式下,最高传送速度可达400kbit/s。3.I2C总线上的时钟信号在I2C总线上传送信息时的时钟同步信号是由挂接在SCL时钟线上的所有器件的逻辑“与”完成的。SCL线上由高电平到低电平的跳变将阻碍到这些器件,一旦某个器件的时钟信号下跳为低电平,将使SCL线一直维持低电平,使SCL线上的所有器件开始低电平期。此刻,低电平周期短的器件的时钟由低至高的跳变并非能阻碍SCL线的状态,于是这些器件将进入高电平等待的状态。当所有器件的时钟信号都上跳为高电平时,低电平期结束,SCL线被释放返回高电平,即所有的器件都同时开始它们的高电平期。其后,第一个结束高电平期的器件又将SCL线拉成低电平。这样就在SCL线上产生一个同步时钟。可见,时钟低电平时间由时钟低电平期最长的器件确定,而时钟高电平时间由时钟高电平期最短的器件确定。4.数据的传送在数据传送进程中,必需确认数据传送的开始和终止。在I2C总线技术标准中,开始和终止信号(也称启动和停止信号)的概念如图2所示。那时钟线SCL为高电平常,数据线SDA由高电平跳变成低电平概念为“开始”信号;当SCL线为高电平常,SDA线发生低电平到高电平的跳变成“终止”信号。开始和终止信号都是由主器件产生。在开始信号以后,总线即被以为处于忙状态;在终止信号以后的一段时刻内,总线被以为是空闲的。I2C总线的数据传送格式是:在I2C总线开始信号后,送出的第一个字节数据是用来选择从器件地址的,其中前7位为地址码,第8位为方向位(R/W)。方向位为“0”表示发送,即主器件把信息写到所选择的从器件;方向位为“1”表示主器件将从从器件读信息。开始信号后,系统中的各个器件将自己的地址和主器件送到总线上的地址进行比较,假设是与主器件发送到总线上的地址一致,那么该器件即为被主器件寻址的器件,其接收信息仍是发送信息那么由第8位(R/W)确信。在I2C总线上每次传送的数据字节数不限,但每一个字节必需为8位,而且每一个传送的字节后面必需跟一个认可位(第9位),也叫应答位(ACK)。数据的传送进程如图3所示。每次都是先传最高位,通常从器件在接收到每一个字节后都会作出响应,即释放SCL线返回高电平,预备接收下一个数据字节,主器件可继续传送。假设是从器件正在处置一个实时事件而不能接收数据时,(例如正在处置一个内部中断,在那个中断处置完之前就不能接收I2C总线上的数据字节)能够使时钟SCL线维持低电平,从器件必需使SDA维持高电平,此刻主器件产生1个终止信号,使传送异样终止,迫使主器件处于等待状态。当从器件处置完毕时将释放SCL线,主器件继续传送。当主器件发送完一个字节的数据后,接着发出对应于SCL线上的一个时钟(ACK)认可位,在此刻钟内主器件释放SDA线,一个字节传送终止,而从器件的响应信号将SDA线拉成低电平,使SDA在该时钟的高电平期间为稳固的低电平。从器件的响应信号终止后,SDA线返回高电平,进入下一个传送周期。I2C总线还具有广播呼唤地址用于寻址总线上所有器件的功能。假设一个器件不需要广播呼唤寻址中所提供的任何数据,那么能够忽略该地址不作响应。假设是该器件需要广播呼唤寻址中提供的数据,那么应付地址作出响应,其表现为一个接收器。5.总线竞争的仲裁总线上可能挂接有多个器件,有时会发生两个或多个主器件同时想占用总线的情形。例如,多单片机系统中,可能在某一时刻有两个单片机要同时向总线发送数据,这种情形叫做总线竞争。I2C总线具有多主控能力,能够对发生在SDA线上的总线竞争进行仲裁,其仲裁原那么是如此的:当多个主器件同时想占用总线时,假设是某个主器件发送高电平,而另一个主器件发送低电平,那么发送电平与此刻SDA总线电平不符的那个器件将自动关闭其输出级。总线竞争的仲裁是在两个层次上进行的。第一是地址位的比较,假设是主器件寻址同一个从器件,那么进入数据位的比较,从而确保了竞争仲裁的靠得住性。由于是利用I2C总线上的信息进行仲裁,因此可不能造成信息的丢失。6.I2C总线接口器件目前在视频处置、移动通信等领域采纳I2C总线接口器件已经比较普遍。另外,通用的I2C总线接口器件,如带I2C总线的单片机、RAM、ROM、A/D、D/A、LCD驱动器等器件,也愈来愈多地应用于运算机及自动操纵系统中。下面以目前在单片机系统中常常利用的带I2C接口的EEPROM芯片24LC01B为例,介绍I2C接口器件的大体应用。24LC01B是内含128×8位低功耗CMOS的EEPROM,具有工作电压宽(~)、擦写次数多(大于10000次)、写入速度快(小于10ms)等特点。图4为24LC01B的引脚图。图中A0、A1、A2是三条地址线,用于确定芯片的硬件地址。VDD和VSS分别为正、负电源。SDA为串行数据输入/输出,数据通过这条双向I2C总线串行传送。SCL为串行时钟输入线。TEST为速度测试输出端,可接至VSS、VDD或维持开路状态。24LC01B中带有片内地址寄放器。每写入或读出一个数据字节后,该地址寄放器自动加1,以实现对下一个存储单元的读写。所有字节均以单一操作方式读取。为降低总的写入时刻,一次操作可写入多达8个字节的数据。图5是24LC01B在M51系列单片机中的一种应用实例,这里是利用8031的和分别作为24LC01B的串行时钟输入和串行数据输入/输出,TEST端在这里没有使用,将其接地(VSS)。因系统中只用了这一个EEPROM芯片,故A0~A2接地。只要和口串行时钟和数据符合前面介绍的I2C总线的技术标准,即可实现对24LC01B的读写。带有I2C总线接口的器件可十分方便地用来将一个或多个单片机及外围器件组成单片机系统。尽管这种总线结构没有并行总线那样大的吞吐能力,但由于连接线和连接引脚少,因此其组成的系统价钱低,器件间总线简单,结构紧凑,而且在总线上增加器件不阻碍系统的正常工作,系统修改和可扩展性好。即便有不同时钟速度的器件连接到总线上,也能很方便地确信总线的时钟。目前世界上采用的I2C总线有两个标准,它们别离是由荷兰飞利浦公司和日本索尼公司提出的。此刻普遍采纳的是飞利浦公司的I2C总线技术标准,它已成为被电子行业认可的总线标准。采纳I2C技术的单片机和外围器件已普遍应用于家用电器、通信设备及各类电子产品中,而且应用范围将会愈来愈广。?+++++++++++++++++++++++++++++++++++++++++++总线驱动在嵌入式系统中的两种实现I2C总线(Inter-ICBus)是一种通用的串行总线,是用于IC器件之间连接的二线制总线。他通过串行数据线(SerialDataLines,SDL)及串行时钟线(SerialClockLine,SCL)两线在连接到总线上的器件之间传送信息,并依照地址识别每一个器件。1引言一个或多个微操纵器和外围器件能够通过I2C总线接口超级方便的连接在一路组成系统。这种总线结构的连线和连接引脚少,器件间总线简单。结构紧凑,因此其组成系统的本钱较低;而且在总线上增加器件可不能阻碍系统的正常工作,所有的I。C器件共用一套总线,因此其系统修改和可扩展性好。即便有不同时钟速度的器件连接到总线上,时刻同步机制也能够很方便地确信总线时钟,因此在系统中取得了普遍的应用。2I2C总线原理2.1I2C工作原理I2C总线是由数据线SDA和时钟线SCL组成的串行总线,可发送和接收数据。每一个连接到总线的器件都能够通过惟一的地址与主机通信,主性能够作为主机发送器或主机接收器。他是一个真正的多主机总线,假设是两个或更多主机同时初始化,数据传输能够通过冲突检测和仲裁幸免数据被破坏。串行的8位双向数据传输位速度在标准模式下可达100kb/s,快速模式下可达400kb/s,高速模式下可达Mb/s。连接到相同总线的IC数量只受到总线的最大电容400pF限制。I2C总线在传送数据进程中共有3种特殊的电平变换情形,他们别离是:起始(start)、停止(stop)和响应(aek)。当SCL为高电平常,SDA由高电平向低电平跳变,那个表示起始条件;当SCL是高电平常,SDA线由低电平向高电平跳变表示停止条件。起始和停止条件一样由主机产生,总线在起始条件后被以为处于忙的状态,在停止条件的某段时刻后总线被以为再次处于空闲状态。响应信号是指从机在接收到8b数据后,向主机发出特定的低电平脉冲,表示已收到数据。在响应的时钟脉冲期间,从机必需将SDA线拉低使他在那个时钟脉冲的高电平期间维持稳固的低电平,主机收到应答信号后,按如实际情形做出是不是继续传递信号的判定。假设未收到应答信号,那么判定为从机显现故障。操作时序I2C总线运用主/从双向通信。主机和从机都能够工作于接收和发送状态。总线必需由主机(一样为微操纵器)操纵,主机产生串行时钟(SCL)控制总线的传输方向,并产生起始和停止条件。SDA线上的数据状态仅在SCL为低电平的期间才能改变,SCL为高电平的期间,SDA状态的改变被用来表示起始和停止条件。具体时序见图1。3系统中的I2C驱动的两种实现系统自带I2C寄放器的实现下面以S3C4510B为例,给出基于寄放器方式的I2C驱动实现。S3C4510B内含一个I2C总线主控器,可方便地与各类带有I2C接口的器件相连。I2C总线操纵器有3个特殊功能寄放器:一个操纵状态寄放器(I2CON),一个预分频寄放器(I2CPS)和一个移位缓冲寄放器(I2CBUF)。通过配置这些寄放器,可实现正确的I2C数据传输时序。下面别离给出读、写实现的实例。读操作:通过对操纵状态寄放器(I2CC()N)写入OxlO发送启动码初始化串行I2C总线,然后总线操纵器发送7位的从设备地址并通过移位缓冲寄放器发送读/写操纵位,接收器那么在主控器的SCL脉冲期间通过将SDA线从高电平下拉到低电平作为应答信号。写数据的操作先设置操纵状态寄放器的BF位(0x01),然后写入数据到移位缓冲寄放器。移位缓冲寄放器不管是被读仍是写,BF位均会自动清零。假设要进行持续的读/写操作,必需设置操纵状态寄放器的ACK位(0x08)。读数据的操作在设置操纵状态寄放器的BF位以后,能够进行读数据的操作,当读/写完最后一个字节时,可对ACK位进行复位通知发送器/接收器读数据操作终止。在读/写操作完成以后,可通过对I2CCON写入0x20生成终止码。以GPIO端口模拟I2C实现此方式是直接用S3C4510的GPIO(GeneralPurposeInput/Output)引脚模拟I2C总线的时序来实现数据传输。S3C4510B提供了18个可编程的通用I/O端口,用户可将每一个端口配置为输入模式、输出模式或特殊功能模式,由片内的特殊功能寄放器IOPMOD和IOPCON操纵。操纵I/O口的特殊功能寄放器一共有3个:IOP-MOD,I0PCON和IOPDATA。I/O口模式寄放器(IOP-MOD)用于配置P17~P0的输入输出状态;I/O口操纵寄放器IOPCON用于配置端口P8~P17的特殊功能,当这些端口用作特殊功能(如外部中断请求、外部中断请求应答、外部DMA请求或应答、按时器溢出)时,其工作模式由10PCON寄放器操纵,而再也不由IOPMOD寄放器;I/O口数据寄放器(IOPDATA)当配置为输入模式时,读取I/O口数据寄放器IOPDATA的每一名对应输入状态,当配置为输出模式时,写每一名对应输出状态。位[17:O]对应于18个I/0引脚P17~P0。下面用GPIO的pin[O][1]脚进行I2C模拟,其中低位为SDA,高位为SCL。第一给出一些便于操作的宏概念:应用实例为外挂PCF8563实现实不时钟操纵。PCF8563是PHILIPS公司生产的具有I2C接口的低功耗CM()S实不时钟/日历芯片。其最大总线速度为400kb/s,每次读写数据后,其内嵌的字地址寄放器器会自动产生增量。下面用模拟实现PCF8563的I2C实不时钟芯片的操作,有字节写/读两种状态,程序中从地址的读地址为0A3H,写地址为0A2H。第一使能I2C总线,然后对I2C总线进行开始操作,就绪以后,依次写人器件地址(即0xA2),写入寄放器地址,再写人所设寄放器值。操纵/状态寄放器1为0,操纵/状态寄放器2为0,秒寄放器为30,分钟寄放器45,小时寄放器为17,日寄放器为20,礼拜寄放器为0,月/世纪寄放器为88,年寄放器为6(即2006年8月20日17点45分30秒)。当程序运行一段时刻(15分钟)后,依次读取寄放器,取得时刻为2006年8月20日18点OO分30秒。4总结本文给出了两种I2C驱动的实现方式。前者直接利用主机端自带的I2C总线操纵器,通过配置一系列特殊寄放器实现I2C总线传输。这种方式适用于一些本身包括I2C总线操纵器的芯片,实现起来简单方便。后者那么适用于主机端没有I2C操纵器的情形。此刻主机端只要有GPIO端口,就可利用其实现同样的功能。在基于加μC的嵌入式视频监控产品中,同时将这两种方式做了具体的运用。其一的例如确实是通过模拟的I2C总线,挂接PCF8563实不时钟芯片,并取得专门好的实时成效。+++++++++++++++++++++++++++++++++一.简介I2C(Inter-IntegratedCircuit)总线是一种由Philips公司开发的两线式串行总线,用于连接微操纵器及其外围设备。I2C总线产生于在80年代,最初为音频和视频设备开发。由于其简单性,此刻方泛用于微操纵器与各类功能模块的连接,能够说是学单片机的人,入门以后,必然要涉及到的。I2C总线事实上已经成为一个国际标准在超过100种不同的IC上实现,而且取得超过50家公司的许可,正因为其简单和应用普遍,因此其功能也越来不知足人们的要求,其速度也从原先的100Kbit/S,增加了快速模式,其速度达400Kbit/S,再后来也增加了高速模式,其速度更达S。二.功能和特点I2C总线是一种用于IC器件之间连接的双向二线制总线,所谓总线它上面能够挂多少器件,而且通个两根线连接,占用空间超级的小,总线的长度可高达25英尺,而且能够以10Kbps的最大传输速度支持40个组件。它的另一优势是多主控,只要能够进行接收和发送的设备都能够成为主操纵器,固然多个主控不能同一时刻工作。I2C总线有两根信号线,一根为SDA(数据线),一根为SCL(时钟线)。任何时候时钟信号都是由主控器件产生。I2C总线在传送数据的进程中,要紧有三种操纵信号:起始信号,结不信号,应答信号起始信号:当SCL为高电平常,SDA由高电平转为低电平常,开始传送数据终止信号:当SCL为高电平常,SDA由低电平转为高电平常,终止数据传送应答信号:接收数据的器件在接收到8bit数据后,向发送数据的器件发出低电平信号,表示已收到数据。那个信号能够是主控器件发出,也能够是从动器件发出。总之由接收数据的器件发出。这些信号中,起始信号是必需的,终止信号和应答信号,都能够不要。三.大体操作下面咱们以ATMEL公司的AT24C02来介绍I2C的大体操作AT24C02是美国ATMEL公司的低功耗CMOS串行EEPROM,它是内含256×8bit存储空间,具有工作电压宽(~)、擦写次数多(大于10000次)、写入速度快(小于10ms)等特点。他在系统中始终为从动器件。对AT24C02的操作要紧有:字节读,字节写,页面读,页面写第一发送起始信号,如以下图,起始信号后必需是操纵字,操纵字格式如下,其中高四位为器件类型识别符(不同的芯片类型有不同的概念,EEPROM一样应为1010),接着三位为片选,也确实是三个地址位,最后一名为读写操纵位,当为1(Input)时为读操作,为0(Output)时为写操作。操纵字后确实是相应的操作,读或写,必然不要终止,因为那个操作尚未完成,假设是终止就等于舍弃操作。先来看写操作,写操作分为字节写和页面写两种操作,关于页面写依照芯片的一次装载的字节不同有所不同,AT24C02为8字节,每写一个字节后,地址自动加1。关于页面写的地址、应答和数据传送的时序参见图3,字节写能够看成是只有一个字节的页面写,也确实是写一个数据后停止。注意:写一次需要一按时刻,一样为10ms,要等侍那个操作完成。时序如以下图:说明:关于AT24C02,在操纵字后还必需写入地址,那个地址是以后读写的起始地址。读操作有三种大体操作:当前地址读、随机读和顺序读。三种操作方式类似,只是读的数据个数不同,可持续读8个字节,图4给出的是顺序读的时序图,图中共读了四个数据,需要注意的是当前的地址,假设是不是想要的,能够用写操作,从头写入地址。超级重要的是,每读一个数据后,必需置低SDA,作为应答,不然,只能读一个数据,后面的数据,因为收到不该答信号,AT24C02就会以为犯错,停止操作。专门提示的是,当SCL为低电平常,数据是可变的,因些只有SCL为高电平常,才能读数。(相关时序,请看例程序的,读功能函数)四.例程序(51汇编,测试单片机为AT89C51,12M晶振)电路连接如图5,其中A0,A1,A2为地址线,本例中全数接地,因此全数为0。由于SCL和SDA为漏极开路输出,因此在使历时,需加上拉电阻。程序功是将数据66H写入AT24C02地址单元00,数据88H写01单元,再将00单元读出放入单片机的40H单元,01单元读出放入41H单元,再将其别离写入AT24C02的02和03地址单元,最后将00,02读出比较,01与03比较,假设是相等,LED发光。以下是程序。可将本程序复制,编译后,烧录后测试。(程序看似复杂,其实很多功能是重复的)MCS51单片机汇编程序SCLEQU;时钟SDAEQU;数据LEDEQU;操作成功指示,低电平点亮ORG0X0000LJMPMAIN;启动功能函数,NOP用于知足AT24C02的速度要求START:CLRSCL;先将SCL置低才改变SDA,以幸免误操作NOPNOPSETBSDANOPNOPSETBSCLNOPNOPCLRSDANOPNOPRET;终止功能函数STOP:CLRSCL;先将SCL置低才改变SDA,以幸免误操作NOPNOPCLRSDANOPNOPSETBSCLNOPNOPSETBSDANOPNOPRET;应答函数ACK:CLRSCL;先将SCL置低才改变SDA,以幸免误操作NOPNOPCLRSDA;发低电平应答NOPNOPSETBSCLNOPNOPRET;写一个字节;R2为要写的数据,R3为每字节的位数,这儿为8位;返回时C为应答信号,能够不睬会那个值WRITE:MOVR3,#8MOVA,R2WRLOOP:CLRSCLRLCANOPMOVSDA,CNOPNOPSETBSCLNOPNOPDJNZR3,WRLOOPCLRSCL;以下处置AT24C02的应答信号NOPNOPSETBSDA;置高SDA,用作输入,假设是AT24C02拉低,表示正确NOPNOPSETBSCLNOPNOPMOVC,SDA;读取应答信号RET;读一个字节;返回时R2为读得的数READ:MOVR3,#8RDLOOP:CLRSCLNOPNOPSETBSDA;拉高SDA,用作输入NOPNOPSETBSCLNOPNOPMOVC,SDARLCADJNZR3,RDLOOPMOVR2,ARET;延时,用以保证写操作完成,写地址信号不用延时DELAY:MOV0X31,#20AA:MOV0X32,#200DJNZ0X32,$DJNZ0X31,AARETMAIN:ACALLSTART;启动MOVR2,#0XA0;将操纵字“10100000”传到R2,最后一名表示写ACALLWRITE;挪用写函数MOVR2,#0X00;设置要写的地址ACALLWRITEMOVR2,#0X66;写入第一个字节,66H,写入到00单元ACALLWRITEMOVR2,#0X88;写入第一个字节,88H,写入到01单元ACALLWRITEACALLSTOP;停止操作ACALLDELAY;等待写完成ACALLSTART;启动MOVR2,#0XA0;写操纵字ACALLWRITEMOVR2,#00;设置要读地址ACALLWRITEACALLSTARTMOVR2,#0XA1;将操纵字“10100001”传到R2,最后一名表示读ACALLWRITE;写入操纵字ACALLREAD;挪用读命令ACALLACK;应答MOV0X40,R2;将读得的数据传到40HACALLREAD;读下一名,将读得的数据传到41HACALLACKMOV0X41,R2ACALLSTOP;停止读操作ACALLSTARTMOVR2,#0XA0;写操纵字,表示以下这写操作ACALLWRITEMOVR2,#0X02;设置地址ACALLWRITEMOVR2,0X40;将上面读得的数写入到02单元ACALLWRITEMOVR2,0X41;将上面读得的数写入到03单元ACALLWRITEACALLSTOP;停止操作ACALLDELAY;等待写完成ACALLSTART;启动MOVR2,#0XA0;写入操纵字,表示以下为写操作ACALLWRITEMOVR2,#00;写入读的起始地址ACALLWRITEACALLSTART;启动MOVR2,#0XA1;写入操纵字,表示以下为读操作ACALLWRITEACALLREADACALLACKMOV0X40,R2;以下持续读出四个字节ACALLREADACALLACKMOV0X41,R2ACALLREADACALLACKMOV0X42,R2ACALLREADACALLACKMOV0X43,R2ACALLSTOPMOVA,0X42;以下为比较读出结果与写入是不是相等CJNEA,#0X66,ENDALLMOVA,0X43CJNEA,#0X88,ENDALLCLRLEDENDALL:SJMP$END',)
提供I2C总线原理及应用实,i2c总线的应用场合会员下载,编号:1700773952,格式为 docx,文件大小为24页,请使用软件:wps,office word 进行编辑,PPT模板中文字,图片,动画效果均可修改,PPT模板下载后图片无水印,更多精品PPT素材下载尽在某某PPT网。所有作品均是用户自行上传分享并拥有版权或使用权,仅供网友学习交流,未经上传用户书面授权,请勿作他用。若您的权利被侵害,请联系963098962@qq.com进行删除处理。