I2C总线范文(精选8篇)
I2C总线 第1篇
I2C总线是Philips公司推出的一种两制串行数据传输总线,由串行时钟线SCL和串行数据线SDA组成,SCL线传送时钟信号,SDA线传送数据地址信号,实现全双工同步数据传送。在I2C总线中,器件地址采用硬件设置方法 ,通过软件寻址,不需要使用器件的片选线寻址,从而可以更简单的扩展硬件系统。I2C总线具有严格的规范,随着I2C总线技术的成熟,具有I2C总线接口的外围器件越来越多,它已经广泛应用于家电、智能仪器仪表和工业测控等领域。下面就I2C总线技术及其C语言模拟编程进行探讨。
2 I2C总线技术
2.1 I2C总线
I2C总线通过2根线(SDA,SCL)即可实现完善的全双工同步数据传送,I2C总线有单主模式和多主模式两种模式。不过,多主模式(即系统中有多个I2C总线接口的单片机)可能会出现多主竞争的复杂状态,所以在单片机应用系统中常用单主模式。I2C接口芯片是把I2C协议植入芯片的I/O接口,使用时直接接到总线上,这一特点极大的方便了用户设计应用系统。是否选中I2C接口芯片不需要片选信号,而是由主器件发出的I2C从地址决定。而且I2C器件从地址已经由I2C总线委员会实行统一编制,器件出厂时就已给定。例如:I2C总线的EEPROM AT24CXX的器件地址为1010,点阵式LCD驱动器PCF8578/79的器件地址为0111。不带I2C总线接口的单片机扩展I2C接口芯片电路示意图如图1所示。
2.2 I2C总线的寻址方式
I2C总线上连接的所有外围器件都称为总线上的节点,其中由单片机或MCU组成的节点称为主节点,其余节点称为从节点。当I2C工作时,任何一个主节点都能实现总线控制,当某个主节点控制了总线,它就成了主控制器。系统中的所有节点都采用器件地址或引脚地址的编址方法。主控制器采用纯软件寻址方法对任何节点进行寻址,若有地址冲突可改变地址引脚的电平设置来解决。I2C总线规定起始信号后的第一个字节为寻址字节,规定了器件地址、器件的引脚地址及数据的传送方向,寻址字节SLA的格式如表1所示。
器件地址(DA3,DA2,DA1,DA0)是器件固有的地址编码,由器件出厂时固化好,不同的器件其器件地址不同。
引脚地址(A2,A1,A0)是用户在搭建电路时器件的地址引脚A2、A1、A0通过接正电源或地而形成地址数据。
数据方向位()规定了总线上的主节点对从节点的数据传送方向, 当它为1时主节点读取从节点的数据,当它为0时向从节点写数据。
2.3 I2C总线上的信号定义
I2C总线规定了起动信号、停止信号、应答信号、非应答信号以及数据传输的格式。一次完整的数据传输格式如图2所示。I2C总线为同步传输总线,其信号完全与时钟同步。
起动信号:时钟线SCL为高电平,数据线SDA出现由1到0的下降沿,并且SDA的下降沿与SCL的下降沿至少间隔4.7us。
停止信号:当时钟线SCL为高电平时,数据线SDA出现由0到1的上升沿,并且SCL的上升沿与SDA的上升沿至少间隔4.7us。
应答信号:总线上第9个时钟脉冲是应答位。在时钟的高电平期间,相应SDA低电平时为“应答”信号,高电平时为“非应答”信号。
数据变换规定 : 数据传输期间,SCL=1时,SDA上的信号必须保持稳定,只有SCL=0时才允许SDA上的信号发生变化。因此,单片机用应该在SCL=1时读SDA线上的数据,在SCL=0时将数据传送到SDA线上。
数位传输顺序:传送数据以字节为单位,且高位在前,低位在后。当I2C总线启动后, 不限制传送的字节多少,但每传一个字节后,接收方必须回应一个应答位。也就是说每传输一个字节需要9个时钟,前8个对应8个数据位,第9个时钟对应应答信号。
3 I2C总线模拟C语言编程
根据上述分析,假设利用51系列单片机,晶振频率为11.0592MHz,并且I2C总线的SDA、SCL分别接在P1.0、P1.1引脚,即有如下定义:
sbit SDA=P1.0;
sbit SCL=P1.1;
单片机模拟产生启动信号(start)、停止信号(stop)、读应答信号(rdack)、写应答信号(wrack)、写非应答信号(wrnoack)、发送一个字节(sdbyte)、接收一个字节(rcvbyte)的程序如下:
在I 2 C编程时,除了基本的启动、结束、应答、非应答子程序、发送和接收单字节外,还应有应答位检查、发送和接收多字节等子程序。再次不再赘述。
4结束语
I 2 C总线提供了一种完善的集成电路间的串行总线扩展技术,以MCS-51单片机普通I/O接口通过软件编程,模拟I 2 C总线时序,使得单片机外围的接口电路有了更多的选择,如带有I 2 C总线接口的时钟芯片、存储芯片、 D/A转换等。而且其硬件接口简单 , 大大简化了电路设计,同时还可以节省单片机I/O接口资源,应用十分广泛。但是,需要注意的是:由于I 2 C总线为串行扩展总线,所以不适用于实时数据采集等速度要求较高的系统。
摘要:简要介绍了I2C总线及其接口电路,分析了I2C总线的寻址方式和工作时序,通过MS89C51单片机的I/O口线模拟,利用C语言程序对I2C总线的数据传输过程进行了模拟编程。
关键词:I2C总线,单片机,接口,器件地址,串行
参考文献
[1]石宗义.I2C总线时序分析及其模拟[J].太原理工大学学报,2004,35(1):53-55.
[2]赵辉,董德存.I2C总线技术及其应用实例[J].微型电脑应用,2005,21(4):61-62.
[3]李文华.单片机应用技术(C语言版)[M].大连:大连理工大学出版社,2014:225-227.
I2C总线 第2篇
摘要:介绍了一种使用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总线协议传输。内置地址寄存器在每次读/写后自动递增。
2.1系统结构设计
系统的基本功能是通过CPLD的I2C总线接口完成ADSP21992(主控芯片)与PCF8583的数据交换。系统框图如图3所示。
系统主要由两个部分组成:一是DSP与CPLD的接口;另一是I2C核。为了能在DSP指定的时刻读/写PCF8583的数据,使用DSP的读写信号、同步时钟和最高位地址控制数据的传输。最高位地址作为控制信号是因为DSP的I/O口比较少,必须优先供应给其它外设,因此用它来产生DSP提供给I2C核的片选信号。而DSP的地址总线位数较多,最高位一般使用不到,这样正好可以充分利用资源。
2.2I2C核
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核工作时序图
2.3DSP与CPLD的接口模块
根据DSP的时序,DSP与CPLD之间必须根据双方(ADSP21992和PCF8583)的时序制定一个握手协议。当读程序时,由于I2C总线协议只能支持最高400kbit/s的传输速率,而DSP的同步时钟可达几十兆赫。因此,DSP必须等到I2C核把PCF8583的数据读到CPLD后才能获得正确的.数据(这里可以通过设立一个忙标志来实现)。而当写程序时,为了节约CPLD的资源(数据缓存特别占用资源),可以设置DSP定时输出数据给I2C核,让I2C核的一次只送一个数据。
2.4硬件设计
此I2C核可外挂多个带有I2C总线接口的芯片,可以通过发送不同的器件地址来选择。SDA和SCL线必须接上拉电阻。此外,同步时钟不能太高,否则会影响数据传输的稳定性。
2.5时序
(1)I2C核时序
以写为例,I2C核时序如图5所示。
(2)PCF8583时序
PCF8583的数据是8bit一个存储单元,共256个字节,所以只需要8位地址,而且器件本身有两种寻址方式:一种是从指定地址开始递增寻址,另一种是从首地址开始递增寻址。两种寻址方式的时序是不一样的,如图6所示。
图6PCF8583时序图
3实现方法
本系统是选用ALTERA公司CPLD7000S系列EPM7128S芯片,并基于MAXPLUSII开发的。I2C核采用VHDL语言编写,使用SYNPLIFY编译、综合,用AHDL绘成图表,用MAXPLUSII仿真和布局。DSP采用VISUALDSP++2.0编写。最后分别通过JTAG口下载到芯片并联机调试成功。
利用GPIO模拟I2C总线协议 第3篇
1.1 I2C总线介绍
I2C是由Philips公司发明的一种串行数据通信协议。由于其通信方式具有很多优秀的特点, 比如只使用2跟信号线, Serial Clock (简称SCL) 和Serial Data (简称SDA) 。并且采用了总线结构, 一条总线可以连接一主和多从器件或者多主跟多个从器件。
I2C总线结构中有1或多个Mas te r, 可以有1个或多个Slave。一般来说经常使用的是一个Masetr和多个Slave构成。各个Slave设备以可以以7位地址或10位地址区分, 经常使用的是7位地址, 后面再跟1位读写位, 表示读 (=1) 或者写 (=0) , 所以我们有时也可看到8位形式的设备地址。一般来说, 从设备 (s lave) 地址的高4位都在出厂时就确定了, 不同类型的设备, 高4位是绝对不同的。而低3位一般由器件管脚A0, A1, A2的电平来确定。I2C通信的数据传输有着严格并且固定的格式。
1.2 利用普通I/O模拟I2C
I2C总线传输有严格的数据定义, 一个7为地址传输方式的传输过程如下图 (1) 所示:
对于传输过程中的状态对应的电平信号, 分为几种。
1) 无数据:SCL=1, SDA=1;
2) 开始位 (Start) :当SCL=1时, SDA由1向0跳变;
3) 停止位 (Stop) :当SCL=1时, SDA由0向1跳变;
4) 数据位:当SCL由0向1跳变时, 由发送方控制SDA, 此时SDA为有效数据, 不可随意改变SDA, 当SCL保持为0时, SDA上的数据可随意改变;
5) 地址位:定义同数据位, 但只由Mas te r发给Slave;
6) 应答位 (ACK) :当发送方传送完8位时, 发送方释放SDA, 由接收方控制SDA, 且SDA=0;
7) 否应答位 (NACK) :当发送方传送完8位时, 发送方释放SDA, 由接收方控制SDA, 且SDA=1。
一般来说, 上述总线的控制由I2C总线控制器来完成。但由于有些器件具备的I2C接口没有或者很少, 这就需要普通I/O口扮演时钟线和数据线的角色, 由软件模拟I2C协议来完成通信的需求。
2 操作过程及分析
2.1 模拟方法如下
首先定义时钟数据电平宏, 后面可以添加自己的I/O电平函数, 这样便于移植各种系统。
在此需要注意的是:由于I2C传输数据很快, 每bit只需要几个ns就行, 所以延时函数可以采用一个简单的for循环就行了, 不需要采用定时器的方式。
2.2 发送数据
首先编写好发送一个字节的时序。
bool GPIO_Se nd Byte (uns igne d charuc Data)
{
uns igne d chari;
uns igne d char Mas k[]= {0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01};
for (i= 0;i< 8;i+ +)
{
GPIO_SCL_LOW;/* 拉低时钟 */
if (uc Data&Mas k[i]) /* 发送数据 */
{
GPIO_SDA_HIGH;
}
e ls e
{
GPIO_SDA_LOW;
}
I2C_DELAY; /* 延时以保证数据线稳定 */
GPIO_SCL_HIGH;
}
GPIO_SCL_LOW; /* 开始准备接受 ACK*/
I2C_DELAY;
GPIO_SCL_HIGH;
if (GPIO_GET_SDA)
{
re turn fals e;// 收到 NACK
}
e ls e
{
re turn true;// 收到 ACK
}
}
其次再编写发送字节序的函数
GPIO模拟I2C发送数据的函数就完成了, 当然接收数据的函数, 只要在时钟电平由低变高的时候检查数据电平就行了。
3 注意事项
1) SCL一直由Mas te r控制, SDA依照数据传送的方向, 读数据时由Slave控制SDA, 写数据时由Master控制SDA。当8位数据传送完毕之后, 应答位或者否应答位的SDA控制权与数据位传送时相反。
2) 开始位“Start”和停止位“Stop”, 只能由Mas te r来发出。
3) 地址的8位传送完毕后, 成功配置地址的Slave设备必须发送“ACK”。否则否则一定时间之后Master视为超时, 将放弃数据传送, 发送“Stop”。
4) 当写数据的时候, Mas te r每发送完8个数据位, Slave设备如果还有空间接受下一个字节应该回答“ACK”, Slave设备如果没有空间接受更多的字节应该回答“NACK”, Master当收到“NACK”或者一定时间之后没收到任何数据将视为超时, 此时Master放弃数据传送, 发送“Stop”。
5) 当读数据的时候, Slave设备每发送完8个数据位, 如果Master希望继续读下一个字节, Master应该回答“ACK”以提示Slave准备下一个数据, 如果Master不希望读取更多字节, Mas te r应该回答“NACK”以提示Slave设备准备接收Stop信号。
6) 当Mas te r速度过快Slave端来不及处理时, Slave设备可以拉低SCL不放 (SCL=0将发生“线与”) 以阻止Master发送更多的数据。此时Master将视情况减慢或结束数据传送。
在实际应用中, 并没有强制规定数据接收方必须对于发送的8位数据做出回应, 尤其是在Master和Slave端都是用GPIO软件模拟的方法来实现的情况下, 编程者可以事先约定数据传送的长度, slave不检查NACK, 有时可以起到减少系统开销的效果。但是如果slave方是硬件I2C要求一定要标准的NACK, master方是GPIO软件模拟I2C并没有正确的发送NACK, 就会出现“slave收不到stop”导致I2C挂死。
4 总结
在当今工业市场, 具有I2C接口的器件越来越多, 采用的I2C协议通信方式也有许多种, 所以采用GPIO模拟I2C, 反而可以灵活的配置各种器件, 使各种设备兼容, 这样就给人们提供了许多方便。
摘要:随着工业技术的发展, I2C总线协议在工业现场中运用的很广泛, 而具有I2C接口的器件也越来越多, 大家开始通过利用普通I/O来模拟I2C的技术, 从而就解决了主控单元I2C缺少的问题。
关键词:GPIO,I2C,MASTER,SLAVE
参考文献
[1]Philips Semiconductors, THE I2C-BUS SPECIFICATION VERSION2.1, JANUARY, 2000.
I2C总线彩电的原理与维修 第4篇
目前, 世界上各大半导体公司都不断推出I²C总线控制的单片彩色电视机集成电路, 这种以I²C总线形式用总线连接大屏幕彩色电视机中各个功能模块的增减和替换, 使性能变得非常灵活, 产品升级快、简化生产调试检测工序, 同时具有软件维修功能, 使整个彩电系统向高性能、数字化、多功能的方向发展。现在常使用I²C总线控制技术的集成电路有:飞利浦公司的TDA8366、TDA884X;松下公司的AN5195、AN5192K;东芝公司的TA1231N、TA8880;三菱公司的M52340SP、M52309AP。
一、I²C总线控制的工作原理
1、I²C总线控制的概念
I²C总线即I²C-BUS, 它的英文名是INTER INTEGRA EGCIRCUIT BUS缩写, 即“内部集成电路总线”, 也可以译为IC之间的通信, 这种新技术是由飞利浦公司所独创, 主要应用于消费电子产品之中, 它是一种双线双向的串行数据总线, 具有多端控制能力。它有两条线, 一条叫做串行数总线 (SDA) 、另一条叫做串行时钟线 (SCL) , 总线上的各种器件或模块通过SDA和SCL两条线, 并按照一定形式的约定进行信息的传输, 如图 (1) 。
2、I²C总线系统的功能和特点
在I²C总线彩色电视机中, 具有 (1) 用户操作功能, 如节目音量、色度、对比度等调节。 (2) 维修调整功能, 即对电视机各单元电路进行工作方式的调整。例如高放AGC、副亮度、场幅、平衡等 (即普通彩电各调节电位器的有关功能) 。 (3) 检测故障功能。CPU可对总线通信及被控集成电路工作状态进行检测, 并对维修人员提供相应的故障自检信息。 (4) 生产自动化调整功能, 由CPU与电视机的I²C总线相连, 将最佳调节数据送往电视机的E²PROM存储器。
I²C总线的特点:总线信息的传输只需要SDA和SCL两条线;总线串行双向传输;I²C总线是多主控器总线, 在总线上经常存在着主从关系;在总线上的每一个器件以单一不同的地址用软件来存取, 所有I²C总线兼容的器件都具有标准接口, 这些器件之间经总线可以互相通讯;连接到同一总线上的最多器件只受总线电容最大值400PF的限制;具有总线接口的各电路单元, 可以直接在总线上接入或分离。因此, 总线上某些电路单元的更新可更方便地实现产品的升级换代。
3、I²C总线上的数据传输
在I²C总线为传输每一个数据比特位, 都产生一个相应的时钟脉冲, 并且在时钟信号为高电平期间数据上的数据必须保持稳定, 时钟信号为低电平期间, 数据上的高电平、低电平才允许变化。
在总线上数据是以字节传送的, 输出到数据上的每一个字节必须是8位 (8比特长) , 但是每一次传送的字节数不受限制, 数据传输总是从最高有效位首先发出每一个被传输的字节后面必须跟随一个应答位, 而与应答信号相对应的时钟脉冲由主控器产生, 发送器在应答时钟脉冲期间, 释放数据线, 使其处于高电平状态, 以便接收器在该位上发出应答信号, 接收器应答时钟脉冲期间, 必须在数据线上输出一低电平信号, 使数据线稳定在低电平状态。
在总线上进行数据传输时, 首先是由主控器发出起始信号 (S) , 随后传送一个被控器地址, 该地址共7比特 (1-7) 位, 第八位是R/W位, 用以确定数据的传送方向, 其中“0”表示主控器数据 (写) , “1”表示主控器接收数据 (续) , 第九位是应答位。被寻址的接收器每收到一个完整的字节后, 就产生一个应答信号;如果接收器不对相应的被寻进行应答时, 该接收器必须释放数据线, 使其处于高电平, 最后由主控器产生的终止信号 (P) 结束每次的传输。
在总线的传输过程中, 有两个特定的状态, 分别定义为起始状态和终止状态, 当时钟线在高电平期间, 数据线从高电平变化到低电平的这一状态称作为起始状态, 而当时钟线在高电平期间, 数据线从低电平变化到高电平的状态称作为终止状态。起始状态和终止状态, 分别由主控器产生的起始信号 (S) 和终止信号 (P) 确定。在起始状态信号产生后, 总线处于占用状态, 终止信号产生一定时间后, 总线才处于空闲状态。
接入到总线上的各器件或模块, 在进行数据传输时, 根据它们的工作状态可分为主控发送器、主控接收器、被控接收器、被控发送器, 一些智能电路如单片微控制器 (MCU) 可以处于上述的任一状态。而一些存储器 (RAM或E²PROM) 可以是被控接收器或被控发送器。但有些集成电路则只能是被控接收器。
当多个主控器同时去占用I²C总线时, 则仲裁过程将最终判定只允许其中的一个主控器占用总线。而被裁决失去总线主控权的主控器应立即关闭其数据输出, 必须即立进入被控接收状态。
二、I²C总线彩电的维修
1、I²C总线电压测量和波形测量
当用万用表对I²C总线进行检查时, 可根据以下两点来判断I²C总线系统是否正常。 (1) I²C总线SCL和SDA引脚电压是静止的还是变化的。当I²C总线信号存在时, 用万用表测量时发现电压值微微抖动。当处于待机时, 抖动量很小;而进行操作时, 电压抖动量变大。 (2) 比较各脚电压的正常值。用示波器测量SCL和SDA的波形时, 可以发现是一簇或一串串脉冲波。输出的内容不同, 脉冲量的多少也发生变化, 一般I²C总线波形的幅度大约为5V。
2、I²C总线开机自检及I²C总线保护故障的特征
每次开机时, CPU都要检查I²C总线串行时钟SCL端口和串行数据SDA端口线路是否有故障, 并对被控电路进行检查, 如果CPU检测到I²C总线系统有故障, 将会采取保护措施, 电视机也会出现一些特殊的保护现象。对于不同的CPU和控制软件, 保护故障也不尽相同。例如:有的专设单一的I²C总线故障显示灯, 有的待机发光二极管根据不同的故障, 闪烁不同的次数和频率。
3、I²C总线系统故障的类型及检查方法
(1) I²C总线端口电压降低时, 主要检查CPU的SCL和SDA引脚接+5V电源的上拉电阻及+5V电源;利用电阻法检查CPU的SCL和SDA引脚和被控电路SCL和SDA引脚对地是否短路;检查I²C总线外围元件;检查SCL和SDA之间是否有短路。
(2) I²C总线处于固定高电平且电压不抖动时, 说明CPU末输出数据, 应检查CPU外围元件及存储器。
(3) I²C总线电压正常。则需要进入I²C总线彩电维修状态, 检查并调整有关数据。通常情况下, 电视机的某些功能消失, 电视信号弱、白平衡不良、光栅失真或行、场幅度不正确、怪故障和疑难故障都与I²C总线数据有关。
4、I²C总线彩电的调整。
(1) 彩电使用日久及元器件特性变化引起电视机某些特性变化时, 需要进行电路调整, 比如AGC、副亮度、行场幅度、枕形失真电路等。 (2) 更换某些元器件后需要对电路进行调整, 例如在更换存储器后可能需要对电路进行调整, 在更换I²C总线上挂接的受控集成电路后, 如果没有不正常现象, 一般不需要调整。 (3) 出现某些故障时, 需要检查或调整数据, 一般最常见的调整项目为光栅失真调整。如行幅、场幅、场线性、图象中心位置等。 (4) 在调整I²C总线彩电以前, 要养成记录调整前原始数据的习惯, 一般不更换存储器时不要进行存储器的初始化操作。 (5) I²C总线彩电使用的机芯不同, 调整的方法和数据也不相同。
5、
I2C总线 第5篇
制作的基本特性:
●简单而紧凑的设计
●适用于WINDOWS的XP和Vista
●软件支持labview 7或更新版本 (需有.Net支持)
●使用USB电源供电
●所有的芯片都可以从美芯 (Maxim) 公司获得
有时候, 如需要PC能够简单地直接通过I2C总线接口来通讯, 为做到这一点, 有几种方案:其中一种方案是使用并行口来仿真I2C总线管理器。问题是有些新的计算机常常没有并行打印口;另一个问题是现代的视窗系统如XP和Vista都不允许你很简单的访问RS232串行口和LPT并行口。即使事先配置好了接口, 操作起来也很不灵活。
一、进入USB
一种很有希望的近于面向未来的方法是使用USB口。然而往往需要复杂的驱动程序, 很可能还需要深入到电脑芯片的固件。这些都不是能够在一个下午能够建立起来的。当然可以购买一些现成的版本, 但都不便宜。而这里介绍的方法能够很快地做出, 并且提供了在多种编程语言 (labview, Visual, Basic等) 环境中使用它的可能。这种解决方案使用了美芯公司的电路。
二、硬件
电路的硬件结构见图1。这个电路通过USB连接器K1接到PC上。USB供电要通过L1和L2来滤波。当然没有这些电感可能也能工作, 笔者喜欢稳固的设计, 避免任何潜在的电源问题。USB的数据线借助于R2和R3被接到IC2, 即DS2490S的D+和D-上。这个IC内包含有一个完整的USB“从设备”电路, 并能处理USB的算法过程。R1上拉D+线, 表示IC2是一个全速 (即12Mbit/s) “从设备”。IC2还包含有一个1-wire总线“主设备”。因此外接1-wire总线的“从设备”都可以通过IC2由PC来寻址。电路中只有一个的1-wire总线“从设备”是IC3 (Maxim公司的DS2413) 。这是一个I/O扩展器, 能够提供两个双向漏极开路型端口 (PIOA和PIOB) 。R4和R5是这两个漏极开路型端口的上拉电阻。这些恰恰是增加一个I2C总线所需要的全部硬件。这个电路的PCB布局图 (见图2) 可以从www.elektor.com/080655上免费下载。当然也可以画图定制PCB板。
三、软件
如果微控制器没有硬件的I2C总线“主设备”, 往往用软件实现I2C总线“主设备”。业界称之为“bit banging” (译者注:Bit-banging是一种用软件替代专职硬件的串行通信的技术) 。软件直接对微处理器的管脚的状态进行设置和采样, 其功能涵盖诸如:时钟、电平、同步等所有参数。与此不同的是 (传统的串行通信技术中) , 专职硬件诸如modem、UART或者位移寄存器等一般是用来处理这些参数, 并且提供一个 (缓存) 的数据接口。软件在这种情况下同信号处理无关。实现Bitbanging技术的成本可以很低, 常用于嵌入式系统。
这时, 需要用软件控制两个管脚的逻辑电平以产生I2C总线信号。例如:为了产生一个所谓的“启动”条件, SCL需要变为高电平, 同时SDA要从高电平降为低电平。为了产生这个条件, 首先SCL (PIOA) 和SDA (PIOB) 都需要变为高电平, 然后SDA再被拉为低电平。因此, 如果软件能够控制PIOA和PIOB, 则I2C总线“主设备”就是一个软件的实体。
为了改变PIO的输出, 这个端口首先要能够寻址 (ROM功能) 。在本设计只有一个1-Wire总线“从设备”。因此使用了“跳过ROM”的命令 (CC’) 。全部1-Wire总线命令表见表1。
可以用来跳过复杂的寻址过程。接着传送5A’命令, 允许写入到PIO输出锁存器 (这是对DS2413的命令组, 其PIO函数流程图可以从http://datasheets.maxim-ic/en/an/AN155.pdf查到) 。这里有一个8位寄存器, 其两个LSB (最低有效位) 被接到PIOA和PIOB (其他6位不必管它) 。为了改变其逻辑状态, 新的数据必须发送两次:一次为正的, 一次为求反的。DS2413通过返回AA’到主设备, 表示接收无误并且结束, 同时也开始输出新的起始状态。
现在, 整个过程可以周而复始, 或者被从1-Wire总线的“主设备”来的复位命令RESET所取消。这样每次输出状态变化时要传送4个字节 (如果跳过ROM’和5A’命令不计算在内的话) 。
为了产生I2C总线开始命令, 执行表1中显示的命令序列。对于其他情况, 则实施用类似的命令序列如停止STOP, 等待SEND BYTE, 应答ACKNOWLEDGE等。
Maxim公司提供了用于DS2490 (DS9490) 的软件驱动器和用于WINDOWS的1-Wire总线软件开发套件 (SDK) 。这个SDK提供了对于WINDOWS的.net平台的支持。作为实例, 我们将显示使用其.net的支持, 在LabVIEW中一个I2C总线主设备是怎样实现的。这个例子只有当1-Wire总线驱动器安装并带有.net支持时才能工作。而且需要“Visual J#Redistributable”软件包详情见http://datasheets.maxim-ic/en/an/AN155.pdf
四、虚拟设备
LabVIEW虚拟设备 (VI) 的所谓I2C initialize’, 图3显示了其方框图。初始化DS2490, 并且给出LabVIEW对于1-Wire网络的独占的处理。这是为了防止其他应用程序存取1-Wire网络。此后, 1-Wire复位命令发布, 接着是跳过 (skip) 命令 (CC) , 最后以PIO写入命令 (5A) 结束。
现在, DS2413已经准备好从PIO口接收数据。VI (虚拟设备) I2C CLOCK’SCL线从低变高翻转 (见图4) 。SDA可以置为高电平或低电平, 而VI返回SDA的状态。通过在一行中调用这个函数8次可以写入一个完整的字节 (每传输一位一次) 。如果这个从设备返回数据, SDA就被主设备拉高。在从设备希望传输“0”时就可以拉低SDA (这是可以的, 因为PIOA是漏极开路型输出端) 。由于DS2413会自动返回被更新的输出状态, 所以不需要专门的读出操作。关于字节操作, 可以参见补充软件下载www.elektor.com/080655中的“send I2C byte”和“get I2C byte”命令。此外, 还可以下载VI虚拟设备“I2Cstart”, “I2C stop”和“I2C acknowledge”, 使用相同的结构来产生SDA和SCL信号。通过组合这些虚拟设备, 就可以实现完整的I2C读或写任务的编程。
图5中我们可以看到一个通讯编程任务的实例。其中DS1337中的寄存器0 (I2C实时钟) 内容被读出。DS1337以0x39回答, 这是以秒来计数的寄存器的内容。这个寄存器的地址设置为0x00。设从设备寻址为0x00, 要读出的字节数设置为1。图6中是使用这些设置时示波器中的图像, 显示出由电路所产生的信号。
I2C总线 第6篇
I2C总线 (inter integrated circuit bus) 由飞利浦公司于 20世纪 80年代研究开发。I2C总线接口电路其简单性和有效性而被广泛用于连接微处理器及外围设备。在电视中频解调电路中, 二线制的I2C总线接口电路使得主控制器只需要2个引脚便可实现对解调电路所有功能的控制, 且总线接口集成在器件中, 各电路单元之间只需要最简单的连接, 大大简化了电路板上的走线, 减少了电路板面积, 提高了其可靠性, 降低了成本。
在该中频解调的接口电路中, 基于I2C总线传输协议[1], 通过对状态机与控制逻辑的优化设置, 只需要1个3位的状态机便可实现电路的使能、启动、终止、应答、复位、选址等功能, 电路得到了最优化, 且通过地址选择位的增加, 防止了芯片地址冲突, 极大地改善了电路的可靠性及稳定性。
1I2C总线的特点及数据传输
1.1 总线特点
I2C总线是由数据线SDA和时钟线SCL构成的双向串行总线, I2C总线上的所有节点, 如主控器、外围器件、接口模块都连接到SDA, SCL上, 在总线备用时, SDA 和SCL都保持高电平, I2C不工作时SCL嵌位在低电平。为了使总线上所有电路的输出都能实现“线与”功能, I2C总线接口电路的输出端必须是漏极开路结构, 输出端要接上拉电阻[2,3]。
1.2 总线的数据传输格式
I2C总线数据传送格式按图1 进行。首先由主控设备发出起始信号 (S) , 即SDA 在SCL 高电平期间由高电平跳变为低电平, 然后主控器发送1个字节的数据, 首先传送的是最高位 (MSB) 。在传输了每个字节之后, 必须要有接收设备发出1位应答信号。
起始信号后的第1个字节是寻址字节, 寻址字节的高7位是接收设备的地址, 第8位是方向位, “0”发送数据 (写状态) , “1”接收数据 (读状态) 。寻址字节后面可以有很多数据字节, 每个字节后都要有一位发自接收设备的应答信号。在结束与该接收设备通信时, 主控设备必须发出终止信号 (P) , 即在时钟线SCL为高电平期间, SDA由低电平跳变为高电平。
2中频解调电路I2C总线接口的实现
电视中频解调电路中的I2C总线接口主要由输入滤波器、地址寄存器、移位寄存器、控制寄存器、状态机与控制逻辑、读状态寄存器、输出模式寄存器等构成, 如图2所示。其中, 输入滤波器具有I2C总线逻辑兼容电平, 输入时钟与内部时钟同步, 可滤除部分干扰信号[4]。控制逻辑作为控制核心控制着每一部分的状态。地址寄存器存放着自己的7位地址, 用来与接收到的地址比较。移位寄存器、输出模式寄存器与读状态寄存器端口并行相接, 各存储着8位数据字节。
(1) 起始信号与结束信号检测。
起始信号与结束信号的检测由2个下降沿D触发器和1个反相器构成, 如图3所示。D1在SDA从高电平跳变到低电平时触发, 此时只有当SCL保持高电平时, Start才为1, 即检测到起始信号。同理, D2在SDA从低电平跳变到高电平时触发, 此时只有当SCL保持高电平时, Stop才为1, 即检测到结束信号。
(2) 地址检测。
根据设计要求, I2C总线每次通信输入 8位地址数据和控制数据, 电路进行地址比较以后, 如果地址正确, 则接收控制数据。为了防止地址冲突, 增加了地址选择位, 具体实现如图4所示。D7~D1为发送的数据地址, 由于S1, S2是可设置端口, 有4种组合, 即总线接口有4个地址, 分别为1000010, 1000011, 1001010, 1001011, 只有当D7~D1为100S101S2时, 选址成功, 即可以有效解决地址冲突。
(3) 数据串并与并串的转换。
电路中, 串行数据转换为并行数据、并行数据转换为串行数据主要由移位寄存器完成。它以并行方式与输出模式寄存器和读状态寄存器相连;以串行方式与数据线SDA相连。发送的数据由读状态寄存器装载到数据寄存器中。发送后数据又从串行通道返回数据寄存器中, 接收数据时, 数据寄存器装入SDA线上的数据[5]。
(4) 内部总线状态的检测。
读状态寄存器连接着内部总线的8位状态位S0~S7, 在读状态时, 该寄存器将内部总线的状态读进去, 再以并行方式传给移位寄存器, 移位寄存器以串行的方式传给数据线, 即内部总线状态被主控器读取, 如图5所示。
(5) 并行端口的扩展。
根据芯片功能的需要, 设置了4组输出模式寄存器, 分别为调整模式寄存器、备用寄存器、开关模式寄存器、数据模式寄存器。寄存器个数可根据芯片功能的需要进行并行扩展[4,6], 由于每一组寄存器都对应着相应的子地址, 所以每一组寄存器对应相应的时钟CP1, CP2, CP3, CP4和控制端C1, C2, C3, C4。这些时钟和控制端由1个带控制端的2/4译码器输出, 所以每次只有1组寄存器工作, 如图5所示。
(6) 状态机与控制逻辑的设置与优化。
状态机与控制逻辑作为I2C接口的控制中心, 主要用于控制I2C接口电路的使能、启动、终止。 图5给出寄存器组图的应答、复位、选址及中断请求等。通过对状态机与控制逻辑的优化设置, 仅使用3位状态作为状态机的状态端, 在满足更多功能的基础上, 电路更易于实现[7,8,9]。如图6所示, 3个触发器的输出QI8, QI5, QI6为状态机的状态, Qd0~Qd8为移位寄存器的输出, HL91为移位寄存器的可控复位端, G111为地址检测位, HL22为应答位, C5, C6为移位寄存器与读状态寄存器的控制端。
上电后, 状态机的初始值被置位为全0。HL91作为移位寄存器输入端的置位端将移位寄存器的输入端置0。当初始信号到来时, start信号变为1, 此时状态机的状态变为100, 开始传送寻址字节;当8位地址传送完毕后, 假设为写状态, 此时Qd8变为高电平, 应答位HL22由高电平变为低点平, 状态机的状态变为110。HL91变高将移位寄存器的输入置0, 响应结束后, 应答位由低电平变为高电平, 状态机的状态变为010, 此时开始传输数据。
I2C总线开始工作后, 主控器便发送寻址字节给移位寄存器, 在移位寄存器将7位串行地址并行移出, 且与地址寄存器的从地址进行比较, 当地址相同时, G111变为1, 寻址成功, 此时应答信号HL22变为0, 并告知主控制器。在寻址成功后, 如果为读状态, 则在传完该字节之后, 产生应答信号, 状态机变为100, 移位寄存器控制端C5变为低电平, 读状态寄存器的控制端C6变为高电平, 读状态寄存器读入内部总线状态。其中, QI20是与读/写有关的控制端, 响应结束后, 状态机状态变为110, 此时, C5变为高电平, C6变为低电平, 读状态寄存器将存储的8位状态位并行传给移位寄存器;移位寄存器将状态串行移出, 发送给主控制器;主控制器接收到8位状态位后, 发送非应答信号给接收器, 使它释放数据线;响应结束后, 主控制器产生结束信号, 结束数据传送。
如果为写状态, 在接收器产生应答信号后, 主控器将发送子地址给移位寄存器。根据输出模式寄存器功能的不同, 分别对应3组不同的子地址。
在状态机与控制逻辑的作用下, 子地址具有自动加1功能, 所以在读写多字节时, 可以实现自动操作, 加上后面的2/4译码器, 每次只选通1路输出模式寄存器, 如图7所示。
在所有数据发送完毕后, 接收器发送应答信号给主控制器, 响应结束后, 主控制器发送停止信号 (P) , 结束数据传送。
3仿真结果
通过VHDL的程序编写[10], 对I2C模块进行了分析综合, 得到如图8、图9的仿真结果。
在写状态时, 寻址位后的读/写位为0, C6一直为低电平, 即读状态寄存器不工作, 在开始后的第8个时钟, 移位寄存器将SDA的数据并行移出, 第9个时钟时, 应答位HL22变为低电平。在读状态时, 当传完7位寻址位和“1”方向位时, C5变为低电平, C6变为高电平, 读状态寄存器工作, 可将内部总线状态读进来。
在读/写2种状态下, I2C控制模块都能很好地实现I2C总线的开始、停止、读、写、响应等功能, 仿真结果正确, 完全符合I2C总线标准和电路预期的要求。
4结语
目前, I2C总线已作为一种标准广为人们接受, 除了带有I2C总线的单片机和一些常用的外围设备器件, 在电信、电视、音像等产品中都有成套的I2C总线器件。随着大量串行数据的传输, I2C总线的传输速率已提升为高速模式, 可达到3.4 Mb/s, 寻址范围也由原来的7位扩展为10位, 这样被控器的地址数量约增加了10倍。
摘要:为了简化中频解调电路的外围接口电路, 缩小芯片面积, 提高芯片的通用性和可靠性, 在I2C总线数据传输协议的基础上, 设计一个兼容I2C协议的中频解调接口电路。为了防止芯片地址冲突, 增加了4位地址选择位, 并重点对接口电路的状态机与控制逻辑进行优化设置。仿真结果表明, 该电路功能正确, 可靠性高, 可广泛用于TV, VTR, PC, STB等方面。
关键词:中频解调,I2C总线,接口电路,状态机,控制逻辑
参考文献
[1]Philips.The I2C-bus specification[M/OL][2007-04-18].http:www.chinadz.com.
[2]Philips Semiconductors.The I2C-bus and how to use it[M].[S.l.]:Philips Semiconductors.1995.
[3]何立民.I2C总线应用系统设计[M].北京:北京航空航天大学出版社, 1995.
[4]尤一鸣, 傅景义, 王俊省.单片机总线扩展技术[M].北京:北京航空航天大学出版社, 1993.
[5]阎石.数字电子基础[M].北京:高等教育出版社, 2001.
[6]马维华.基于虚拟I2C总线的多并行口扩展技术[J].微电子学与计算机, 2008, 19 (9) :31-33.
[7]WEI Chao-Huang, LIN Yun-Chung.Implementation of lo-cal area digital audio broadcasting system upon I2C network[C].The 47th Midwest Symposium on IEEE Circuits andSystems.[S.l.]:IEEE, 2004.
[8]谭昭禹, 颜永红, 马勋.音频子系统中的I2C接口电路设计[J].微计算机信息, 2008, 24 (26) :252-254.
[9]ALASSIR M, DENOULET J, ROMAIN O.A system CAMS model of an I2C-bus controller[M].[S.l.]:IEEE, 2006.
I2C总线 第7篇
在工业监控系统中需要有多路I2C总线控制器来完成温度、电压、湿度等各个方面的监控功能。但是,目前很多系统没有或者只有很少通道的I2C总线接口,使其应用受到了限制。
基于上述技术现状,本文通过现场可编程门阵列FPGA (Field Programmable Gate Array)实现一种多路I2C总线的系统控制设计。
系统硬件设计
FPGA作为ASIC专用集成电路领域中的一种半定制电路,可以解决定制电路的不足,又克服了原有可编程器件门电路数有限的缺点,具有设计周期短、开发费用低、保密性强、体积小、重量轻、可靠性高等特点[2]。
本系统主要由系统处理器、局部总线、FPGA逻辑模块、负载设备几部分组成。其中系统处理器采用Freescale公司的MPC8245[3]。
具有多路I2C总线的系统硬件设计框图如图1所示。
处理器利用局部总线,通过地址线、数据线、读写信号线和片选信号线与FPGA逻辑模块进行通信,在FPGA内部完成I2C总线控制器的功能,实现从处理器局部总线到I2C协议的转换和多路扩展,其中每个I2C总线控制器挂载多个不同的设备,可以是主设备或从设备。
FPGA逻辑模块设计
多路I2C总线的系统控制中,FPGA逻辑模块的设计是核心。该模块主要由三部分组成:顶层控制模块、处理器接口模块、多路I2C总线控制器模块。模块化的设计便于移植和软件重用。其中FPGA芯片采用XILINX公司的SPARTAN3A系列的芯片,开发平台为ISE10.1。
顶层控制模块
顶层控制模块主要实现处理器接口模块与多路I2C总线控制器模块之间的连接与通信,实现整个输入输出接口到各个功能模块之间的映射。三者之间的逻辑关系如图2所示。
处理器接口模块
MPC8245处理器接口模块主要完成MPC8245处理器与FPGA的接口功能,并实现与FPGA内部的多路I2C总线控制器数据传输的握手协议和数据交换。在MPC8245处理器接口模块中,每个I2C控制器对应有4个8位的寄存器,即数据寄存器、地址寄存器、控制寄存器和状态寄存器。
(1)数据寄存器根据读/写信号区分,分为发送数据缓冲寄存器和接收数据缓冲寄存器,共享一个地址,数据长度为8位。
(2)地址寄存器用来保存当前地址。当该路I2C控制器作为从节点通信时,地址寄存器中保存的是自己的地址,这个地址在总线上是唯一的。从节点接收到包头后,将其中的地址与自己的地址比较,如果一致,则响应主节点,开始传输。
(3)控制寄存器用来控制I2C总线控制器的数据传输,按照设置产生各个协议命令、响应动作及工作模式。
(4)状态寄存器显示当前总线的状态。通过状态寄存器中不同的状态指示,实现与MPC8245处理器的握手协议。
MPC8245处理器利用地址线、数据线、片选信号和读写信号来与MPC8245处理器接口模块N路I2C总线控制器相关的N4个寄存器交换数据、读取状态、作为从设备时响应的地址和控制各路I2C总线的控制器。
I2C总线控制器模块
I2C总线控制器模块主要实现并行的I2C通信控制,每一路I2C总线控制器通过FPGA的I/O管脚连接到外部实现各自独立的I2C总线,具有主工作模式和从工作模式两种工作状态。
I2C总线控制器主要有两个状态机:主控制状态机和时钟生成状态机。
主控制状态机是整个I2C总线控制器的核心。时钟生成状态机只在I2C总线控制器作为主设备时的模式下工作,是I2C总线通信时的时钟。当I2C总线控制器作为从设备通信时,主控制状态机时钟由FPGA所实现的I2C总线上所挂载的I2C主设备提供,整个I2C总线通信时的时钟为外部主设备提供的时钟。
I2C总线控制器状态机设计
(1)主控制状态机
主控制状态机状态转移图如图3所示。
IDLE状态:当I2C上电或者复位后,主控制状态机就处于此状态。
HEADER状态:在此状态,系统根据控制寄存器位MSTA值,发送或者接收包头,满足条件后,转移到ACK_HEADER状态;I2C总线控制器中的HEADER移位寄存器与地址寄存器中存放的I2C总线控制器作为从设备时响应的地址进行比较,如果匹配,则表明该路I2C总线控制器为被主设备寻址的从设备,模式立刻切换到从设备模式,同时状态寄存器中的MAAS位被置位,数据线SDA将会按照TXAK中的设置应答当前主设备。
ACK_HEADER状态:当该路I2C总线控制器作为主设备时,如果没有收到从设备发送的ACK,则发送结束信号,返回到IDLE状态;如果收到ACK,则确定仲裁没有丢失,根据控制寄存器位TX值转到XMIT_DATA或者RCV_DATA状态;当该路I2C总线控制器作为从设备时,如果地址匹配,则发送ACK,根据主设备发送的第一个字节中的最后一位的值转到XMIT_DATA或者RCV_DATA状态。
XMIT_DATA状态:在此状态时,移位寄存器将数据移到SDA线上。发送一个字节完成后,转移到WAIT_ACK状态。
WAIT_ACK状态:在此状态时,如果收到ACK,则返回到XMIT_DATA状态;如果仲裁丢失,则转到IDLE状态;如果没有收到ACK,则发送结束信号,转移到IDLE状态。
RCV_DATA状态:在此状态时,如果检测到重新启动信号,则返回HEADER状态;否则,移位寄存器从SDA线上移入数据,以供MPC8245处理器的驱动程序读取,移入一个字节后,转到ACK_DATA状态,控制寄存器中的TXAK位被输出到数据线SDA。
ACK_DATA状态:I2C控制器发送ACK,返回到RCV_DATA状态。
(2)时钟状态机
整个状态机状态转换如图4所示。
SCL_IDLE状态:当上电复位后,状态机就处于该状态。当I2C控制器为主节点并且总线空闲时,收到开始标志后,转移到START状态。
START状态:当在此状态时,根据I2C协议,需要保持一定的时间,当持续时间满足要求时,转移到SCL_LOW_EDGE状态,否则保持在START状态。
SCL_LOW_EDGE状态:当在此状态时,在下一个系统时钟时,转移到SCL_LOW状态。
SCL_LOW状态:在此状态时,根据控制信号,设置SDA的输出,根据I2C协议,需要保持一定的时间,当保持时间满足要求时,转移到SCL_HIGH_EDGE状态,否则保持在该状态;如果仲裁丢失且已经传输了7个字节,则转移到SCL_IDLE状态。
SCL_HIGH_EDGE状态:在此状态时,完成一定的操作,持续一个时钟周期后,转移到SCL_HIGH状态。如果SCL输入为0或者状态寄存器中的位MCF=1,则一直停留在该状态。
SCL_HIGH状态:在此状态时,如果有重复起始信号,则SCL高电平持续一半时间,转移到START状态;如果有结束信号,则SCL高电平持续一半时间,转移到STOP_WAIT状态;根据I2C协议,需要保持一定的时间,当持续时间满足要求时,转移到SCL_LOW_EDGE状态,否则保持在当前状态。
STOP_WAIT状态:在此状态时,根据I2C协议,需要保持一定的时间,当持续时间满足要求时,转移到SCL_IDLE状态。
系统工作流程
多路I2C总线的系统在系统上电后,处理器通过FPGA与FPGA相连接的I2C设备通信。
(1)当处理器作为主设备与FPGA所实现的I2C总线上所挂的从设备进行通信时,处理器主体通过对FPGA内部的该路I2C总线控制器对应的寄存器进行操作,根据I2C总线通信协议,产生起始信号和时钟信号,并查询状态位,对该路I2C总线上的从设备进行发送或者接收数据的操作,在数据交换完成后,产生停止信号,完成整个通信。
(2)当处理器主体作为从设备与FPGA所实现的I2C总线上所挂的主设备进行通信时,FPGA所实现的I2C总线上所挂的主设备产生起始信号和时钟信号,处理器主体通过对FPGA内的该路I2C总线控制器对应的数据寄存器进行操作,发送或者接收数据。当通信完成后,FPGA所实现的I2C总线上所挂的主设备产生停止信号,完成整个通信。
通过可编程逻辑器件实现的多路I2C总线上每一路可以挂多个设备,可以是从设备,也可以是主设备,具体能挂的设备数量受总线电容的限制。
本设计利用可编程逻辑器件,完成对处理器主体I2C总线的扩展,使该处理器能够有多个I2C总线通道,每一路I2C总线上可以挂载多个不同的设备,可以是主设备,也可以是从设备,满足不同应用场合的要求。在可编程逻辑器件内,每个I2C总线控制器仅使用4个寄存器,大大降低了控制的复杂度,无需占用较多的CPU资源,系统稳定,执行效率高。
参考文献
[1]The I2C-Bus Specification Versiom 2.1.Philips Semicon-ductors, January 2000.
[2]CILETTI M D.Verilog-HDL高级数字设计[M].北京:电子工业出版社, 2005.
I2C总线 第8篇
基于以上情况, 该文提出了一种基于单片机为核心挂接两个带有I2C接口的温度传感器组建温度采集系统, 并通过液晶显示器显示出来。
系统设计分为硬件电路设计和软件及仿真设计两大部分。
1系统硬件电路设计
硬件电路的设计包括了温度传感器的选型、单片机的选型、液晶显示器的选型及其部件之间的电连接。
温度传感器选用DS1621温度传感器, DS1621是由DALLAS公司生产的一种功能非常强的数字式温度传感器。通过读取内部的计数值和用于温度补偿的每摄氏度计数值, 利用公式计算还可提高温度值的精度。DS1621无需外围元件即可测量温度, 将结果以9位数字量 (两字节传输) 输出, 测温范围为-55 ℃~+155 ℃, 精度为0.5 ℃, 转换时间为1 s, 数据的写入和读出通过一个2线I2C串行接口完成。
I2C总线 (Inter Integrated Circuit BUS, 内部集成电路总线) 是由PHILIPS公司开发的一种两线式串行总线, 用于连接微控制器及其外围设备。I2C总线由数据线SDA与时钟SCL构成串行总线, 可用于发送与接收数据。数据可以在CPU与被控IC芯片之间、IC芯片与IC芯片之间进行双向传送, 最高传送速率可100 kb/s。
该设计选择M C S - 5 1系列的一款通用M C U芯片 — STC89C52, 其本身并没有I2C接口电路, 但可以通过软件来模拟I2C接口。采用2片DS1621采集温度, 将第一片地址连接成000 (A2A1A0均接低电平) , 将第二片地址连接成001 (A2A1接低电平, A0接高电平) 。STC89C52芯片的并行引脚P2.6和P2.7连接到温度传感器DS1621的SDL和SCL总线。
液晶显示器选用了LCD1602, 温度采集的结果通过LCD1602切换轮流显示出来, LCD1602的数据线连接至MCU的P3口。
该系统总体结构如图1所示, 以单片机STC89C52为核心, 由电源电路、时钟电路、复位电路、温度传感器 (2个) 和LCD1602液晶显示构成。
2软件设计及仿真
熟悉LCD1602的命令集及编程思路后, 在keil软件上进行软件设计, 软件分为多个文件, 包含LCD1602和DS1621芯片的驱动程序和主程序。将程序按其逻辑划分为多个模块, 这样可以使软件结构看起来更清晰, 且容易维护。
主程序设计如下所示。
unsigned char s[10], i, a[2];//数组s存放显示的字符串, a存放DS1621的地址
a[1]=‘’;//用于显示
Lcd1602_Initialize () ;
Lcd1602_Write (1, 0, "th temp (c) :") ;
for (i=0;i<2;++i) //初始化2个DS1621
{
Ds1621_Set Device Address (i) ;
Ds1621_Write Config (0x03) ;
Ds1621_Set Temperature Limit (40, 35) ;
}
同时在Proteus软件绘制系统硬件电路图, 并与Keil软件实现联调, 仿真结果如图2和图3所示, 图2为第一片温度传感器的温度实时值, 图3为第二片温度传感器的温度实时值。
3结语
该设计实现了两点温度的测量系统, 传感器DS1621集成度高, 直接输出数字信号, 通过I2C总线实现信号传输, DS1621的选用简化了电路设计、方便了程序设计。以STC89C52单片机为系统核心, 使系统结构简单、且易于实现。系统带有的液晶显示器LCD1602使人机交互更加友好。 该系统可应用于诸多温度采集的场合使用。
摘要:温度是工农业生产中一个普遍而又重要的参数。因此, 对于温度这个参数的测量与控制就显得尤为重要。该文设计了基于I2C串行总线的两点温度测量系统, 阐述了I2C总线的特点及基本原理, 选用了STC89C52单片机为系统的核心, 并设计了单片机的时钟电路、复位电路和电源电路, 选用了DS1621温度传感器采集环境温度, 选用了液晶显示器LCD1602显示采集到的温度值, 并进行了单片机端口的选择和各器件之间的连接, 进行了LCD1602和DS1621芯片的驱动程序和主程序的编写, 并进行了仿真。
关键词:STC89C52,I2C,DS1621,液晶显示器
参考文献
[1]彭芬.单片机C语言技术应用技术[M].西安:西安电子科技大学出版社, 2012.
[2]梁森.自动检测与转换技术[M].北京:机械工业出版社, 2012.
[3]乌云高娃.C语言程序设计[M].北京:高等教育出版社, 2012.