I2C控制器范文
I2C控制器范文(精选7篇)
I2C控制器 第1篇
PCF 8584是PHILIPS (后更名为NXP) 公司生产的CMOS低功耗I2C总线控制电路, 作为大多数标准并行总线的微处理器/微控制器与串行的I2C总线间的接口。带有主从模式, 它可与I2C串行总线的器件进行通讯, 允许并行总线系统与I2C串行总线间进行双向通讯, 可采用中断或查询模式, 完成所有I2C总线规范的序列、协议、仲裁及定时控制。它有两种工作模式, 分别是Intel和Motorola (后更名为Freescale) 模式, 不论是Intel或Motorola公司的微处理器, 皆可方便与PCF 8584接口, 这由芯片内部自动对第一个写信号序列进行检测来实现的。默认方式为Intel模式。
PCF8584内部有5个寄存器, 其中的三个 (自地址寄存器S0’, 时钟寄存器S2, 中断向量寄存器S3) 用于对PCF8584进行初始化。正常情况下, 这三个寄存器用于在设备复位后初始化该芯片。另外两个寄存器是复用的, 分别是数据缓冲/移位寄存器S0, 控制/状态寄存器S1, 用于实际的数据传送和接收。使用复用功能的寄存器, 由读写来加以区别, 减少了寄存器的使用量。寄存器S0兼具移位和数据缓冲的功能。寄存器S0在I2C总线中执行所有串并转换的功能。寄存器S1包括了I2C总线状态信息。
I2C总线
I2C总线用两条线 (SDA和SCL) 在芯片和模块间传递信息。SDA为串行数据线, SCL为串行时钟线, 这两条线必须用一个上拉电阻与正电源相连, 其数据只有在总线不忙时才可传送。I2C总线的系统配置参见图1, 产生信号的设备是传送器, 接收信号的设备是接收器, 控制信号的设备是主设备, 受控制信号的设备是从设备。
启动和停止条件
总线不忙时, 数据线和时钟线保持在高电平。数据线 (SDA) 在下降沿而时钟线 (SCL) 为高电平时, 为起动条件 (START) ;数据线在上升沿而时钟线为高电平时为停止条件 (STOP) , 参见图2、图3。
标志位
在起动条件和停止条件之间, 传送器传送给接收器的数据数量没有限制。在每个8位字节后加一个标志位, 传送器便产生一个高电平的标志位, 这时主设备产生一个附加标志位时钟脉冲。
从接受器必须在接收到每个字节后产生一个标志位, 主接收器也必须在接收从传送器传送的每个字节后产生一个标志位。在标志位时钟脉冲出现时, SDA线应保持低电平 (应考虑起动和保持时间) 。传送器应在从设备接收到最后一个字节时变为低电平, 而使接收器产生标志位, 这时主设备即可产生停止条件。
I2C总线协议
用I2C总线传递数据前, 接收的设备应先标明地址, 在I2C总线起动后, 这个地址与第一个传送字节一起被传送出去。PCF8584可以作为一个从接收器或从传送器, 此时的时钟信号线SCL只能输入信号线, 数据信号线SDA则为一条双向信号线。
应用实例
在我们的一个课题中, 需要实现检测装置的恒温控制, 同时对电路工作环境也需要进行温度检测, 共需要检测四路温度值。我们选用了D A L L S公司的数字温度集成芯片DS1624, 此芯片可测量的温度范围是-55℃到+125℃, 以0.03125℃为增量, 提供13位的温度值, 转换时间最大为1秒;此芯片采用2线串行接口, 具有布线方便等优点, 完全能满足我们的设计需要。此芯片的A0、A1、A2用于芯片选择, 可接最多8片温度传感器。
在之前的一项设计中, 我们也选用了DS1624构成系统, 与微处理器的接口通过两个端口, 直接编程实现对DS1624的访问。有次调试控制板时, 一旦选择到温度菜单, 系统就会发生死机现象。经分析, 是DS1624虚焊造成的。通过图2、3分析得知, 微处理器在发送完控制字、命令字后, 要接收DS1624的ACK信号, 一旦DS1624虚焊或损坏, 微处理器接收不到正确的ACK信号, 软件就会进入死循环状态, 造成系统“死机”。为了避免这种现象的发生, 经比较, 选用了通过I2C总线控制器PCF8584来对DS1624进行访问, 就不会发生这样的情况, 控制器会自动完成数据的读取。如果发生错误, 也会置位相应的状态位, 避免了因器件损坏或接触不良而造成的系统死机现象。
系统中, PCF8584采用主模式, DS1624采用从模式。
系统设计
系统原理图见图4。PCF8584的访问通过端口地址实现, 其地址通过软件编程进行定义, 占用800H, 801H两个端口。四片DS1624的地址分别为0-3。
为了实现数据的发送和接收功能, 定义了以下一些函数:初始化函数, 用于主要寄存器的初始化;发送数据、接收数据函数;设置起动位及停止位的函数等。
结语
I2C总线以其接口简单, PCB布线方便等方面的优点, 得到了越来越多的应用。本系统中, 使用PCF8584实现了I2C串行总线与微处理器的接口, 满足了系统设计要求, 也简化了系统设计, 取得了很好的效果。
参考文献
[1]. PCF8584用户手册, PHILIPS公司
[2]. 张载鸿, 微型机 (PC系列) 接口控制教程, 清华大学出版社, 1994
I2C控制器 第2篇
I2C总线是PHILIPS公司推出的新一代串行总线,其应用日渐广泛。目前许多单片机都带有I2C总线接口,能方便地实现I2C总线设计;对没有I2C总线的微控制器(MCU),可以采用两条I/O口线进行模拟。在以单片机为MCU的系统中/很容易实现I2C总线的模拟扩展,有现成的通用软件包可以使用。
1 基于CPLD系统中开发自己的I2C总线IP核的重要性
对有些基于CPLD的系统,要与带有I2C总线接口的外围器件连接,实现起来相对复杂一些。为实现系统中的I2C总线接口,可以另外引入单片机,也可以采用PCF8584或者PCA9564器件(PHILIPS公司推出的专用I2C总线扩展器)进行扩展,但这样会增加系统成本,使系统冗余复杂。像ALTERA、XILINX等一些大公司有专用的基于CPLD器件的I2C总线IP核,但这些IP核的通用性不强,需要的外围控制信号较多,占用系统很大的资源,因此直接采用这种IP核不可取。
鉴于此,依照I2C总线协议的时序要求,在基于CPLD的系统中开发了自己的I2C总线IP核。对于一些带有I2C总线接口的外围器件较少、对I2C总线功能要求较简单的CPLD系统,自主开发IP核显得既经济又方便。
2 I2C总线的协议
I2C总线仅仅依靠两根连线就实现了完善的全双工同步数据传送:一根为串行数据线SDA,一根为串行时钟线SCL。该总线协议有严格的时序要求。总线工作时,由时钟控制线SCL传送时钟脉冲,由串行数据线SDA传送数据。总线传送的每帧数据均为一个字节8bit,但启动I2C总线后,传送的字节个数没有限制,只要求每传送一个字节后,对方回应一个应答位(Acknowledge Bit)。发送数据时首先发送数据的最高位(MSB)。
I2C总线协议规定,启动总线后第一个字节的高7位是从器件的寻址地址,第8位为方向位(“0”表示主器件对从器件的写操作;“1”表示主器件对从器件的读操作),其余的字节为操作的数据。总线每次传送开始时有起始信号,结束时有停止信号。在总线传送完一个或几个字节后,可以使SCL线的电平变低,从而使传送暂停。
图1列出了I2C总线上典型信号的时序和I2C总线上一次完整的数据传送过程。
依据I2C总线的传输协议,总线工作时的具体时序如下:
起始信号(S):在时钟SCL为高电平期间,数据线SDA出现由高电平向低电平的变化,用于启动(A)总线,准备开始传送数据;
停止信号(P):在时钟SCL为高电平期间,数据线SDA出现由低电平向高电平的变化,用于停止I2C总线上的数据传送;
应答信号(A):I2C总线的第9个脉冲对应应答位,若SDA线上显示低电平则为总线“应答”(A),若SDA线上显示高电平则为“非应答”(/A);
数据位传送:I2C总线起始信号或应答信号之后的第1-8个时钟脉冲对应一个字节的8位数据传送。在脉冲高电平期间,数据串行传送;在脉冲低电平期间,数据准备,允许总线上数据电平变化。
3 在Maxplus II环境下I2C串行扩展IP核的建立
Maxplus II是美国Altera公司用于CPLD的EDA软件,内部有许多常用的宏单元,如计数器、四则运算、各类逻辑门乃至ROM、RAM等。这些宏单元内具体的参数都可以由用户来自行设定,这就是上面提到的IP核形式。它避免了重复劳动,提高了效率。以下将要设计的是下位机的IP核。
Maxplus II的AHDL(Altera Hard ware Description Language)是Altera公司开发的完全集成于Maxplus II中的一种模块化高级语言,特别适合于描述复杂的组合逻辑、组运算、状态机和真值表。本文利用AHDL,直接生成IP核。
设计的最终目标是生成如图2所示的Symbol。通过输入数据来达到控制SDA和SCL的目的,将信号按要求的时序传送给I2C器件。
设计思路是利用状态机实现时序。主要包括输入数据锁存、起始、数据传输、停止等状态机。通过状态机,在每一状态下确定下一状态SDA和SCL是高电平或者低电平,通过这种方式实现了I2C所需要的每一种时序。由于使用的是AHDL,这种状态机实现起来非常方便,程序简洁明了。由于篇幅限制,仅介绍数据传输的状态机。状态图如图3所示。
以下程序中,Cmd_reg2为发送允许暂存位;Sh_reg[]为数据锁存,通过左移,最高位数据Sh_reg7为当前将发送数据,存入SDA_tmp。通过图3对照程序,可以看到发送一个利用状态机数据位的详细过程。程序清单如下:
图4为仿真结果。起始信号给出以后,传输2个8位数据:每个数据后跟一个应答位,在输送完第一个数据要求的情况下,暂停一段时间,再输送第二个数据;2个数据输完以后,主机发出停止输送要求,即给出停止信号。这些信号,在SDA和SCL上完全符合I2C的时序要求。要使总线传输速率达到改进后的规范,即400 kb/s,因为根据以上叙述,每发送1位数据需要4个时钟周期,所以所给的时钟为1600k Hz。图4中Execute为执行信号,即它为高电平时,输入数据DIN[7..0]有效;EXU为发送使能信号,只有当它为高电平时,方可输送串行数据到外围器件;Start为开始控制信号,用于发生起始信号;STOP用于告知总线数据传输结束,发生停止信号。
4 仿真结果工作正常
仿真以后,通过编程电缆将生成的pof文件用ISP(在系统编程)方式下载到FPGA板EPM7128SLC84-6,I/O口SDA和SCL挂上拉电阻,外接两片I2C器件SAA1064(LED显示I2C串入并出芯片)进行测试,结果CPLD利用该I2C的IP核,工作正常可以按照要求显示。
摘要:根据单片机I2C串行扩展的特点,在EDA软件MaxplusII的环境下,利用硬件描述语言,建立IP核。此设计利用状态机实现,在给出设计的同时详细说明IP核的建立过程,并下载到芯片通过硬件试验验证。
关键词:I2C总线,IP核,CPLD系统
参考文献
[1]Altera.ALTERA DIGITAL LIBRARY,2000.
[2]何立民.可编程逻辑器件原理、开发与应用[M].北京:北京航空航天大学出版社,2000.
[3]赵曙光.可编程逻辑器件原理、开发与应用[M].西安:西安电子科技大学出版社,2000.
[4]SAA1064 Product Specification Philps.
[5]杨志刚,蒋欣.CPLD在基于PCI总线的功率模块设计中的应用[J].国外电子元器件,2008,4:29-31.
[6]黄科元,黄守道.DSP和CPLD构成的矩阵式变换器控制系统[J].电力电子技术,2008(2):70-72.
[7]康岭,朱齐丹.基于CPLD的DSP与LCD接口的设计与实现[J].应用科技,2008(5):60-64.
[8]田开坤,徐海霞.基于CPLD的单片机接口设计[J].现代电子技术,2008(2,265):34-36.
I2C控制器 第3篇
制作的基本特性:
●简单而紧凑的设计
●适用于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总线技术及其模拟 第4篇
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总线接口的设计及验证 第5篇
常规的图像采集处理系统利用图像采集卡采集图像到硬盘, 再利用计算机以软件方式完成图像处理分析的任务。由于目前计算机自身性能的限制, 完成数字图像处理的速度有限, 不能达到实时处理的目标。如果采用FPGA处理, 将会大大提高处理速度, 同时达到实时处理的目标;由于在摄像机端实现了图像信息的数字化, 因此图像抗干扰能力强, 图像的传输距离进一步增加。这里所做的工作是数据采集的一部分, 是后续图像处理的基础, 因此具有十分重要的意义。
1 I2C总线
图1为模拟I2C接口程序的基本框架[1]。程序接口用于与应用程序连接, 将应用程序的数据按照I2C协议的方式通过SDA传递给外部器件;时钟设置寄存器用于设置时钟信号;时钟产生模块产生4倍SCL频率的时钟信号, 它为位传输控制模块中所有同步动作提供触发信号;命令寄存器决定是否在总线上产生各种时序信号等;状态寄存器用来显示当前总线的状态;数据传输寄存器用于保存等待的数据;数据接收寄存器用于I2C总线接收到的最后一个字节内容;数据移位寄存器保存的数据总是与当前的数据传输相关的;字节传输控制模块以字节为单位控制数据传输;位传输控制模块以位为单位进行数据传输和产生各个I 2C协议命令。图2为I2C总线接口设计及程序流程图。I2C总线为双向同步串行总线, 分SDA (串行数据线) 和SCL (串行时钟线) 两种。
1.1 I2C总线接口设计的具体实现
I2C总线接口设计所需的编程模块有:位传输控制模块和字节传输控制模块[1]。编写以上2个模块时还要编写程序主体部分。程序主体部分完成与外部程序的接口;完成与总线上外部节点的连线;完成程序内部各个 ( I2C总线接口程序框架图中) 寄存器的构建;控制字节传输控制模块等功能[2]。
1.2 波形仿真测试图
在ModelSim中可以看到仿真的结果。I2C在SCL高电平期间发送单比特数据, 低电平期间允许总线上改变信号。图3~图5分别在SCL为高位“1”时, 读SDA上的数据, 在第9个SCL高电平期间发出应答信号。图中相关数据 (A0H, 01H, A5H, 5AH) 是编程时预先输入的地址数据, 仿真图验证了本设计程序的正确性。进一步说明I2C程序符合I2C协议的时序和数据格式, 可以实现模拟I2C协议的任务。进而完成了总线的接口设计。
2 SAA7113配置
2.1 SAA7113初始化配置值
在用FPGA来实现对SAA7113配置之前, 首先必须确定其内部各寄存器的配置值。SAA7113H有256个内部寄存器 (Subaddress:00~FFH) , 其中00H芯片版本信息寄存器是只读的。01H~05H是前端配置状态寄存器。06H~13H, 15H~17H是解码部分的工作方式配置寄存器。11H~13H是输出控制寄存器, 1FH是只读的解码状态寄存器。40H~60H, 60H~62H是行/场图像控制、状态寄存器, 用于设置VPO的数据格式等。内部寄存器14H, 18H~1EH, 20H~3FH及63H~FFH保留使用。在设计时SAA7113大部分寄存器的值采用其默认值“00H”, 以“01H”和“40H”为起始地址从SAA7113_ROM取出配置数据分两组对SAA7113进行配置, 两组配置数据结束地址分别“17H”和“5FH”。
图6为i2c_w_7113模块原理图, 其主要接口信号定义如表1所示。
图7是i2c_w_7113模块功能仿真波形图。从图7中可以看出, 当发出总线启动命令cmd_start (对应1个高电平脉冲) 时, 在SCL高电平期间, SDA线上产生1个从高电平到低电平的跳变以启动总线。随后立即发送器件寻址字节, SAA7113的器件地址是4AH, 每个I2C器件都有1个惟一的器件地址号, 当总线上有多个I2C器件连接时, I2C接口控制器根据这个惟一的地址号来寻址相应的器件。I2C在SCL高电平期间发送单比特数据, 低电平期间允许在总线上改变信号。它先发送字节数据的最高位, 从图中可以看出, 4AH在总线上的比特流为0100_1010, 当发送完8位数据且SAA7113正确接收后, 在第9个SCL高电平期间SAA7113发出应答信号将总线拉低, 即在SDA线上呈现低电平。
2.2 下载验证
整个设计功能仿真通过后就可以下载到FPGA进行实际验证了。对SAA7113的读写操作是通过saa7113_write和saa7113_read两个控制钮实现的, 它们对应开发板上的2个微动开关。先使能写操作, 完成配置后i2c_write_fine引脚对应的LED被点亮;然后使能读操作, 从SAA7113 E2PROM中读取的数据被存入SAA7113_RAM中完成读操作i2c_read_fine引脚对应的LED被点亮;最后在JTAG模式下利用Quartus的In-System Memory Content Editor来查看SAA7113_RAM中的数据。
3 结 语
在进行基于FPGA的硬件图像采集处理系统的视频采集部分的研究时, 摄像机输出的模拟信号需转换成数字信号, 而SAA7113芯片可以实现转换功能, 在此通过I2C总线的接口设计并在实现对SAA7113配置的基础上实现该功能。在设计i2c_w_7113模块状态机时, 有意缩小SAA7113寄存器的配置范围, 从而节省配置时间。这里所做的工作是数据采集的一部分, 是后续图像处理的基础。
摘要:在视频采集时, 摄像机输出的模拟信号需要转换为数字信号, SAA7113芯片可以实现这种模/数转换功能。介绍在开发FPGA图像采集功能时, I2C总线模块的设计思路, 并利用Verilog HDL语言实现I2C总线接口的功能;同时利用I2C总线对SAA7113芯片进行配置, 为实现视频图像的模/数转换和图像采集搭建环境, 在设计SAA7113模块状态机时有意缩小SAA7113寄存器的配置范围, 从而节省配置时间。
关键词:I2C总线,Verilog HDL,FPGA,SAA7113
参考文献
[1]刘韬, 楼兴华.FPGA数字电子系统设计与开发实例导航[M].北京:人民邮电出版社, 2005.
[2]何立民.I2C总线应用系统设计[M].北京:北京航空航天大学出版社, 1995.
[3]杜慧敏.基于Verilog HDL的FPGA设计基础[M].西安:西安电子科技大学出版社, 2006.
[4]袁本荣.用Verilog HDL进行FPGA设计的一些基本方法[J].微计算机信息, 2004, 20 (6) :93-95.
[5]应芳琴.基于I2C总线的视频信息采集系统的IP核设计[D].杭州:浙江工业大学, 2005.
[6]Bruce J W.Personal Digital Assistant (PDA) Based I2C BusAnalysis[J].IEEE Transactions on Consumer Electronics, 2003 (11) :1 482-1 485.
[7]马向前.基于FPGA的实时图像采集和去噪系统的研究与设计[D].长春:吉林大学, 2006.
[8]常晓明.Verilog-HDL工程入门[M].北京:北京航空航天大学出版社, 2005.
[9]林灶生.Verilog FPGA芯片设计[M].北京:北京航空航天大学出版社, 2006.
I2C总线彩电的原理与维修 第6篇
目前, 世界上各大半导体公司都不断推出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总线的串行键盘电路设计 第7篇
本文介绍一种采用MAX7348的串行I2C总线的键盘电路以及驱动程序的设计。
I2C需要连线少, 仅需一条串行时钟线和一条串行数据线。允许多主机控制, 具有裁决和同步功能, 可随意添加或摘除总线上的子器件等诸多优点, 所以已经被广泛应用。
二、MAX7348
MAX7348是美国MAXIM公司生产的2线接口、低EMI键盘开关和发声控制器, 可监控多达40个按键, 可对按键去抖并保存在FIFO中, 去抖时间用户可在9~40ms之间任意设置, MAX7348自带的音调发生器在控制器的作用下可自动发出按键声和报警声, 在发声期间, 输出还可以设置为高电平或低电平, 以驱动电子发声器、继电器或指示灯。芯片采用400Kps, 5.5V容限2线串行接口, 工作电压2.4~3.6V, 4个I2C地址选择。与MAX7348同系列的还有MAX7347和MAX7349等。
1.引脚图
如图1所示, SDA、SCL分别是兼容I2C串行总线的数据、时钟接口, 使用时通常需要接一个典型值为4.7kΩ的上拉电阻;ROW0~ROW8为键盘矩阵行输入端口, 不用时开路;COL0~COL4为键盘矩阵列输出端口;SOUNDER为发声器输出端口, 该输出为推挽结构, 通常与地之间接一个压电陶瓷片或其他发声设备;INT为中断输出端口;ADO为地址输入端口, 用来设置器件的从地址, 该引脚接GND、V+、SDA、SCL可形成4种逻辑组合构成MAX7348的4个可选的I2C地址, 如表1;GND为接地端, V+接电源 (2.4~3.6V) 。
2.主要内部寄存器
(1) 按键FIFO寄存器 (00H) 该寄存器包含与按键FIFO状态有关的信息, 以及那些经过去抖的事件信息, 该寄存器的D0~D5位表示按键中的那些键已去抖, D6指明当前去抖按键是否是FIFO中的最后一个;D7位是溢出标志, 它表示按键FIFO是否溢出。读按键扫描FIFO将清除中断信号, 但是只有通过执行足够次数的读操作清空FIFO后才能再次产生中断 (INT) 信号。
(2) 去抖寄存器 (01H) 该寄存器用来设置每一个去抖周期的时间, 以及使能和禁用GPO端口, 其中D0~D4位用来在9~40ms范围内设置去抖时间, 步长1ms, D5~D7用来设置使能那一个GPO端口 (表2) 。
(3) 自动重复寄存器 (02H) 该寄存器用来设置自动重复频率及其延时。当按键按下且没有释放时, 自动重复功能允许连续触发按键事件。自动重复延时规定了第一次按下按键与开始重复之间的时间 (如果按键没有释放) 。自动重复频率规定了自动重复开始后按键事件连续触发的速度。D0~D3设定自动重复延时, 范围从8个去抖周期到128个去抖周期。D4~D6位规定重复频率, 范围是4到32个去抖周期, D7位是自动重复功能使能位 (如表3所示) 。
(4) 中断寄存器 (03H) 该寄存器包含与中断请求功能设置有关的信息, 以及INT输出的状态, INT输出也可配置为GPO。中断寄存器是只读寄存器, 向该寄存器写入数据无效。
(5) 配置寄存器 (04H) 该寄存器反映发声器的状态、控制I2C总线超时、使能报警输入中断、使能发声器对报警输入和按键去抖时间做出响应, 以及控制器件关断等。该寄存器结构如表4所示, 除D1、D2设定发声器输出状态外, 其余每一位对应一个控制状态, 用户可根据需要使能 (置“1”) 或禁止 (置“0”) 。
(6) 按键发声寄存器 (06H) 如果配置寄存器 (04H) 中使能按键发声, 那么当一个键或一组键去抖后, 发声控制器将发出声音, 并由按键发声寄存器设定发声的时间和频率。
除以上几个主要寄存器外还有端口寄存器、报警声寄存器、发声器寄存器等多个寄存器, 这些寄存器主要用于控制发声器和扩展GPO端口, 在此不做详细叙述, 感兴趣的读者可以自行查阅有关MAX7348的技术资料。
三、电路设计
图2是笔者设计的MAX7348应用电路, 该电路以凌阳 (SPCE061A) 单片机为主控制器, 结合MAX7348构成了一个具有40个按键的键盘电路, 通过程序可以设置按键发声、自动连续按键、中断输出等功能。MAX7348的SDA、SCL、INT分别与SPCE061A单片机的IOB0、IOB1、IOB2 (注:SPCE061A单片机的IOB2为外部中断1的输入口) 连接, 由于I2C总线允许挂接多个从机, 所以在实际使用中, 可以将多个不同从机地址的设备挂接在同一总线上, 为单片机节约大量的硬件资源。
四、软件编写
在图2所示的键盘电路中, 由于MAX7348只具有兼容的I2C接口, 而SPCE061A单片机本身不具备I2C接口, 要实现二者之间的数据传输, 通常采用通用IO口软件模拟I2C的方式来实现。图3是MAX7348的总线时序。
由图3所示的时序图可以看出, 用软件模拟I2C总线的传输时序, 大致要经历构造开始条件、发送从机地址 (含读写标志位) 、等待从机响应、发送 (或读取) 1个字节数据 (或命令) 、
源程序请从www.ele169.com下载。
笔者编写的模拟I2C总线驱动程序, 经过多次调试, 程序符合I2C总线传输时序要求, 与I2C总线设备通讯可靠, 但需要注意的一点是:以上代码是在SPCE061A单片机默认时钟频率 (24M) 的情况下编写的, 如果采用较高的系统时钟, 需要在部分代码中间添加一些延时程序, 否则会出现数据丢失, 造成通讯错误。
五、小结
I2C控制器范文
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。


