当前位置:首页 > I2C
  • DM642的I2C息线配置与应用

    DM642的I2C息线配置与应用

        本文主要介绍的就是基于DM642的视频采集处理系统中I2C模块的正确初始化,以及通过I2C总线正确地对视频解码芯片SAA7115的寄存器读/写程序。   1 I2C总线控制器的初始化   为了正确使用DM642内置的I2C模块,首先需要正确的初始化。   1.1 解锁DM642中的I2C模块   在DM642的I2C应用中,容易遇到不能使用初始化I2C模块的问题,原因在于没有先解锁并使能I2C模块。在DM642的数据手册中可以看到,复位后I2C模块是处于锁定禁止状态的。也就是说,在硬件配置寄存器PERCFG中的I2CoEN位为0,所以在初始化前要在配置I2C模块控制寄存器之前,使能I2C模块。但是,如果要修改PERCFG中的内容,就要先向PCFGLOCK中写入0x10C0010C,对PERCFG解锁。通讨加下程序使能I2C模块:        1.2 I2C模块的时钟选择   在使能I2C模块后,就可以对其控制寄存器进行初始化了。CPU时钟频率为600 MHz,I2C模块规定模块时钟频率必须在7~12 MHz中选值,所以设定I2C模块时钟频率为10 MHz。由图1中的计算公式可得:IPSC为OEh。由于DM642和SAA7115都支持I2C总线的   400 kbps快速模式,根据IPSC的取值,由图1可知d=5。由此可以设定:ICCL=7,ICCH=8。        1.3 设置从地址时容易遇到的问题   需要注意的是,在DM642的I2C应用中经常会遇到不能正确读/写从设备的问题。这是因为DM642对I2C模块的从地址寄存器设置不同于其他芯片的I2C应用。在标准I2C协议中,器件的7位地址格式要将地址和读/写方向位一同送入从地址寄存器。但是,DM642的I2C的应用中只需要向从地址寄存器中送入7位器件地址,读/写方向位由DM642自动生成。例如,SAA7115的标准I2C写从地址为40H,如图2所示。        标准I2C协议中包括21H的地址信息和最后1位(读/写方向位),DM642只需将21H送入从地址寄存器。如果送入40H,将会导致读/写错误。   2 I2C读/写软件设计   2.1 配置模式寄存器I2CMDR   对SAA7115的每个子地址操作后,其地址指针会自动增加,但是它的可配置寄存器的自地址并不是连续分布的。所以将I2C工作模式寄存器(I2CMDR)配置为计数模式。每次执行I2C_write()只传送一次数据,通过多次调用I2C_write()来完成SAA7115的初始化。先向I2CMDR写入4620H,当读取SAA7115的寄存器时,设置为无重复主接收模式,并向I2CMDR写入4420H。   

    时间:2020-09-09 关键词: dm642 i2c 视频采集

  • I2C串行总线协议的VHDL实现

    I2C串行总线协议的VHDL实现

        串行总线和并行总线相比具有结构简单、占用引脚少、成本低的优点。常见的串行总线有USB、IEEE1394、I2C等,其中I2C总线具有使用简单的特点,在单片机、串行E2PROM、LCD等器件中具有广泛的应用。   I2C(Inter IC BUS)是Philips公司开发的用于芯片之间连接的总线。 I2C总线用两根信号线进行数据传输,一根为串行数据线(SDA),另一根为串行时钟线(SCL)。I2C总线允许若干兼容器件(如存储器、A/D转换器、D/A转换器、LCD驱动器等)共享总线。I2C总线理论上可以允许的最大设备数,是以总线上所有器件的总电容(其中包括连线本身的电容和连接端的引出电容)不超过400pF为限,总线上所有器件依靠SDA线发送的地址信号寻址,不需要片选线。任何时刻总线只能由一个主器件控制,各从器件在总线空闲时启动数据传输。I2C总线数据传输的标准模式速率为100kbps,快速模式速率为400kbps,高速模式速率为3.4Mbps。   用VHDL和CPLD设计数字系统具有传统方法无可比拟的优越性,它已经成为大规模集成电路设计最为有效的一种手段。为简单起见,本文采用VHDL设计标准模式的I2C总线控制电路。   1 I2C总线上的数据传输   I2C总线包含时钟线SCL和数据线SDA两条连线,SCL由主机产生。I2C总线的数据传输流程如图1所示。其传输过程为:首先主机产生起始位,然后传送第一个字节。8位数据中首先传送的是数据的最高位MSB,最低位LSB为读写指示位,1表示主机读,0表示主机写,高7位地址可使主机寻址128个从器件。        从机收到第一字节数据后发响应位,主机收到响应位后接着发送第二个字节的数据。数据发送完毕后产生结束位,数据传送结束。数据传送时,只有时钟SCL为低电平时SDA才允许切换,SCL为高电平时SDA必须稳定,此时SDA的电平就是总线转送的数值。   在SCL为高电平时,SDA线由高到低切换表示起始位,SDA线由低到高切换表示停止位。起始位和停止位由主机产生,在起始位产生后总线处于忙状态,停止位出现并经过一定时间后总线进入空闲状态。发送器每发送一个字节后,接收器必须产生一个响应位。响应位的驱动时钟由主机产生则接收器将SDA线拉低产生响应位。如果主机是接收器,则接收最后一个字节时,响应位为1,通知从机结束发送,否则响应位为0。当从机不能响应从机地址(例如它正在执行一些实时函数,不能接收或发送)时,或响应了从机地址但在传输一段时间后不能接收更多的数据字节,此时从机可以通过响应位为1通知主机终止当前的传输,于是主机产生一个停止位终止传输,或者产生重复开始位开始新的传输。   SDA线上传送的数据必须为8位,每次传送可以发送的字节数量不受限制。如果从机要完成一些其他功能(例如执行一个内部中断服务程序)才能接收或发送下一个数据字节,则从机可以使SCL维持低电位,迫使主机进入等待状态。从机准备好接收或发送下一个数据字节时,释放SCL,数据传输继续。   SDA和SCL都是双向线路,使用时通过上拉电阻连接到电源。总线空闲时这两条线路都是高电平,连接到总线的器件的输出级必须是漏极开路或集电极开路,这样总线才能执行“线与”的功能。   主机发完第一个字节后,数据传输方向的变化可能存在三种情况。(1)传输方向不变,如主机向从机写;(2)传输方向改变,如主机从从机读数据;(3)传输方向改变多次,如主机对从机进行多次读写。   2 时钟同步与仲裁   I2C总线在任何时刻只能有一个主机,当I2C总线同时有两个或更多的器件想成为主机时,就需要进行仲裁;时钟同步的目的就是为仲裁提供一个确定的时钟。时钟SCL的同步和仲裁通过“线与”来执行,SCL的低电平时间取决于低电平时间最长的主机,高电平时间取决于高电平时间最短的主机。   仲裁过程在数据线SDA线上进行,当SCL为高电平时,如果SDA线上有主机发送低电平,则发送高电平的主机将关闭输出级。因为总线的状态和自身内部不一样,于是发送低电平的主机赢得仲裁。仲裁可以持续多个位,在实际通信过程中,仲裁的第一阶段比较地址位,如果多个主机寻址同一个从机,则继续比较数据位(主机是发送机)或响应位(主机是接收机)。由于I2C总线上的地址和数据由赢得总线的主机决定,因此仲裁过程中不会丢失信息。如果一个主机具有从机功能,则当它失去仲裁时,必须立即切换到从机状态,因为它可能正在被其他主机寻址。   

    时间:2020-09-08 关键词: 串行总线 vhdl i2c

  • Maxim Integrated利用1-Wire协议大幅降低设计复杂度,提供业界最低成本的方案,用于构建远端连接的I2C和SPI传感器网络

    Maxim Integrated利用1-Wire协议大幅降低设计复杂度,提供业界最低成本的方案,用于构建远端连接的I2C和SPI传感器网络

    中国,北京—2020年8月13日—Maxim Integrated Products, Inc 宣布推出DS28E18 1-Wire®至I2C/SPI桥接芯片,用于扩展远端传感器网络连接,帮助设计师将系统设计复杂度及其成本降低至业界最低水平。采用Maxim Integrated的1-Wire协议连接I2C和SPI兼容传感器,DS28E18只需两根线即可连接器件,而竞争方案则要求4根线连接I2C或6根线连接SPI,从而大幅降低系统复杂度。 在工业及远程监测应用中,大多数设计通过串行接口连接远端传感器。而当传输距离达到100米时,为了连接远端传感器,主流的串口协议将需要多达5个外部开关和扩展器件,大大提升了设计成本和复杂度。此外,目前广泛采用的串行接口通常要求6根电缆将远端传感器连接到主控制器。 DS28E18能够在同一电缆线上支持供电和数据传输,使用Maxim Integrated的1-Wire协议连接长达100米的I2C或SPI外设器件只需使用2根线。该方案可最多省去5个扩展器和开关IC,大大降低连接成本和软件开发复杂度。此外,构建一个10至20节点的网络只需占用主控制器的一个可编程I/O端口。 主要优势 · 高度集成:将网络连接延长到100米,省去多达5片扩展器和开关IC;可以省去外部电源; · 更低成本:仅用2根线支持自主操作,从而节省多达4根电缆; · 降低复杂度:将1-Wire协议转换为I2C和SPI主机接口,在同等配置下降低主控制器的物理层设计和软件开发复杂度。 评价 · “传感器增强了数据收集,实现更智能的操作,对于传感器数量的需求正在改变消费类、工业和医疗健康产品设计。” Omdia公司MEMS及传感器产品首席分析师 Manuel Tagliavini表示:“但是,串行接口仍然在这些传感器中占据主导地位,任何有助于降低传感器连接复杂度的方法都会是开发者的福音。” · “随着传感器在许多应用中变得越来越普及,将传感器连接扩展到更远距离的需求也在不断增长。”Maxim Integrated嵌入式安全部门执行总监Scott Jones表示:“为了高成效地延长串行接口设备的工作距离,为系统设计带来很高的复杂度。我们的1-Wire协议可以帮助用户使用更简单的软件和更少的电缆及IC,大大简化网络设计。” 供货及价格 · DS28E18的价格为0.64美元(1000片起,美国离岸价),可通过Maxim网站及特许经销商购买。 · 提供DS28E18EVKIT# 评估套件,价格为89.25美元。

    时间:2020-08-13 关键词: 传感器网络 spi i2c

  • Arduino主从机之间的I2C通讯实验

      I2C简介   I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件.在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件寻址从器件.然后主机接收从器件发送的数据,最后由主机终止接收过程。在这种情况下.主机负责产生定时时钟和终止数据传送。   I2C工作原理   SDA(串行数据线)和SCL(串行时钟线)都是双向I/O线,接口电路为开漏输出.需通过上拉电阻接电源VCC.当总线空闲时.两根线都是高电平,连接总线的外同器件都是CMOS器件,输出级也是开漏电路.在总线上消耗的电流很小,因此,总线上扩展的器件数量主要由电容负载来决定,因为每个器件的总线接口都有一定的等效电容.而线路中电容会影响总线传输速度.当电容过大时,有可能造成传输错误.所以,其负载能力为400pF,因此可以估算出总线允许长度和所接器件数量。   主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件.在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件寻址从器件.然后主机接收从器件发送的数据,最后由主机终止接收过程。在这种情况下.主机负责产生定时时钟和终止数据传送。   2C总线特点   (1)在硬件上,12C总线只需要一根数据线和一根时钟线两根线,总线接口已经集成在芯片内部,不需要特殊的接口电路,而且片上接口电路的滤波器可以滤去总线数据上的毛刺.因此I2C总线简化了硬件电路PCB布线,降低了系统成本,提高了系统可靠性。因为12C芯片除了这两根线和少量中断线,与系统再没有连接的线,用户常用IC可以很容易形成标准化和模块化,便于重复利用。   (2)I2C总线是一个真正的多主机总线,如果两个或多个主机同时初始化数据传输,可以通过冲突检测和仲裁防止数据破坏,每个连接到总线上的器件都有唯一的地址,任何器件既可以作为主机也可以作为从机,但同一时刻只允许有一个主机。数据传输和地址设定由软件设定,非常灵活。总线上的器件增加和删除不影响其他器件正常工作。   (3)I2C总线可以通过外部连线进行在线检测,便于系统故障诊断和调试,故障可以立即被寻址,软件也利于标准化和模块化,缩短开发时问。   (4)连接到相同总线上的IC数量只受总线最大电容的限制,串行的8位双向数据传输位速率在标准模式下可达100Kbit/s,快速模式下可达400Kbit/s,高速模式下可达3.4Mbit/s。   (5)总线具有极低的电流消耗.抗高噪声干扰,增加总线驱动器可以使总线电容扩大10倍,传输距离达到15m;兼容不同电压等级的器件,工作温度范围宽。

    时间:2020-08-05 关键词: Arduino i2c

  • 基于I2C接口与上级无线传感器网络通信的环境监测系统

    基于I2C接口与上级无线传感器网络通信的环境监测系统

    本项目开发了一个使用 Xilinx 公司的 SPARTAN3A-DSP FPGA 作为目标开发板,采集数字和模拟传感器数据,并将传感器数据采用 I2C 接口与上级无线传感器网络进行通信的环境监测系统。使用 VHDL 语言编写了温湿度数字传感器(SHT1x)和气压模拟传感器(MPX599D)的接口模块、I2C 输出接口模块和总控模块。制作了与 SPARTAN3A-DSP 与接口电路板,接入模拟、数字传感器信号量。本项目利用FPGA 的可编程特性,搭载不同的传感器,与无线传感器网络相结合,可以提高无线传感器网络系统承载不同传感器应用的能力。I2C 的标准输出接口也使得系统具有扩展连接各类上级微控器的能力。 1.概述 1.1 项目背景 在随着微处理器的发展,各类设备日趋向网络化发展,物联网 2009 年已引起了广泛关注,据预测 2010 年无线传感器应用将成为最新的电子智能社会的热点。随着材料科学、电化学科学、生物科学的不断发展,新类型的传感器产品层出不穷。而目前市面上所售的传感器采集板,都是一经定型就无法改变的。FPGA产品的特性在于可以进行反复修改硬件设计。为此,产生使用 FPGA 来设计各类传感器接入的思考。其系统优点在于,当系统接入的传感器发生改变时,可以重新设计 FPGA接口电路模块使得其容纳新产品。为此,本项目试用 FPGA 将无线传感器网络和典型的数字、模拟传感器相连,满足环境监测的需要。 如图 1-1 所示,其中,虚线框表示外部自然环境、圆形表示传感器,方框表示基于 FPGA 的环境监测系统,天线表示 I2C 接口设备、云表示无线传感器网络、PC 机表示用户终端。 整个工作流程为:传感器通过 FPGA 上 的 EXP 接 口与环境监测系统相连。系统通过发送命令,从传感器上采集数据。数据采集后,系统将从传感器采集来的数据使用 I2C 接口输出,例如可以通过无线传感器网络传输,并最终将结果输出到终端。从而实现对外部环境的监测。 图 1-2. 基于 FPGA 的环境监测系统框图

    时间:2020-07-29 关键词: 环境监测 无线传感器网络 i2c

  • 纳芯微推出NCA9xxx I2C接口产品系列,为客户在I2C接口设计中提供一站式解决方案

    2020年6月17日-国内领先的信号链芯片及其解决方案提供商苏州纳芯微电子股份有限公司(以下简称“纳芯微”)日前宣布推出五款I2C总线接口类芯片产品,适用于各种工业、企业和消费类应用中的控制总线设计,例如安防、电力电子、个人电脑、企业交换机、服务器等领域。该系列新产品包括I2C/SMBus通用总线I/O扩展器NCA9555、I2C/SMBus热插拔缓冲器NCA9511、四通道I2C/SMBus多路复用器NCA9545、I2C/SMBus双路双向缓冲器NCA9617以及I2C/SMBus电平转换器NCA9306,这五款芯片可在-40℃至85℃的宽温工作范围内稳定运行,闩锁性能超过100mA,均符合JESD78II类规范,兼容绝大部分MCU I/O电平,提高系统集成度,并带来更优的性能和更低的成本。 NCA9xxx系列产品可以为工程师提供最大的控制总线设计灵活性。伴随物联网等应用的发展,系统设计复杂度在持续增加,多个主设备和大量终端设备往往存在于一个系统中,多设备之间互连所导致的超长走线进一步影响增加控制总线布局难度,也带来更多信号完整性的挑战,NCA9xxx提供了应对这些挑战的理想解决方案。利用NCA9xxx系列芯片,工程师不但能让系统满足功能拓展需求,还能简化电路设计从而改善信号完整性与EMI,最终有效节省开发时间并降低系统总成本。 NCA9xxx全兼容市场主流I2C接口类芯片,用户无需修改设计就可以直接更换,降低成本并提高性能,帮助客户应对因国际贸易纠纷而导致的供应风险。 纳芯微首席执行官王升杨表示:“I2C是当前最通用的设备管理总线,应用广泛,开发成本低,广受工程师喜爱。NCA9xxx系列I2C接口产品满足工业级温度要求,兼容市面大部分MCU的接口电平,完全满足系统开发中对I2C总线的功能与性能需求。该系列产品从设计、制造到封装测试全部实现国产化,确保供应的安全与可靠。此外,纳芯微还提供灵活的库存管理机制,以更好地满足国内客户的交付需求。” 纳芯微NCA9xxx I2C接口产品系列采用业界通用的小型封装, 包括TSSOP24、MSOP8、SOP8、TSSOP20、TSSOP16等,具体型号的封装形式可至官网查看或发邮件至sales@novosns.com 索取产品规格书。 附录:NCA9xxx系列产品信息 NCA9555: 具有中断输出和可配置寄存器的16 位 I2C 和 SMBus I/O 扩展器 产品特点: ·I2C 至并行端口扩展器 ·16 GPIO 端口, 默认输入 ·工作电压2.3~5.5V ·3地址引脚,支持8个不同地址 ·开漏电路低电平有效中断输出 ·可耐受 5V 电压的 I/O 端口 ·兼容大多数微控制器 ·400kHz 快速 I2C 总线 ·极性反转寄存器 ·具有最大高电流驱动能力的锁存输出,可用于直接驱动 LED ·锁断性能超过 100mA NCA9555是一款24针CMOS器件,可为I2C总线应用提供16位通用并行输入/输出(GPIO)扩展。当ACPI电源开关,传感器,按钮,LED,风扇等需要额外的I/O时,它提供了一种简单的解决方案,实现低至0.25uA的待机功耗。 NCA9511:热插拔I2C总线和SMBus缓冲器 产品特点: ·支持 I2C 总线信号双向数据传输 ·工作电源电压范围为 2.3V 至 5.5V ·TA 环境空气温度范围-40°C 至 105°C ·对所有 SDA 和 SCL 线路的 1V 预充电可防止带电板插入过程中发生损坏 ·可适应标准模式及快速模式 I2C 器件 ·支持时钟展宽、仲裁及同步 ·断电高阻抗 I2C 引脚 NCA9511是一款可热插拔的I2C总线缓冲器,支持将I/O卡插入带电背板,而不会损坏数据和时钟总线。控制电路可防止背板侧I2C线(输入)连接到卡侧I2C线(输出),直到背板上发生停止命令或总线空闲状态而卡上没有总线争用为止。建立连接后,该设备将提供双向缓冲,从而使背板和卡的电容保持分离。在插入过程中,SDA和SCL线被预充电至1V,以最大程度地减小为器件的寄生电容充电所需的电流。 NCA9545:具有中断逻辑和复位功能的4 通道 I2C 和 SMBus 多路复用器 产品特点: ·4选1 I2C选择器 ·支持4中断输入,1输出 ·2地址引脚,支持4个不同地址 ·0~400K I2C 时钟 ·电源电压范围2.3V~5.5V ·闩锁性能超过JESD78要求的100mA NCA9545是一款通过I2C总线控制的四路双向转换开关,支持热插拔。串行时钟/串行数据(SCL/SDA)上行对分散到四个下行对,或者通道。根据可编程控制寄存器的内容,可选择任一单独SCn/SDn通道组合。提供四个中断输入(INT3-INT0),每个中断输入针对一个下行对。一个中断(INT)输出可作为四个中断输入的与(AND)操作。 NCA9617:I2C和SMBus双路双向缓冲器 产品特点: ·双通道双向缓冲器 ·支持标准模式/400K/1Mhz I2C模式 ·0.8V ~ 5.5V到2.2V~5.5V电平转换; ·VCC掉电时I2C BUS高阻态 ·闩锁性能超过JESD78要求的100mA NCA9617是一款专门用于I2C总线和SMBus双路双向缓冲器,支持标准模式、快速模式(400kHz)和快速模式+(1MHz)。此器件可在混合应用中提供低电压(低至0.8V)和较高电压(2.2V至5.5V)间的双向电压电平转换(上行转换模式和下行转换模式)。电平转换期间,在不损失系统性能的情况下可扩展I2C和相似的总线系统。 NCA9306:2 位双向 I2C 总线和 SMBus 电平转换器 产品特点: ·双通道双向电平转换 ·可实现以下电压之间的电压电平转换 ·1.2V to 1.8V/2.5V/3.3V/5V ·1.8V to 2.5V/3.3V/5V ·2.5V to 3.3V/5V ·3.3V to 5V ·0~1Mhz I2C 时钟 ·漏极开路I2C I/O端口 ·闩锁性能超过JESD78要求的100mA NCA9306器件是一款采用使能(EN)输入的双路双向I2C和SMBus电压电平转换器,可以在1.2V到5V之间实现双向电压转换而无需使用方向引脚。 此开关具有低导通状态电阻(RON),最大传播延迟小于1.5ns,可以在最短传播延迟情况下建立连接。当EN为高电平时,转换器开关打开,并且SCL1和SDA1 I/O被分别连接至SCL2和SDA2 I/O,从而实现端口间的双向数据流。当EN为低电平时,转换器开关关闭,在端口之间存在一个高阻抗状态。除了电压转换,在快速模式通信过程中控制EN引脚以断开较慢总线的连接,NCA9306器件还可用于将400kHz总线与100kHz总线隔离开。

    时间:2020-06-17 关键词: 纳芯微 接口产品 i2c

  • I2C总线控制的高性能音频处理电路设计

    I2C总线控制的高性能音频处理电路设计

    0 引 言   当前汽车音响与高保真的立体声音响系统中都包含了微处理器电路单元,这为实现音频处理提供了控制接口,可以通过控制接口实现许多需要的功能控制。作为音响系统主体的音频处理电路性能直接决定了整个音响系统质量,设计高性能的音频处理电路是该文的核心部分。   该设计的高性能音频处理电路基于I2C总线控制协议,包含输入多通道选择、音量控制、高低音音效处理、输出通道平衡度调整等功能,适合应用于高质量汽车音响、高保真收音机、彩电、家庭组合音响系统。   1 电路模块的设计   高保真音响系统的系统结构图如图1所示.其中音频处理电路的设计和功率放大器的设计往往是利用不同的芯片来完成的。

    时间:2020-06-07 关键词: 总线 音频处理电路 i2c

  • LED舞台和建筑照明色彩控制:基于I2C控制功能LED的13位色彩控制

    LED舞台和建筑照明色彩控制:基于I2C控制功能LED的13位色彩控制

    红、绿、蓝(RGB)LED可用于建筑和舞台照明系统,用以形成明亮的投影色彩——有时会在RGB组合中添加白色LED,从色调、饱和度和亮度方面扩展色彩范围(图1)。无论色彩分量有多少,都必须精确控制每个色彩分量的亮度,以便对色彩进行预测或是补偿LED之间的色差。可用色彩的数量取决于每个组成色的可分辨亮度级的数量。一些系统提供分辨率低至全亮度1/256(8位)。也可能实现更高的分辨率,并产生更多的色彩(图2),形成更强的控制力。 图1.Cree XM-L RGBW高功率LED可由两个LT3964 LED驱动器驱动,每通道调光精度可达1:8192。 控制宽LED亮度范围最精确的方法是使用PWM调光控制。内置PWM调光时钟和数字寄存器(用于设置调光比)的LED驱动器是RGBW系统的最佳选择。对于大型复杂系统——由许多不同RGBW LED构成的系统——使用串行通信总线可在数字增强型LED驱动器中实现这些寄存器的动态设置。 图3所示为RGBW LED的两种驱动和调光方法。第一种是矩阵LED调光器方案,它曾经是高功率RGBW LED阵列的最佳数控方式。第二种是直接驱动方案,它采用四个分立的数字增强型LED驱动器,每种色彩(R、G、B和W)各一个,更精确、更高效、纹波更低。在这种系统中,每个单独的LED或LED串的电流或PWM调光波形均由其自己的LED驱动器和控制信号驱动,如图2所示。在矩阵调光器方案中,单个LED调光器可控制多达8个LED的PWM电流。该系统额外需要一条高压线和一个低输出电容降压LED驱动器,用于驱动LED串。高压轨可能需要一个额外的升压调节器,LED电流(来自低输出电容降压驱动器)可能有高纹波。 图2.I2C控制的LT3964 RGBW LED驱动器可为舞台或建筑照明装置中使用的高功率LED提供前所未有的色彩控制能力。驱动器解决方案通常提供8位色彩分辨率。基于LT3964的解决方案可实现13位色彩分辨率——使用本文中介绍的比较简单的降压驱动设置可以轻松实现。 图3.大型RGBW LED阵列的两种供电和色彩控制(分量调光)方法:(a)使用LT3965的矩阵调光器与(b)LT3964直驱解决方案。LT3964非矩阵解决方案具有更出色的色彩控制能力,卓越的效率和更低的纹波。 采用大量RGBW LED的照明系统需要大量的驱动器,并且控制信号要与这些驱动器同步。性能最好的方法是用高性能LED驱动器直接控制每个LED。在这种方法下,既能控制每个LED的PWM调光及直流电流和电压,还能将纹波降至最低水平,并大幅提高可预测能力。使用通过串行总线控制的双降压LED驱动器LT3964,可以轻松实现这类系统。 具有I2C调光控制能力的双降压LED驱动器 具有I2C控制和报告功能的LT3964双降压LED驱动器是一款理想的解决方案,可以通过串行通信技术驱动具有高电流和高带宽的多个LED或LED串。降压调节器具有固有的高带宽,LT3964在单个封装中有集成了两个36 V、2 MHz同步和高频降压LED驱动器,还集成了2 A开关,可以相对轻松地驱动多通道大电流LED。 I2C串行通信功能简化了每个LT3964支持的两个独立高电流LED通道的模拟和PWM调光功能,在单个I2C总线上有多达八个不同的LT3964地址。例如,图4中的2 MHz双通道1A降压LED驱动器示例电路具有高效率和超小尺寸等特点,可将其更改为通过34 V至36 V输入为每个通道提供高达30 V的LED电源(如数据手册中所示),效率高于90%。 图4.2 MHz双通道1A(或以上)降压LED驱动器演示电路DC2424A具有高效率和紧凑布局的特点。如数据表所示,可将其更改为通过34 V至36 V输入为每个通道提供高达30 V的LED电源——效率高于90%。 13位RGBW色彩控制 两个LT3964驱动器足以用1 A(或以上)驱动单个或一串RGBW LED,如图5所示。虽然RGBW色彩通常以1:256、8位分辨率控制,但LT3964可以为每个通道提供高达1:8192、13位的PWM调光功能以及1:10的模拟调光功能——全部由I2C控制。 图5.可以用两个LT3964驱动器以1A以上的电流驱动单个或一串RGBW LED。每个RGBW分量色彩均受调光分辨率(通常为1/256或8位分辨率)的限制。基于LT3964的解决方案可提供更高的分辨率,可为每个通道实现高达1/8192或13位PWM调光功能以及1/10的模拟调光功能——全部由I2C控制。 这种直驱方法允许分量RGBW LED在亮度和电压方面存在较大差异——每个通道完全独立。在此示例中,单个Cree RGBW LED由四个LT3964通道驱动,每个通道输出1A电流。通过简单更改数字寄存器,亮度和色彩控制可扩展至1:8192 PWM调光,并且1/10模拟调光可支持每个红、绿、蓝、白LED。对色彩的唯一真正限制是LED本身。实际上,如果需要,如此强大的混色控制能力允许对LED进行色彩校正。 轻松同步大阵列和低纹波工作模式 集成的同步功率开关和2 MHz开关频率可实现超小尺寸的解决方案,每个LED通道都有一个小电感和一个瓷片输出电容。LT3964的CLKOUT和SYNC引脚允许两个IC同步,防止不必要的拍频,并通过串行通信保持PWM调光的统一时序。这样就不需要从外部时钟源为两个IC提供时钟,从而简化了解决方案。 图6展示了该4通道双IC解决方案的低纹波输出电流,与上面提到的更高纹波矩阵LED调光器解决方案形成对比。显然,非矩阵直驱LT3964解决方案的LED电流波形比矩阵调光器解决方案更清晰;矩阵调光器解决方案由于输出电容较小,所以其纹波含量较高。 图6.与更高纹波矩阵LED调光器解决方案相比,4通道双降压LED驱动器解决方案的纹波电流较低。LT3964的LED电流波形比调光器解决方案清晰。 灵活、直观的降压方案 LT3964非常灵活,可支持需要四个以上色彩分量的系统。RGB(W) LED的色域如图7所示。当需要更宽的色彩范围时,可以添加两个额外的LED元件,例如琥珀色、额外绿色甚至青色LED。要驱动其他分量色彩,只需将另一个LT3964连接到同一I2C总线即可。 图7.可见色域包括RGB色域中不存在的色彩。当需要扩展范围时,只需添加一个连接在同一I2C总线上的LT3964,即可添加两个额外的LED元件,例如琥珀色、额外绿色甚至青色LED。 并非所有RGBW混色LED系统都使用单片RGBW LED芯片。在部分系统中,将独立的红、绿、蓝LED串集成到更大、更亮的灯具当中。只要LED串电压低于输入电压,每个LT3964降压通道就可以驱动具有不同电压的LED串。单个LT3964通道可以1A或以上的电流驱动高达30 V的LED串。 I2C串行通信 使用LT3964 LED驱动器时,有两种模拟和PWM调光控制方案可选。一种方案是在不使用串行总线的情况下直接用外部电压驱动调光引脚。在非I2C模式下,对于LED模拟调光,CTRL1和CTRL2引脚由可调直流电压驱动;PWM1和PWM2引脚由脉冲信号驱动,占空比与LED的PWM调光亮度相对应。在此方法中,LED PWM频率与PWM引脚输入同步,LED亮度和LED电流占空比与PWM引脚输入脉冲相匹配。在较大的系统中,为大量通道生成PWM和模拟调光输入信号组合可能非常复杂。 第二种可能更有效的方法是使用串行通信总线(例如I2C)来控制每个LED通道或串。简单的2-线I2C总线用于通过单个主控器件(如小型微控制器)控制8个不同从属器件的功能。I2C总线主机运行速率高达400 kHz,只需生成三个字节即可对LT3964从属器件上9个寄存器中的每个寄存器进行更新。有四个PWM寄存器、两个模拟调光寄存器、一个用于设置故障的状态使能寄存器、一个用于读取故障的状态寄存器以及一个用于一些全局功能的配置寄存器。I2C写命令的三个字节包括地址、子地址和数据字。图8所示为LT3964串行通信中使用的不同I2C写字和读字。 图8.LT3964 I2C串行通信使用标准I2C写字和读字。 LT3964具有基于I2C的13位(1:8192)PWM调光功能。通过写入每个通道的两个PWM调光寄存器来设置PWM调光占空比和频率,如图9所示。图10所示为结果形成的ILED波形。通过一系列快速I2C写操作,可以轻松更新多达16个不同的通道(每个通道两个地址,总共八个 图9.LT3964具有13位(1:8192)PWM调光功能和I2C。通过写入各通道的两个PWM调光寄存器设置PWM调光占空比和频率。此处,通道2设为1:8192调光,而通道1则设为128:256模拟调光。 图10.ILED波形,所示为1:8192调光。 图11.LT3964 DC2424A演示电路可通过QuikEval借助免费的图形用户界面进行控制。在每个页面上,可以设置寄存器元件,然后通过USB和Linduino DC2026C演示电路按下按钮即可发送I2C写命令或读命令。可以为任何地址设置IC地址位,该图形用户界面可以同时与多个LT3964 IC通信。 图12.I2C寄存器包括故障保护设置和读取。LT3964可以通过其ALERT引脚和I2C状态寄存器报告每个通道的故障。仅在状态寄存器单独使能且发生故障时才会报告故障。可以使能、报告和读取两个通道的开路LED、短路LED、过流和过压反馈故障。也可以禁用和忽略这些故障。 除PWM调光控制外,每个通道还有一个8位模拟调光寄存器,可通过单个写命令进行更新。调用模拟调光时,通常仅使用低至约1/10的调光。更常见的情况是,PWM调光专门用于RGBW混色——足以实现精确和可重复的色彩创建,无需添加模拟调光。然而,在需要扩展控制的系统中,可以使用盒子里的直流LED电流调节工具。 其他I2C寄存器包括故障保护设置和读取功能。LT3964可以通过其ALERT引脚和I2C状态寄存器报告每个通道的故障。仅在状态寄存器单独使能且发生故障时才会报告故障。可以使能、报告和读取两个通道的开路LED、短路LED、过流和过压反馈故障(图9)。也可以禁用和忽略这些故障。故障保护有可能是任何串行通信系统的关键部分。 2 MHz演示电路和QuikEval 通过I2C可以轻松生成原型并评估LT3964 LED系统。ADI公司已经创建了一个演示电路,其中包括用于测试串行通信的图形用户界面。当通过USB用Linduino®One演示电路(DC2026C)连接到PC时,该系统使用QuikEval™程序。演示电路手册中包括快速入门指南,其中描述了连接和评估LT3964演示电路DC2424A的方法。简而言之,当通过DC2026C (Linduino)连接到USB时,可以对LT3964演示电路串行通信进行评估,一次一个命令。 图9、11和12显示了LT3964演示电路易于使用的图形用户界面页面。在每页上,可以设置寄存器元件,然后通过I2C串行总线进行更新。可以更新每个通道的模拟和PWM调光寄存器,以及状态使能位、全局配置寄存器和状态使能位。对于通过总线发送的每个I2C命令,该界面显示了生成的地址、子地址和数据位。也可以通过图形用户界面的读取命令对寄存器进行读回操作。如果在测试期间发生故障,图形用户界面会在左上方显示警报信号(图13),并且可以采取步骤检查故障的性质并通过STATUS和STATUS ENABLE寄存器清除故障。 图13.使用图形用户界面和Linduino,通过I2C带状控制排线,可以连接两个现成的DC2424A演示电路,用于驱动RGBW LED或LED串。 在单个RGBW系统中,I2C总线上需要两个独立的IC地址(用于四个LED分量)。默认情况下,图形用户界面会将所有命令发送到默认地址“1100”,但可以更改该地址。该地址显示在每个页面的右上角,可以通过单击数字进行更改。由此,可以通过图形用户界面来控制和读取多达八个地址的调光和状态寄存器。此外,图形用户界面的数字字页面允许用户手动输入任意三个地址、子地址和数据字,并将它们作为I2C命令发送出去。用户可以查阅数据表或图形用户界面的其他页面,生成读和写命令,这些命令显示在屏幕底部的串行数据日志中。 从图13可以看出,使用图形用户界面和Linduino,可以通过I2C控制排线轻松地将两个现成的DC2424A演示电路连接起来。SDA和SCL 2-线I2C线路在总线上共享,警报信号与Linduino排线连接在一起。每个LT3964的ALERT引脚都是一个开路集电极下拉,因此当任何IC上发生故障时,主机都可以检测到。发生这种情况时,图形用户界面会在左上角显示一个红色ALERT标志圆圈。一旦主控微控制器检测到系统故障,就会根据警报响应协议检测和/或清除故障。 故障检测与协议 LT3964具有广泛的故障保护功能。它可以顺畅地处理LED串的开路和短路故障。它还可以处理输出的过流故障,这些故障不一定是短路。发生这些故障时,LT3964的ALERT故障标志会置位。在同一总线上共享时,若系统中任何LT3964出现故障,ALERT总线会被拉低(置位)。I2C通信首先可用于定位故障IC,然后诊断故障本身。可以在状态使能寄存器中设置可置位ALERT标志的故障类型。此处可以使能或禁用短路LED或LED过流等故障。 在ALERT置位之后,用广播读取命令轮询从属IC,找出置位警报的IC。在出现多个警报的情况下,较低地址的IC首先发送其地址。下一步是读取故障地址的STATUS寄存器。结果应该能提供足够的信息来诊断故障并清除故障标志。如果故障标志保持置位,则另一个广播读取命令可以检查后续故障地址。当完成对故障地址和状态寄存器的读取时,可以通过向故障地址发送写命令来清除故障状态位。如果故障未清除,则可以通过报告提出服务需求,或者关闭使能故障的状态位,忽略故障。 图14.使用LT3964双降压驱动器和I2C串行通信的完整高功率RGBW LED数控示意图。两个LT3964足以用1A电流驱动单个RGBW LED或RGBW LED串,实现精准调光,产生可预测且可重复的色彩分量。 结论 具有I2C串行通信功能的LT3964双降压LED驱动器可用于存在大量高功率LED和LED通道的计算机控制照明系统。两个LT3964足以用1A电流驱动单个RGBW LED或RGBW LED串,实现精准调光,产生可预测且可重复的色彩分量。 使用现成的DC2424A演示电路和免费的QuikEval PC软件,可以轻松进行评估。LT3964的共享I2C 2-线串行通信总线可用于控制多达8个地址和16个开关通道。其宽输入电压范围和紧凑但功能强大的集成式同步降压开关在每个通道上可支持高达30 V的LED。高达2 MHz的开关频率能够实现紧凑型设计和小型电感,这对于在具有众多LED和通道的大型系统中复制驱动器电路非常重要。 作者简介 Keith Szolusha是加利福尼亚州米尔皮塔斯ADI公司的LED驱动器应用经理。他拥有麻省理工学院的电子工程学士学位(1997年)和电子工程硕士学位(1998年)(马萨诸塞州剑桥),主修技术写作。

    时间:2020-06-04 关键词: LED i2c

  • 恩智浦基于I2C接口的LED驱动器,高可靠性和高性价比

    恩智浦基于I2C接口的LED驱动器,高可靠性和高性价比

    现在大街上随处可见的LED显示屏,还有装饰用的LED彩灯以及LED车灯,处处可见LED灯的身影,LED已经融入到生活中的每一个角落。LED无疑是当前最热的一个应用,无论是手持设备、游戏机、霓虹灯、广告牌等等,眩目的色彩及高质的光亮,总能第一时间吸引人的眼球。在当前众多的LED控制器面前,如何选择一款功能丰富且性价比又高的产品来迎合自己的设计,无疑是摆在每个设计师面前的问题。 最简单的LED驱动,我们可以用普通的I/O来实现。但I/O控制只能实现LED的ON与OFF,无法用来进行混光、闪烁等功能,而且每个LED都需要占用一个单独的I/O资源,无疑性价比很低。我们也可以用专用的大电流LED控制器来设计,但昂贵的成本首先会成为问题,而且设计复杂,程度也会跟着各种干扰的出现相应地提高。 基于这些,恩智浦(NXP)推出一系列使用I2C接口的LED驱动器,它可以通过I2C接口的两根线,去同时控制从4个到24个不等LED的ON/OFF、闪烁及RGB混光。在混光方案里,每个LED都是由一个独立的8bit/256阶PWM来驱动。目前,通过芯片本身能驱动的每个LED电流范围为25mA到100mA之间。当然,对于一些大电流的应用场合,我们只需用外加场效应管的方式来实现。 这种基于I2C的LED控制方式,增加了设计的方便性与灵活性,而且也会减少在软硬件方面的投入,使披着神秘面纱的LED对我们来讲顿时显得简单和精彩。下面,我们将会以恩智浦LED驱动器PCA9633为例,通过几个简单的应用来全面阐述这种LED驱动器的优势所在。PCA9633是四路LED驱动器,且每路可驱动最大25mA电流,并根据封装的不同提供了可选的固定I2C地址和带4位或7位硬件可编硬件地址(图1)。 从图1我们可以看到,每一路LED都是由一个单独的8bit/256阶的PWM来控制,且由于PWM足够快,使其理论上可以通过它所驱动的四个LED混出任意颜色的光。除了每一路单独的PWM,PCA9633还提供了一个Group PWM,通过它我们可以用来控制所调混色光的亮度及频率,弥补了只调单个PWM不能实现的一些功能。那么PCA9633究竟如何来实现调光呢?秘密还是在PWM上面。如果不使用PWM,那么它只能完成开和关的动作;低速的PWM只能实现LED闪烁,并不足以达到混色的目的;高速的PWM就可以实现RGB混色;如果PWM速度可控,那么就可以实现闪烁和混色的双重功能。而且通过可控的8bit/256阶PWM,加大了色阶提升了色彩的层次感(见图2)。 知道了混色的原理,那么一个具体的色彩又是如何产生的呢?我们知道人眼对色彩的感知是各种色彩亮度均值的叠加,我们可以通过控制PCA9633每个PWM的占空比,去控制所驱动LED的亮度。根据三基色原理,如果我们驱动的是RGB(或者RGBA)LED,那么通过调节这三个LED的不同光亮,就可以得到所要的色彩。图3是PCA9633控制RGB三个LED来调粉色光的例子。 通过以上的描述,我们基本知道了PCA9633的内部结构和驱动原理。下面我们将会以PCA9633固定I2C地址的几个应用,来进一步理解这种LED控制器的优势所在。 第一个应用,我们将用PCA9633来控制亮度条。我们知道一般像亮度条这样的应用,往往需要用到大量LED串联来进行。如果用单个接口去控制每个LED,会使成本和软件复杂度大大增加。而通过I2C,在硬件上只需要两条控制线,在软件上只需发一条字节命令,就可以轻松进行操控。除此之外,由于I2C器件地址的唯一性,可以按所驱动LED的数量使用几个PCA9633来进行控制。如果实际应用中PCA9633本身的驱动电流不够,只需在外围加一个FET就可以轻松解决。另外,PCA9633独有的Group PWM使得控制整个亮度条的光强和闪烁变的得心应手。下面是其原理图(见图4),其中I2C master由系统提供,可以是MCU,也可以是逻辑电路。 图4中左半部为I2C的master,不作细述。右边最上为LED限流电阻,通常LED的前向电压为3V左右,根据不同的颜色和制造工艺会有一些差别。我们可以通过所需LED电流去计算这个限流电阻的值:R=(Vsupply-Vfsum)/If。如果所需的LED电流大于25mA,那么图中所加的FET可以轻松解决这一问题。当我们外加了FET以后,只需把PCA9633的相应寄存器的OUTDRV设为高就可以了,以区别于它的默认值。 现在我们可以看到用PCA9633去控制如此多的LED,原理图相当简洁,同样在软件设置寄存器上也同样方便。PCA9633提供了简易且完整的内部寄存器,例如LED输出结构设置、节电模式设置、芯片使能模式设置、LED的输出状态设置,以及每个PWM和Group PWM的控制寄存器设置等。除此之外,PCA9633还提供了一个寄存器设置递增位,也就是说如果我们设置了这一位,那么我们可以通过一个指令序列来完成内部所有寄存器的顺序配置,这在一些特定的应用中是非常有用的,能最大程度节省软件和系统资源。下面,我们将通过另外一个例子来说明内部寄存器的设置。 第二个例子是我们用PCA9633来完成呼吸灯的功能。虽然PCA9633内部不带呼吸灯模块,但我们可以通过一些简单的寄存器设置来实现这个功能,这样相比于专用的呼吸灯芯片在成本上无疑有很大的优势。为了便于说明,我们只用PCA9633来控制一个LED的呼吸动作,原理图很简单,在此略去,通过控制这一个LED的渐亮与渐暗过程以达到呼吸的目的。要实现这个功能,PCA9633的独立PWM将是最主要的因素。如前我们已经提到每个LED都是由一个8bit/256阶PWM来控制,那么也就是说,每个灯有256段亮暗色阶可调,可以完美实现呼吸功能。具体,我们通过控制PWM的占空比来完成。如果我们的LED是由PCA9633的PWM0来控制,那么PWM0的占空比将决定这个LED的亮度:Bright(duty cycle)=PWM0[7:0]/256。 到此,一个完整的呼吸过程就完成了,用几个简单的寄存器设置,就完成了看起来似乎只有用复杂系统或专用芯片才能做的事情。从以上两个例子,我们可以看到用恩智浦的I2C LED驱动器,不论是硬件上还是软件上都是非常简单和易操作的,而且用此类器件所能实现的功能,丝毫不比一些系统和专有芯片逊色。 综上所述,恩智浦I2C LED驱动器提供了高性价比的LED设计方案,相比于用GPIO或专用LED驱动器,不仅节省了系统资源,也使设计的成本和复杂度大大减少,并可以有效提高设计的可靠性和驱动光的均匀性。此外,采用此类LED驱动器,可以很有效地帮助我们减少设计周期并提升设计灵活性。 恩智浦目前可以向客户提供从4路到24路不等的I2C LED驱动器,并已应用于汽车、家电、通信等各大领域。虽然LED在生活中处处可见,但是LED也还有一些不足需要我们的设计人员拥有更加专业的知识储备,这样才能设计出更加符合生活所需的产品。

    时间:2020-05-15 关键词: LED 驱动器 i2c

  • LT3964降压型LED驱动器

    LT3964降压型LED驱动器

    随着科学技术的发展,LED技术也在不断发展,为我们的生活带来各种便利,为我们提供各种各样生活信息,造福着我们人类。亚德诺半导体公司(AnalogDevices,Inc.,简称ADI)宣布推出PowerbyLinear™的LT3964,该器件是一款双通道、36V、高效率、同步、降压型LED驱动器,具内部40V、1.6A电源开关和一个I2C接口,简化了LED调光控制。 LT3964在4V至36V的宽输入范围内运行,提供两个独立控制、以高达2MHz切换的LED驱动器,可用小型外部组件构成高集成度、紧凑的解决方案。LT3964运用固定频率、电流模式控制,并作为具准确电流调节的恒定电流和恒定电压源运行,以在汽车、工业和建筑照明应用中提供最佳LED照明。两个通道在满电流负载时,同步运行可产生高于94%的效率。 该器件的400kHzI2C接口极大地简化了数字PWM调光。不必从微控制器向LED驱动器提供PWM信号,而是用想要的调光占空比设定内部寄存器,这是同步至内部时钟。这提供了高达8192:1的调光比,并消除了PWM信号和内部振荡器不同步时引起的拍频。或者,在模拟调光时,用可通过I2C设定的8位标度因子设定控制电压与LED电流之比,以允许对模拟调光调节进行更强的控制。该器件也提供1000:1外部PWM调光和10:1模拟调光。 LT3964的开关频率可在200kHz至2MHz范围内设定,或者可同步至一个外部时钟信号。LED驱动器的保护功能包括开路LED和短路LED故障检测,以及LED过流和过压检测,所有都可通过I2C接口报告。过热停机提供了一层额外的保护。 LT3964EUHE采用耐热增强型36引线5mmx6mmQFN封装。提供了3种温度级版本,扩展和工业温度级版本在–40°C至125°C(结温)范围内运行,高温级版本在–40°C至150°C范围内运行。以上就是LED技术的相关知识,相信随着科学技术的发展,未来的LED灯回越来越高效,使用寿命也会由很大的提升,为我们带来更大便利。

    时间:2019-09-13 关键词: 电源技术解析 led驱动器 powerbylinear i2c

  • 秒懂I2C串行总线的工作原理以及特点

    秒懂I2C串行总线的工作原理以及特点

    我们都知道I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。 I2C总线简介 I2C结合了SPI和UART的优点。使用I2C,您可以将多个从设备连接到单个主设备上(如SPI),并且可以让多个主器件控制单个或多个从器件。当您希望有多个微控制器记录数据到单个存储卡或将文本显示到单个LCD时,这非常有用。 与UART通信一样,I2C仅使用两条线在设备之间传输数据:     SDA(串行数据) - 主站和从站发送和接收数据的线路。 SCL(串行时钟) - 承载时钟信号的线路。 I2C是一种串行通信协议,因此数据沿着单线(SDA线)逐位传输。 与SPI一样,I2C是同步的,因此位输出通过主机和从机之间共享的时钟信号与位采样同步。时钟信号始终由主机控制。     I2C如何工作 使用I2C时,数据被转换成messages,messages则被分解为数据帧。每条messages都有一个地址帧,其中包含从站的二进制地址,以及一个或多个包含正在传输的数据的数据帧。该消息还包括每个数据帧之间的启动和停止条件,读/写位和ACK / NACK位:     启动条件:在SCL线路从高电平切换到低电平之前,SDA线路从高电平切换到低电平。 停止条件:SCL线路从低电平切换到高电平后,SDA线路从低电平切换到高电平。 地址帧:每个从站唯一的7或10位序列,用于在主站想与之通信时识别从站。 读/写位:单个位,指定主器件是向从器件发送数据(低电压电平)还是从器件请求数据(高电压电平)。 ACK / NACK位:消息中的每个帧后跟一个应答/不应答位。如果成功接收到地址帧或数据帧,则从接收设备向发送方返回ACK位。 地址 I2C没有像SPI这样的从选择线,因此它需要另一种方法让从器件知道数据正在发送给它,而不是另一个从器件。它通过地址来做到这一点。地址帧始终是新消息中起始位之后的第一帧。 主设备将与其通信的从设备的地址发送给与其连接的每个从设备。然后,每个从设备将从主设备发送的地址与其自己的地址进行比较。如果地址匹配,则将低电压ACK位发送回主机。如果地址不匹配,则从器件不执行任何操作,SDA线保持高电平。 读/写位 地址帧在末尾包括一个位,用于通知从设备,主设备是想要向其写入数据还是从主设备接收数据。如果主设备想要向从设备发送数据,则读/写位是低电平。如果主设备向从设备请求数据,则该位是高电平。 数据框架 在主设备检测到来自从设备的ACK位之后,准备好发送第一个数据帧。 数据帧始终为8位长,并以最高有效位先发送。紧接着每个数据帧的ACK / NACK位以验证帧已被成功接收。在发送下一个数据帧之前,主机或从机必须接收ACK位(取决于发送数据的人)。 在发送了所有数据帧之后,主设备可以向从设备发送停止条件以停止传输。停止条件是SCL线上从低电平到高电平转换后,SDA线上从低电平变为高电平,SCL线保持高电平。 I2C数据传输步骤 1.主机向每一个连接的从设备发送数据,然后将SDA信号从高切换到低,之后在将SCL从高切换到低电平。     2.主设备向每个从设备发送它想要与之通信的从设备的7或10位地址,以及读/写位:     3.每个从设备将主设备发送的地址与其自己的地址进行比较。如果地址匹配,则从器件通过将SDA线拉低一位来返回ACK位。如果主设备的地址与从设备的地址不匹配,则从设备将SDA线保持为高电平。     4.主设备发送或接收数据帧:     5.在传输了每个数据帧之后,接收设备将另一个ACK位返回给发送方以确认成功接收到该帧:     6.要停止数据传输,主机通过在将SDA切换为高电平之前切换SCL为高电平来向从机发送停止条件:     有多个从设备的单一主设备 由于I2C使用寻址,因此可以从单个主设备控制多个从设备。使用7位地址,可以使用128(27)个唯一地址。使用10位地址并不常见,但提供1,024(210)个唯一地址。要将多个从器件连接到单个主器件,请像这样连接它们,使用4.7K欧姆上拉电阻将SDA和SCL线连接到Vcc:     有多个从设备及多个主设备 多个主设备可以连接到单个从设备或多个从设备。当两个主设备尝试通过SDA线同时发送或接收数据时,同一系统中出现多个主设备的问题。为了解决这个问题,每个主设备需要在发送消息之前检测SDA线路是低还是高。如果SDA线为低电平,则表示另一个主控制器已控制总线,主控制器应等待发送消息。如果SDA线路很高,那么传输信息是安全的。要将多个主设备连接到多个从设备,请使用下图,使用4.7K欧姆上拉电阻将SDA和SCL线路连接到Vcc:     I2C的优点和缺点 与其他协议相比,I2C听起来很复杂,不容易在程序中实现而导致数据丢失、无应答、“死等”等问题。但却有很多优点: 优点 只使用两根电线 支持多个主服务器和多个从服务器 ACK / NACK位确认每个帧都已成功传输 硬件没有UART那么复杂 众所周知且广泛使用的协议 缺点 数据传输速率比SPI慢 数据帧的大小限制为8位 实现比SPI更复杂的硬件

    时间:2019-08-23 关键词: uart spi 总线与接口 i2c

  • I2C隔离器设计遇到的的常见问题

    I2C隔离器设计遇到的的常见问题

    本文整理了一些关于隔离I2C设计的FAQ,供您参考。这些见解是根据德州仪器在线支持社区中有关I2C隔离器的常见问题而提供的。希望这些信息能够帮助工程师在设计过程中解决信号和电源隔离的问题。(来源:德州仪器TI)Q什么情况下需要隔离I2C?隔离可防止系统两个部分之间的直流电和异常的交流电,但仍然支持两个部分之间的信号和电源传输。隔离通常能够阻止电气组件或人员遭受危险电压和电流浪涌的伤害;用于保护人员的隔离称为增强型隔离。I2C已成为许多系统中流行的全球标准;因此,隔离I2C已经扩散到大多数高压市场。常见的隔离I2C应用包括:网络和服务器电源中的微控制器(MCU)到MCU通信。汽车电池管理系统和医疗系统中MCU到模数转换器通信。以太网供电系统中的MCU到供电设备控制器通信。MCU与电流/电源监控系统的通信。Q是否可以在数字隔离器上连接两个单向信道,以实现I2C通信的双向信道?不可以,连接两个相反方向的单向信道不会产生双向信道。如果用数字隔离器替换隔离I2C器件,数字隔离器将闩锁到单一状态并变得无响应。使用数字隔离器实现隔离I2C总线需要外部组件。此外,E2E社区隔离论坛主题中更详细地说明了为什么数字隔离器在双向I2C应用中无外部组件的情况下将闩锁到单一状态。QISO1540和ISO1541隔离I2C器件的电流消耗是多少?ISO154x数据手册中的表6.10列出了不带任何上拉电阻的ISO1540和ISO1541的电流消耗。添加上拉电阻时,电阻会消耗额外的电流。例如,在SDA2/SCL2处向器件添加1kΩ的上拉电阻,在SDA1/SCL1处添加10kΩ的上拉电阻,VCC1 = VCC2 = 5 V时,上拉电阻消耗的额外电流将对于SDA1/SCL1为约为5mA,对于SDA2/SCL2约为0.5 mA。对于需要更低功耗的隔离I2C应用,超低功耗ISO7041可以替代ISO7731器件,如模拟设计期刊文章中第2个问题所述。ISO70xx的功耗将比ISO77xx器件提升一个数量级。表1列出了ISO1540 and ISO1541器件1侧和2侧输入的推荐逻辑输入电压电平。Side1Side2VIL1 < 0.5 VVIL2 < 0.3*VCC2VIH1 > 0.7*VCC1VIH2 > 0.7*VCC2表1:ISO154x输入电压电平这些输入电压电平适用于I2C数据和时钟信号。Q为什么ISO1540和ISO1541双向I2C隔离器的1侧上的逻辑低电平输出电压VOL1高达0.8 V?为了实现隔离I2C器件的双向功能,器件需要设计有两个背靠背连接的单向信道,以实现单个双向信道。直接连接两个单向信道会导致锁定情况,两个信道都是低电平。为避免这种情况,1侧输出端的二极管使1侧输出信道的低电平输出看起来像1侧输入信道的高电平。图1显示了二极管的位置。图1:ISO154x简化原理图由于该二极管,VOL1的电压最高可达0.8 V.当2侧检测到2侧为低电平时,1侧将打开场效应晶体管,使二极管导通,产生非零正向电压。ISO154x器件中的阈值经过精心设计,可确保双向信道平稳运行 - 只要VOL和VIL规范符合ISO154x数据表中表6.9.所示的ISO154x器件阈值即可。这种方法已成为业界用于实现双向I2C功能的常见做法。低逻辑电平的非零电压仍将与I2C规范兼容。请注意,这仅适用于VOL1。由于器件的2侧不需要二极管,因此VOL2最大值为0.4 V,这在大多数数字隔离器中很常见。Q如何为I2C隔离器构造隔离型电源?为I2C隔离器构造隔离型电源有几种可选的方法;最佳解决方案须视具体的应用需要而定。一个选择是使用 SN6501这样的变压器驱动器,此种驱动器可用于具有次级侧变压器和可选整流低压差稳压器的推挽式配置(图 2)。SN6501的功率高达1.5 W,可作为隔离型电源。此设备具有高度灵活性,几乎可用在所有应用中。这是因为变压器和匝数比能为电源提供必要的隔离等级和输出电压。如果您需要为其他设备提供隔离电源,则可使用SN6505而不是SN6501,获得高达5 W的输出功率。SN6505具有额外的保护特性,例如过载和短路、热关断、软启动和压摆率控制等,方便设计人员构筑稳健的解决方案。图2:采用ISO1541的信号和电源隔离I2C解决方案另一个针对空间受限应用的可选方法是ISOW78xx系列器件,该系列可在小外形集成电路16引脚封装中提供信号和电源隔离特性。ISOW7842还可以与外部组件结合使用。图3提供了具有双向数据和单向时钟的系统解决方案示例,当使用一些额外组件进行修改时,可以支持双向数据和时钟信号。图3:采用ISOW7842的信号和电源隔离I2C解决方案-END-

    时间:2019-08-07 关键词: 隔离器 i2c

  • 存储技术一览

    存储技术一览

    当前的磁带机(库)支持的备份技术主要有DAT、8mm、DLT、LTO、AIT及VXA等。存储容量是指在数据未被压缩前磁带机所能存储的最大数据量。这个数值取决于两个因素,一是单盒磁带的存储容量,二是磁带机所能容纳的磁带数目。 世界领先的低功耗铁电存储器(F-RAM)和集成半导体产品开发商及供应商RamtrON International Corporation (简称Ramtron)发布W系列 F-RAM存储器,W系列器件带有串口I2C、SPI接口和并行接口,能够提供从2.7V 到 5.5V的更宽电压范围。此外,W系列具有更高的性能,如有功电流(active current)需求降低了25%至50%,串口器件的首次存取启动(上电初始化)速度加快20倍。该系列中FM24W256 和 FM25W256器件分别带有256-Kbit 串口I2C与和SPI接口。64-Kbit FM16W08 和 256-Kbit FM18W08器件则带有一个并行通信接口。     Ramtron公司标准存储器市场推广经理 Mike Peters 表示:“W系列 F-RAM存储器具有宽工作电压范围,可帮助系统设计人员降低有功电流,提高系统性能。系统能够检测早期功耗,控制器的数据写入电压可降至2.7V,从而保护重要数据免受毁坏或丢失。W系列的宽工作电压范围带来更高的灵活性,能够最大限度地减少客户所需的库存元件数量。” Ramtron发布W系列F-RAM存储器 RamtrON (Ramtron InternaTIonal Corporation)发布W系列 F-RAM存储器,W系列器件带有串口I2C、SPI接口和并行接口,能够提供从2.7V 到 5.5V的更宽电压范围。 W系列 F-RAM存储器为先前使用64K至256K F-RAM器件的客户提供了一种设计替代方案,该系列产品基于先进的高可靠性铁电工艺,具有无延迟 (NoDelay)写入、几乎无限的读/写次数 (100万亿次-10e14)以及38年数据保存期等特性。这些新推器件采用业界标准“绿色”封装,其中串口器件采用8脚SOIC封装,并口器件采用28引脚SOIC封装。W系列非常适合需要频繁或快速写入数据或实现低功耗工作的非易失性存储器应用,应用范围从高频数据采集直到要求严苛的工业控制应用。而在这些应用中, EEPROM的写入周期很长,可能造成数据丢失,因而并不适用。W系列中串口SPI器件采用Ramtron的 F-RAM技术,能够实现全速总线写入,确保在-40°C 至 +85°C的工业温度范围正常工作。 此外,W系列具有更高的性能,如有功电流(active current)需求降低了25%至50%,串口器件的首次存取启动(上电初始化)速度加快20倍。该系列中FM24W256 和 FM25W256器件分别带有256-Kbit 串口I2C与和SPI接口。64-Kbit FM16W08 和 256-Kbit FM18W08器件则带有一个并行通信接口。 Ramtron公司标准存储器市场推广经理 Mike Peters 表示:“W系列 F-RAM存储器具有宽工作电压范围,可帮助系统设计人员降低有功电流,提高系统性能。系统能够检测早期功耗,控制器的数据写入电压可降至2.7V,从而保护重要数据免受毁坏或丢失。W系列的宽工作电压范围带来更高的灵活性,能够最大限度地减少客户所需的库存元件数量。” W系列 F-RAM存储器为先前使用64K至256K F-RAM器件的客户提供了一种设计替代方案,该系列产品基于先进的高可靠性铁电工艺,具有无延迟 (NoDelay)写入、几乎无限的读/写次数 (100万亿次-10e14)以及38年数据保存期等特性。这些新推器件采用业界标准“绿色”封装,其中串口器件采用8脚SOIC封装,并口器件采用28引脚SOIC封装。W系列非常适合需要频繁或快速写入数据或实现低功耗工作的非易失性存储器应用,应用范围从高频数据采集直到要求严苛的工业控制应用。而在这些应用中, EEPROM的写入周期很长,可能造成数据丢失,因而并不适用。W系列中串口SPI器件采用Ramtron的 F-RAM技术,能够实现全速总线写入,确保在-40°C 至 +85°C的工业温度范围正常工作。

    时间:2019-07-28 关键词: 存储技术 并行接口 spi接口 i2c

  • 单片机I2C寻址模式

    我们知道,打电话的时候,当拨通电话,接听方捡起电话肯定要回一个“喂”,这就是告诉拨电话的人,这边有人了。同理,这个第九位 ACK 实际上起到的就是这样一个作用。当我们发送完了这 7 位地址和 1 位方向后,如果发送的这个地址确实存在,那么这个地址的器件应该回应一个 ACK(拉低 SDA 即输出“0”),如果不存在,就没“人”回应 ACK(SDA将保持高电平即“1”)。 那我们写一个简单的程序,访问一下我们板子上的 EEPROM 的地址,另外再写一个不存在的地址,看看它们是否能回一个 ACK,来了解和确认一下这个问题。 我们板子上的 EEPROM 器件型号是 24C02,在 24C02 的数据手册 3.6 节中可查到,24C02的 7 位地址中,其中高 4 位是固定的 0b1010,而低 3 位的地址取决于具体电路的设计,由芯片上的 A2、A1、A0 这 3 个引脚的实际电平决定,来看一下我们的 24C02 的电路图,它和24C01 的原理图完全一样,如图 所示。   图 24C02 原理图 从图 可以看出来,我们的 A2、A1、A0 都是接的 GND,也就是说都是 0,因此 24C02的 7 位地址实际上是二进制的 0b1010000,也就是 0x50。我们用 I2C 的协议来寻址 0x50,另外再寻址一个不存在的地址 0x62,寻址完毕后,把返回的 ACK 显示到我们的 1602 液晶上,大家对比一下。 /***************************Lcd1602.c 文件程序源代码*****************************/ #include #define LCD1602_DB P0 sbit LCD1602_RS = P1^0; sbit LCD1602_RW = P1^1; sbit LCD1602_E = P1^5; /* 等待液晶准备好 */ void LcdWaitReady(){ unsigned char sta; LCD1602_DB = 0xFF; LCD1602_RS = 0; LCD1602_RW = 1; do { LCD1602_E = 1; sta = LCD1602_DB; //读取状态字 LCD1602_E = 0; } while (sta & 0x80); //bit7 等于 1 表示液晶正忙,重复检测直到其等于 0 为止 } /* 向 LCD1602 液晶写入一字节命令,cmd-待写入命令值 */ void LcdWriteCmd(unsigned char cmd){ LcdWaitReady(); LCD1602_RS = 0; LCD1602_RW = 0; LCD1602_DB = cmd; LCD1602_E = 1; LCD1602_E = 0; } /* 向 LCD1602 液晶写入一字节数据,dat-待写入数据值 */ void LcdWriteDat(unsigned char dat){ LcdWaitReady(); LCD1602_RS = 1; LCD1602_RW = 0; LCD1602_DB = dat; LCD1602_E = 1; LCD1602_E = 0; } /* 设置显示 RAM 起始地址,亦即光标位置,(x,y)-对应屏幕上的字符坐标 */ void LcdSetCursor(unsigned char x, unsigned char y){ unsigned char addr; if (y == 0){ //由输入的屏幕坐标计算显示 RAM 的地址 addr = 0x00 + x; //第一行字符地址从 0x00 起始 }else{ addr = 0x40 + x; //第二行字符地址从 0x40 起始 } LcdWriteCmd(addr | 0x80); //设置 RAM 地址 } /* 在液晶上显示字符串,(x,y)-对应屏幕上的起始坐标,str-字符串指针 */ void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str){ LcdSetCursor(x, y);//设置起始地址 while (*str != '\0'){ //连续写入字符串数据,直到检测到结束符 LcdWriteDat(*str++); } } /* 初始化 1602 液晶 */ void InitLcd1602(){ LcdWriteCmd(0x38); //16*2 显示,5*7 点阵,8 位数据接口 LcdWriteCmd(0x0C); //显示器开,光标关闭 LcdWriteCmd(0x06); //文字不动,地址自动+1 LcdWriteCmd(0x01); //清屏 } /*****************************main.c 文件程序源代码******************************/ #include #include #define I2CDelay() {_nop_();_nop_();_nop_();_nop_();} sbit I2C_SCL = P3^7; sbit I2C_SDA = P3^6; bit I2CAddressing(unsigned char addr); extern void InitLcd1602(); extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str); void main(){ bit ack; unsigned char str[10]; InitLcd1602(); //初始化液晶 ack = I2CAddressing(0x50); //查询地址为 0x50 的器件 str[0] = '5'; //将地址和应答值转换为字符串 str[1] = '0'; str[2] = ':'; str[3] = (unsigned char)ack + '0'; str[4] = '\0'; LcdShowStr(0, 0, str); //显示到液晶上 ack = I2CAddressing(0x62); //查询地址为 0x62 的器件 str[0] = '6'; //将地址和应答值转换为字符串 str[1] = '2'; str[2] = ':'; str[3] = (unsigned char)ack + '0'; str[4] = '\0'; LcdShowStr(8, 0, str); //显示到液晶上 while (1); } /* 产生总线起始信号 */ void I2CStart(){ I2C_SDA = 1; //首先确保 SDA、SCL 都是高电平 I2C_SCL = 1; I2CDelay(); I2C_SDA = 0; //先拉低 SDA I2CDelay(); I2C_SCL = 0; //再拉低 SCL } /* 产生总线停止信号 */ void I2CStop(){ I2C_SCL = 0; //首先确保 SDA、SCL 都是低电平 I2C_SDA = 0; I2CDelay(); I2C_SCL = 1; //先拉高 SCL I2CDelay(); I2C_SDA = 1; //再拉高 SDA I2CDelay(); } /* I2C 总线写操作,dat-待写入字节,返回值-从机应答位的值 */ bit I2CWrite(unsigned char dat){ bit ack; //用于暂存应答位的值 unsigned char mask; //用于探测字节内某一位值的掩码变量 for (mask=0x80; mask!=0; mask>>=1){ //从高位到低位依次进行 if ((mask&dat) == 0){ //该位的值输出到 SDA 上 I2C_SDA = 0; }else{ I2C_SDA = 1; } I2CDelay(); } I2C_SCL = 1; //拉高 SCL I2CDelay(); I2C_SCL = 0; //再拉低 SCL,完成一个位周期 I2C_SDA = 1; //8 位数据发送完后,主机释放 SDA,以检测从机应答 I2CDelay(); I2C_SCL = 1; //拉高 SCL ack = I2C_SDA; //读取此时的 SDA 值,即为从机的应答值 I2CDelay(); I2C_SCL = 0; //再拉低 SCL 完成应答位,并保持住总线 return ack; //返回从机应答值 } /* I2C 寻址函数,即检查地址为 addr 的器件是否存在,返回值-从器件应答值 */ bit I2CAddressing(unsigned char addr){ bit ack; I2CStart(); //产生起始位,即启动一次总线操作 //器件地址需左移一位,因寻址命令的最低位 //为读写位,用于表示之后的操作是读或写 ack = I2CWrite(addr<<1); I2CStop(); //不需进行后续读写,而直接停止本次总线操作 return ack; } 我们把这个程序在 KST-51 开发板上运行完毕,会在液晶上边显示出来我们预想的结果,主机发送一个存在的从机地址,从机会回复一个应答位,即应答位为 0;主机如果发送一个不存在的从机地址,就没有从机应答,即应答位为 1。

    时间:2019-07-12 关键词: 单片机 寻址模式 i2c

  • I2c串行总线组成及其工作原理

    采用串行总线技术可以使系统的硬件设计大大简化,系统的体积减小,可靠性提高,同时系统更容易更改和扩充 常用的串行扩展总线有:I2c总线,单总线,SPI总线,以及microwire、Plus等等 I2c总线只有两根双向信号线,一根是数据线SDA,另一根是时钟线SCL   I2c总线通过上拉电阻接正电源。因此I2C总线的设备都要接上拉电阻 当总线闲置的时候,两根线均为高电平,连接到总线上的任何一个器件输出的低电平,都将使得总线得到信号变低,及各个器件的SDA和SCL都是线与的关系 每个接入到I2C总线都有唯一的地址,主机与其他器件间的数据传送可以是由主机发送数据到其他器件,这时主机即是发送器,由总线上接收数据的器件称为是接收器。 在多主机系统中,可能同时由几个主机企图启动总线传送数据,为了避免混乱,I2C总线要通过总线仲裁,已决定由哪台主机控制总线 数据位的有效性 I2C总线进行数据传送时,时钟信号为高电平期间,数据线上的数据必须保持稳定,只有时钟线上的信号为低电平期间,数据线上的高电平和低电平状态才允许变化   起始信号和终止信号 SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号,SCL线为高电平期间,SDA线由低电平向高电平变化表示终止信号   数据传送的格式 (1)字节传送与应答 每一个字节必须保证是8位长度,数据传送时,先传送的是最高位(MSB),每一个被传送的字节后面都必须跟随一位应答位,即(一帧共有9位),应答信号由从机发送给主机   每次数据传送总是由主机产生的终止信号结束,但是若主机希望继续占用总线进行新的数据传送,则可以不产生终止信号,马上再次发出起始信号对另一个从机进行寻址 在总线的一个数据传上过程中,可以有一下几种传送方式的组合方式 a,主机向从机发送数据,数据传送的方向在整个传送过程中不变   A表示应答,A非表示非应答,s表示其实信号,p表示终止信号 主机发送地址时,总线上的每一个从机都将这7位地址码与自己的地址进行比较,如果相同,则认为自己正在被主机寻址,根据R/T位将自己确定为发送器或接收器 从机地址由固定部分和可编程部分组成,可编程的部分决定了可接入总线该器件的最大数目。   由操作时序可知要进行必要的延时 起始操作示例代码: void T2CStart(void) { SDA = 1; SomeNop();//大于微秒级别 SCL = 1; SomeNop(); SDA = 0; SomeNop(); } 终止指令: void I2CStop(void) { SDA = 0;//data由0变到1为终止指令 SomeNop(); SCL = 1; SomeNop(); SDA = 1; SomeNop(); } I2C总线扩展 串行E2PROM的扩展 (2)写入过程:AT24CEEPROM的固定地址为1010,A2,A1A0引脚接入高低电平可以得到确定的3位编码,形成的7位编码即为该器件的地址码 单片机进行写操作的时候,首先 发送该器件的7位地址吗和写方向的方向码0,发送完以后释放SDA线并在SCL线上产生第九个时钟信号,被选中的存储器再确认自己的地址后,在SDA上产生一个应答信号作为响应 ,单片机接收到信号就可以传送数据了 传送数据时,单片机首先发送一个字节的被写入器件的存储区的首地址,收到存储器器件的应答后,单片机就逐个发送各个数据的字节,但是每次发送一个字节后都要等待应答 收到每个字节的地址后,芯片上的地址会自动加一 写入n个字节的数据格式   读出过程 单片机首先发送该器件的7位地址码和写方向位0(伪写),发送完后释放SDA线并在SCL线上产生9个时钟信号,被选中的存储器器件在确认自己的地址之后,在SDA上产生一个应答信号作为回应 然后在发送一个字节的要读出存储去的首地址,收到应答,单片机要重复一次起始信号并发出器件地址的读方向位(1),收到器件应答就可以读出字节,每次读出一个字节,单片机都要回复一个应答信号,但最后读出一个字节,单片机应返回非应答信号(高电平)并发出终止信号以结束读出操作   示例代码: #include #define uchar unsigned char #define uint unsigned int sbit sda = P2^3; sbit scl = P2^2; sbit wp = P2^1; void delay()//微妙级别的延时函数 {;;} void start()//开始信号 { sda = 1; delay(); scl = 1; delay(); sda = 0; delay(); } void stop()//停止信号 { sda = 0; delay(); scl = 1; delay(); sda = 1; delay(); } void respons()//应答信号 { uchar i; scl = 1; delay(); while((sda ==1)&&(i<250))//等到第九个时钟周期的时候,还没有变为0, //那么scl将自动的变为0,表示收到信号 { i++; } scl = 0; } void init() { sda = 1; scl = 1;//把线全部释放 } void write_byte(uchar date) { uchar i,temp; temp = date; scl = 0; delay(); for(i = 0;i<8;i++)//写8次 { temp = temp<<1;//表示将temp左移1位,将最高位移入psw寄存器中的cy位, //然后将最高位赋值给sda,送走数据 scl = 1;//数据稳定了 delay(); sda = CY; delay(); scl = 0;//读走数据 delay(); } sda = 1;//注意养成释放总线的习惯 delay(); } uchar read_byte() { uchar i,j,k; scl = 0; delay(); sda = 1;//释放数据总线 delay(); for(i=0;i<8;i++) { scl = 1; delay(); j = sda ;//读取数据 k =(k<<1)|j; scl = 0; delay(); } return k; } uchar read_add(uchar address) { uchar date; start(); write_byte(0xa0);//表示写入器件的地址 respons(); write_byte(address); respons(); start(); write_byte(0xa1); respons(); date=read_byte(); stop(); return date; } void write_add(uchar address,uchar date) { init();//初始化信号总线和地址总线 start();//启动信号 write_byte(0xa0);//表示写入器件的地址 respons(); write_byte(address);//表示往这个器件内部的第三个地址处写入地址 respons(); write_byte(date);//表示器件内部的数据 respons(); stop(); } void delay1(uint z) { uint x,y; for(x= z;x>0;x--) for(y=110;y>0;y--); } void main() { init(); write_add(23,125); delay1(100); P1=read_add(23); while(1); }

    时间:2019-07-09 关键词: 串行总线 i2c

  • BQ24250/BQ24251 充电管理芯片I2C 寄存器地址无法读写

    BQ24250/BQ24251 充电管理芯片I2C 寄存器地址无法读写

    现象以及原因:      1、I2C波特率为100Khz,数据位宽8位,BQ24250 I2C 7bit从机地址0x6A;      2、随便读取哪个寄存器读取地址的数据和器件手册对不上;      3、原来是每次读取的寄存器不对,比如Register #1寄存器,你以为实际寄存器地址就是0x1吗?错了,实际读取的寄存器并不是0x1,而是下面的Memory location 00,也就是十六进制地址0x00,这才是真正的寄存器地址,后面所有的寄存器地址都是Memory location,并不是Register #1     4、哎,TI的TRM手册编写人员真心是狗屎,都能写上Register #1,你直接写个Register 0x00能死吗?害的我多走了很多弯路,寄存器读取死活不对,写也写不进去

    时间:2019-07-04 关键词: 寄存器 充电管理芯片 i2c

  • 单片机 I2C 寻址模式

    上一节介绍的是 I2C 每一位信号的时序流程,而 I2C 通信在字节级的传输中,也有固定的时序要求。I2C 通信的起始信号(Start)后,首先要发送一个从机的地址,这个地址一共有7位,紧跟着的第8位是数据方向位(R/W),“0”表示接下来要发送数据(写),‘“1”表示接下来是请求数据(读)。 我们知道,打电话的时候,当拨通电话,接听方捡起电话肯定要回一个“喂”,这就是告诉拨电话的人,这边有人了。同理,这个第九位 ACK 实际上起到的就是这样一个作用。当我们发送完了这7位地址和1位方向后,如果发送的这个地址确实存在,那么这个地址的器件应该回应一个 ACK(拉低 SDA 即输出“0”),如果不存在,就没“人”回应 ACK(SDA将保持高电平即“1”)。 那我们写一个简单的程序,访问一下我们板子上的 EEPROM 的地址,另外再写一个不存在的地址,看看它们是否能回一个 ACK,来了解和确认一下这个问题。 我们板子上的 EEPROM 器件型号是 24C02,在 24C02 的数据手册3.6节中可查到,24C02 的7位地址中,其中高4位是固定的 0b1010,而低3位的地址取决于具体电路的设计,由芯片上的 A2、A1、A0 这3个引脚的实际电平决定,来看一下我们的 24C02 的电路图,它和 24C01 的原理图完全一样,如图14-4所示。   图14-4 24C02 原理图 从图14-4可以看出来,我们的 A2、A1、A0 都是接的 GND,也就是说都是0,因此 24C02 的7位地址实际上是二进制的 0b1010000,也就是 0x50。我们用 I2C 的协议来寻址 0x50,另外再寻址一个不存在的地址 0x62,寻址完毕后,把返回的 ACK 显示到我们的 1602 液晶上,大家对比一下。 /***************************Lcd1602.c 文件程序源代码*****************************/ #include #define LCD1602_DB P0 sbit LCD1602_RS = P1^0; sbit LCD1602_RW = P1^1; sbit LCD1602_E = P1^5; /* 等待液晶准备好 */ void LcdWaitReady(){ unsigned char sta; LCD1602_DB = 0xFF; LCD1602_RS = 0; LCD1602_RW = 1; do { LCD1602_E = 1; sta = LCD1602_DB; //读取状态字 LCD1602_E = 0; } while (sta & 0x80); //bit7 等于 1 表示液晶正忙,重复检测直到其等于 0 为止 } /* 向 LCD1602 液晶写入一字节命令,cmd-待写入命令值 */ void LcdWriteCmd(unsigned char cmd){ LcdWaitReady(); LCD1602_RS = 0; LCD1602_RW = 0; LCD1602_DB = cmd; LCD1602_E = 1; LCD1602_E = 0; } /* 向 LCD1602 液晶写入一字节数据,dat-待写入数据值 */ void LcdWriteDat(unsigned char dat){ LcdWaitReady(); LCD1602_RS = 1; LCD1602_RW = 0; LCD1602_DB = dat; LCD1602_E = 1; LCD1602_E = 0; } /* 设置显示 RAM 起始地址,亦即光标位置,(x,y)-对应屏幕上的字符坐标 */ void LcdSetCursor(unsigned char x, unsigned char y){ unsigned char addr; if (y == 0){ //由输入的屏幕坐标计算显示 RAM 的地址 addr = 0x00 + x; //第一行字符地址从 0x00 起始 }else{ addr = 0x40 + x; //第二行字符地址从 0x40 起始 } LcdWriteCmd(addr | 0x80); //设置 RAM 地址 } /* 在液晶上显示字符串,(x,y)-对应屏幕上的起始坐标,str-字符串指针 */ void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str){ LcdSetCursor(x, y);//设置起始地址 while (*str != '\0'){ //连续写入字符串数据,直到检测到结束符 LcdWriteDat(*str++); } } /* 初始化 1602 液晶 */ void InitLcd1602(){ LcdWriteCmd(0x38); //16*2 显示,5*7 点阵,8 位数据接口 LcdWriteCmd(0x0C); //显示器开,光标关闭 LcdWriteCmd(0x06); //文字不动,地址自动+1 LcdWriteCmd(0x01); //清屏 } /*****************************main.c 文件程序源代码******************************/ #include #include #define I2CDelay() {_nop_();_nop_();_nop_();_nop_();} sbit I2C_SCL = P3^7; sbit I2C_SDA = P3^6; bit I2CAddressing(unsigned char addr); extern void InitLcd1602(); extern void LcdShowStr(unsigned char x, unsigned char y, unsigned char *str); void main(){ bit ack; unsigned char str[10]; InitLcd1602(); //初始化液晶 ack = I2CAddressing(0x50); //查询地址为 0x50 的器件 str[0] = '5'; //将地址和应答值转换为字符串 str[1] = '0'; str[2] = ':'; str[3] = (unsigned char)ack + '0'; str[4] = '\0'; LcdShowStr(0, 0, str); //显示到液晶上 ack = I2CAddressing(0x62); //查询地址为 0x62 的器件 str[0] = '6'; //将地址和应答值转换为字符串 str[1] = '2'; str[2] = ':'; str[3] = (unsigned char)ack + '0'; str[4] = '\0'; LcdShowStr(8, 0, str); //显示到液晶上 while (1); } /* 产生总线起始信号 */ void I2CStart(){ I2C_SDA = 1; //首先确保 SDA、SCL 都是高电平 I2C_SCL = 1; I2CDelay(); I2C_SDA = 0; //先拉低 SDA I2CDelay(); I2C_SCL = 0; //再拉低 SCL } /* 产生总线停止信号 */ void I2CStop(){ I2C_SCL = 0; //首先确保 SDA、SCL 都是低电平 I2C_SDA = 0; I2CDelay(); I2C_SCL = 1; //先拉高 SCL I2CDelay(); I2C_SDA = 1; //再拉高 SDA I2CDelay(); } /* I2C 总线写操作,dat-待写入字节,返回值-从机应答位的值 */ bit I2CWrite(unsigned char dat){ bit ack; //用于暂存应答位的值 unsigned char mask; //用于探测字节内某一位值的掩码变量 for (mask=0x80; mask!=0; mask>>=1){ //从高位到低位依次进行 if ((mask&dat) == 0){ //该位的值输出到 SDA 上 I2C_SDA = 0; }else{ I2C_SDA = 1; } I2CDelay(); } I2C_SCL = 1; //拉高 SCL I2CDelay(); I2C_SCL = 0; //再拉低 SCL,完成一个位周期 I2C_SDA = 1; //8 位数据发送完后,主机释放 SDA,以检测从机应答 I2CDelay(); I2C_SCL = 1; //拉高 SCL ack = I2C_SDA; //读取此时的 SDA 值,即为从机的应答值 I2CDelay(); I2C_SCL = 0; //再拉低 SCL 完成应答位,并保持住总线 return ack; //返回从机应答值 } /* I2C 寻址函数,即检查地址为 addr 的器件是否存在,返回值-从器件应答值 */ bit I2CAddressing(unsigned char addr){ bit ack; I2CStart(); //产生起始位,即启动一次总线操作 //器件地址需左移一位,因寻址命令的最低位 //为读写位,用于表示之后的操作是读或写 ack = I2CWrite(addr<<1); I2CStop(); //不需进行后续读写,而直接停止本次总线操作 return ack; } 我们把这个程序在 KST-51 开发板上运行完毕,会在液晶上边显示出来我们预想的结果,主机发送一个存在的从机地址,从机会回复一个应答位,即应答位为0;主机如果发送一个不存在的从机地址,就没有从机应答,即应答位为1。 前面的章节中已经提到利用库函数nop()可以进行精确延时,一个nop()的时间就是一个机器周期,这个库函数包含在 intrins.h 这个文件中,如果要使用这个库函数,只需要在程序最开始,和包含 reg52.h 一样,include之后,程序中就可以使用这个库函数了。 还有一点要提一下,I2C 通信分为低速模式 100kbit/s、快速模式 400kbit/s 和高速模式 3.4Mbit/s。因为所有的 I2C 器件都支持低速,但却未必支持另外两种速度,所以作为通用的 I2C 程序我们选择 100k 这个速率来实现,也就是说实际程序产生的时序必须小于等于 100k 的时序参数,很明显也就是要求 SCL 的高低电平持续时间都不短于 5 us,因此我们在时序函数中通过插入 I2CDelay()这个总线延时函数(它实际上就是4个 NOP 指令,用 define 在文件开头做了定义),加上改变 SCL 值语句本身占用的至少一个周期,来达到这个速度限制。如果以后需要提高速度,那么只需要减小这里的总线延时时间即可。 此外我们要学习一个发送数据的技巧,就是 I2C 通信时如何将一个字节的数据发送出去。大家注意函数 I2CWrite 中,用的那个 for 循环的技巧。for (mask=0x80; mask!=0; mask>>=1),由于 I2C 通信是从高位开始发送数据,所以我们先从最高位开始,0x80 和 dat 进行按位与运算,从而得知 dat 第7位是0还是1,然后右移一位,也就是变成了用 0x40 和 dat 按位与运算,得到第6位是0还是1,一直到第0位结束,最终通过 if 语句,把 dat 的8位数据依次发送了出去。其它的逻辑大家对照前边讲到的理论知识,认真研究明白就可以了。

    时间:2019-06-26 关键词: 单片机 寻址模式 i2c

  • 基于I2C串行总线的单片机应用系统的设计方法和程序

    目前,消费类电子产品(如彩电、音响等)的功能多样化使得控制电路变得更为复杂。而Philips公司推出的集成电路芯片间总线I2CBUS(Inter ICBUS)是目前众多总线中最简洁有效、使用也为广泛的一种总线格式。I2C总线通常是以硬件来实现的,这就要求所选器件必须具有I2C总线接口,但目前广泛使用的MCS-51系列单片机并不具备I2C总线的专用硬件部分。本文结合笔者采用单片机8031实现对具有I2C总线接口的立体声音频处理芯片TDA7313的控制,介绍了I2C总线以及基于I2C串行总线的单片机应用系统的设计方法和程序。 1 I2C总线简介 1.1 I2C总线的组成 I2C串行总线是用双向数据线(SDA)和串行时钟线(SCL)两根信号线,在连接到该总线的器件之间传送信息。它属于多主控器总线,图1所示是其组成框图。总线上的每个器件均可设置一个唯一地址,然后根据所设的功能进行信息的发送或接收。除了作为发送器和接收器以外,在执行数据传输时,总线的器件还可以设定为主控器和被控器。通常由主控器启动总线上的数据传输,并产生数据传输所需的时钟信号。而被其寻址的其它器件均为被控器,这意味着总线上可连接多个有控制总线的器件。 图1 I2C总线的组成 I2C总线上的数据传输率为100 kbit/s,快速方式下可达400 kbit/s。连接到总线上的器件数仅受400 pF的总线电容的限制。同时,为了避免总线信号的混乱,要求连接到总线上的各器件输出端必须是集电极开路或漏极开路,以便产生“线与”功能。I2C总线上的SDA和SCL线都是双向传输线,它们可通过一个电阻连接到正电源端,当总线处于空闲状态时,两条线均为高电平。 1.2 I2C总线数据传输格式 在I2C总线传输过程中,仅当总线空闲(SCL线和SDA线均为高电平)时,数据传送才能开始,此时总线上的任何器件均可以控制总线。图2所示是两种特定的开始和停止条件,其中当SCL线为高电平且SDA线由高变低时为开始条件(S);而当SCL线为高电平且SDA线由低变高时为结束条件(P)。在数据传送过程中,当SCL线为高电平时,SDA线必须是稳定的高或低电平才能使数据有效。只有当SCL线上的时钟信号为低时,SDA线的状态才能改变,且每位数据需一个时钟脉冲。所有数据都是按字节发送的,每次发送的字节数不限。每发送完一个字节,主控器释放SDA线(呈高电平)并由受控器下拉SDA线,从而使SDA线为稳定的低电平来作为有效应答位以表示传输成功,此时主控器必须产生一个与此位相应的额外时钟脉冲。 图2 I2C串行总线数据操作时序 图3为I2C 总线数据传输格式。其中第一部分为数据传输起始信号,即由此开始进行数据传送;第二部分为受控器地址,用来选择向哪个受控器传送数据;第三部分为读/写控制位,用于指示受控器的工作方式,0表示写,1表示读;第四部分是被主控器选中的受控器向主控器回传的确认信号;第五部分是所传送的数据,每传送一个字节数据,都要求有一个应答位;第六部分是数据传输的结束信号。 图3 数据传输格式 每个具有I2C总线接口的受控器件都有唯一固定的地址,当主控器发送数据时,I2C总线上挂接的受控器件都会将主控器发出的、位于起始信号后的8位地址信息与自己的地址进行比较,如果两者相同,则认为该受控器件被选中,然后按照读/写位规定的工作方式接收或发送数据。 2 I2C总线在单片机中的实现 本音频处理系统中所使用的IC控制芯片为TDA7313,它是具有音量、高低音调的左右平衡及前后混频调整的立体声音频数字处理器件,它的输入通道可以选择,并具有相应的外部响度调整函数以及I2C串行总线接口,因此可广泛应用于汽车音响和高保真系统中。TDA7313与单片机8031的连线和基本的管脚定义如图4所示。 图4 单片机与TDA7313的接口电路 由于单片机8031不具有I2C 总线硬件接口,因此只能通过编写软件产生串行时钟信号。当系统传输数据时,先由单片机给出一个启始信号;接着送出器件TDA7313的7位地址及读/写控制位并等待应答信号;当收到应答信号后,系统根据访问要求进行相应操作。在实际操作过程中,一般都是通过CPU向TDA7313输入一连串的特定数字命令来实现对整个系统的音频处理,所以对TDA7313的操作主要是写操作。

    时间:2019-06-13 关键词: 单片机 串行总线 i2c

  • I2C隔离器设计遇到的的常见问题

    I2C隔离器设计遇到的的常见问题

    1.什么情况下需要隔离I2C? 隔离可防止系统两个部分之间的直流电和异常的交流电,但仍然支持两个部分之间的信号和电源传输。隔离通常能够阻止电气组件或人员遭受危险电压和电流浪涌的伤害;用于保护人员的隔离称为增强型隔离。I2C已成为许多系统中流行的全球标准;因此,隔离I2C已经扩散到大多数高压市场。 常见的隔离I2C应用包括: 网络和服务器电源中的微控制器(MCU)到MCU通信。 汽车电池管理系统和医疗系统中MCU到模数转换器通信。 以太网供电系统中的MCU到供电设备控制器通信。 MCU与电流/电源监控系统的通信。 2.是否可以在数字隔离器上连接两个单向信道,以实现I2C通信的双向信道? 不可以,连接两个相反方向的单向信道不会产生双向信道。如果用数字隔离器替换隔离I2C器件,数字隔离器将闩锁到单一状态并变得无响应。使用数字隔离器实现隔离I2C总线需要外部组件。有关如何使用标准数字隔离器实现隔离I2C的更多信息,请参阅模拟设计期刊文章“使用数字隔离器设计增强型隔离I2C总线接口。”此外,E2E社区隔离论坛主题中更详细地说明了为什么数字隔离器在双向I2C应用中无外部组件的情况下将闩锁到单一状态。 3.ISO1540和ISO1541隔离I2C器件的电流消耗是多少? ISO154x数据手册中的表6.10列出了不带任何上拉电阻的ISO1540和ISO1541的电流消耗。添加上拉电阻时,电阻会消耗额外的电流。例如,在SDA2/SCL2处向器件添加1kΩ的上拉电阻,在SDA1/SCL1处添加10kΩ的上拉电阻,VCC1 = VCC2 = 5 V时,上拉电阻消耗的额外电流将对于SDA1/SCL1为约为5mA,对于SDA2/SCL2约为0.5 mA。 对于需要更低功耗的隔离I2C应用,超低功耗ISO7041可以替代ISO7731器件,如模拟设计期刊文章中第2个问题所述。ISO70xx的功耗将比ISO77xx器件提升一个数量级。 4.建议什么逻辑高低输入电压电平应用于ISO1540和ISO1541隔离I2C器件? 表1列出了ISO1540 and ISO1541器件1侧和2侧输入的推荐逻辑输入电压电平。 Side1 Side2 VIL1 < 0.5 VVIL2 < 0.3*VCC2 VIH1 > 0.7*VCC1VIH2 > 0.7*VCC2 表1:ISO154x输入电压电平 5.为什么ISO1540和ISO1541双向I2C隔离器的1侧上的逻辑低电平输出电压VOL1高达0.8 V? 为了实现隔离I2C器件的双向功能,器件需要设计有两个背靠背连接的单向信道,以实现单个双向信道。直接连接两个单向信道会导致锁定情况,两个信道都是低电平。为避免这种情况,1侧输出端的二极管使1侧输出信道的低电平输出看起来像1侧输入信道的高电平。图1显示了二极管的位置。     图1:ISO154x简化原理图 由于该二极管,VOL1的电压最高可达0.8 V.当2侧检测到2侧为低电平时,1侧将打开场效应晶体管,使二极管导通,产生非零正向电压。ISO154x器件中的阈值经过精心设计,可确保双向信道平稳运行 - 只要VOL和VIL规范符合ISO154x数据表中表6.9.所示的ISO154x器件阈值即可。这种方法已成为业界用于实现双向I2C功能的常见做法。低逻辑电平的非零电压仍将与I2C规范兼容。 请注意,这仅适用于VOL1。由于器件的2侧不需要二极管,因此VOL2最大值为0.4 V,这在大多数数字隔离器中很常见。 6.如何为I2C隔离器构造隔离型电源? 为I2C隔离器构造隔离型电源有几种可选的方法;最佳解决方案须视具体的应用需要而定。 一个选择是使用 SN6501这样的变压器驱动器,此种驱动器可用于具有次级侧变压器和可选整流低压差稳压器的推挽式配置(图 2)。SN6501的功率高达1.5 W,可作为隔离型电源。此设备具有高度灵活性,几乎可用在所有应用中。这是因为变压器和匝数比能为电源提供必要的隔离等级和输出电压。如果您需要为其他设备提供隔离电源,则可使用SN6505而不是SN6501,获得高达5 W的输出功率。SN6505具有额外的保护特性,例如过载和短路、热关断、软启动和压摆率控制等,方便设计人员构筑稳健的解决方案。     图2:采用ISO1541的信号和电源隔离I2C解决方案 另一个针对空间受限应用的可选方法是ISOW78xx系列器件,该系列可在小外形集成电路16引脚封装中提供信号和电源隔离特性。ISOW7842还可以与外部组件结合使用。图3提供了具有双向数据和单向时钟的系统解决方案示例,当使用一些额外组件进行修改时,可以支持双向数据和时钟信号。     图3:采用ISOW7842的信号和电源隔离I2C解决方案

    时间:2019-06-02 关键词: 总线 隔离器 技术教程 i2c

  • 有关I2C隔离器的六大设计问题

    有关I2C隔离器的六大设计问题

    我们整理了一些关于隔离I2C设计的FAQ,供您参考。这些见解是根据德州仪器在线支持社区中有关I2C隔离器的常见问题而提供的。希望这些信息能够帮助工程师在设计过程中解决信号和电源隔离的问题。1.什么情况下需要隔离I2C?隔离可防止系统两个部分之间的直流电和异常的交流电,但仍然支持两个部分之间的信号和电源传输。隔离通常能够阻止电气组件或人员遭受危险电压和电流浪涌的伤害;用于保护人员的隔离称为增强型隔离。I2C已成为许多系统中流行的全球标准;因此,隔离I2C已经扩散到大多数高压市场。常见的隔离I2C应用包括:·         网络和服务器电源中的微控制器(MCU)到MCU通信。·         汽车电池管理系统和医疗系统中MCU到模数转换器通信。·         以太网供电系统中的MCU到供电设备控制器通信。·         MCU与电流/电源监控系统的通信。2.是否可以在数字隔离器上连接两个单向信道,以实现I2C通信的双向信道?不可以,连接两个相反方向的单向信道不会产生双向信道。如果用数字隔离器替换隔离I2C器件,数字隔离器将闩锁到单一状态并变得无响应。使用数字隔离器实现隔离I2C总线需要外部组件。有关如何使用标准数字隔离器实现隔离I2C的更多信息,请参阅模拟设计期刊文章“使用数字隔离器设计增强型隔离I2C总线接口。”此外,E2E社区隔离论坛主题中更详细地说明了为什么数字隔离器在双向I2C应用中无外部组件的情况下将闩锁到单一状态。3.ISO1540和ISO1541隔离I2C器件的电流消耗是多少?ISO154x数据手册中的表6.10列出了不带任何上拉电阻的ISO1540和ISO1541的电流消耗。添加上拉电阻时,电阻会消耗额外的电流。例如,在SDA2/SCL2处向器件添加1kΩ的上拉电阻,在SDA1/SCL1处添加10kΩ的上拉电阻,VCC1 = VCC2 = 5 V时,上拉电阻消耗的额外电流将对于SDA1/SCL1为约为5mA,对于SDA2/SCL2约为0.5 mA。对于需要更低功耗的隔离I2C应用,超低功耗ISO7041可以替代ISO7731器件,如模拟设计期刊文章中第2个问题所述。ISO70xx的功耗将比ISO77xx器件提升一个数量级。4.建议什么逻辑高低输入电压电平应用于ISO1540和ISO1541隔离I2C器件?表1列出了ISO1540 and ISO1541器件1侧和2侧输入的推荐逻辑输入电压电平。表1:ISO154x输入电压电平这些输入电压电平适用于I2C数据和时钟信号。欲了解更多信息,请参阅ISO154x数据表中的表6.3。5.为什么ISO1540和ISO1541双向I2C隔离器的1侧上的逻辑低电平输出电压VOL1高达0.8 V?为了实现隔离I2C器件的双向功能,器件需要设计有两个背靠背连接的单向信道,以实现单个双向信道。直接连接两个单向信道会导致锁定情况,两个信道都是低电平。为避免这种情况,1侧输出端的二极管使1侧输出信道的低电平输出看起来像1侧输入信道的高电平。图1显示了二极管的位置。图1:ISO154x简化原理图由于该二极管,VOL1的电压最高可达0.8 V.当2侧检测到2侧为低电平时,1侧将打开场效应晶体管,使二极管导通,产生非零正向电压。ISO154x器件中的阈值经过精心设计,可确保双向信道平稳运行 - 只要VOL和VIL规范符合ISO154x数据表中表6.9.所示的ISO154x器件阈值即可。这种方法已成为业界用于实现双向I2C功能的常见做法。低逻辑电平的非零电压仍将与I2C规范兼容。请注意,这仅适用于VOL1。由于器件的2侧不需要二极管,因此VOL2最大值为0.4 V,这在大多数数字隔离器中很常见。6.如何为I2C隔离器构造隔离型电源?为I2C隔离器构造隔离型电源有几种可选的方法;最佳解决方案须视具体的应用需要而定。一个选择是使用 SN6501这样的变压器驱动器,此种驱动器可用于具有次级侧变压器和可选整流低压差稳压器的推挽式配置(图 2)。SN6501的功率高达1.5 W,可作为隔离型电源。此设备具有高度灵活性,几乎可用在所有应用中。这是因为变压器和匝数比能为电源提供必要的隔离等级和输出电压。如果您需要为其他设备提供隔离电源,则可使用SN6505而不是SN6501,获得高达5 W的输出功率。SN6505具有额外的保护特性,例如过载和短路、热关断、软启动和压摆率控制等,方便设计人员构筑稳健的解决方案。图2:采用ISO1541的信号和电源隔离I2C解决方案另一个针对空间受限应用的可选方法是ISOW78xx系列器件,该系列可在小外形集成电路16引脚封装中提供信号和电源隔离特性。ISOW7842还可以与外部组件结合使用。图3提供了具有双向数据和单向时钟的系统解决方案示例,当使用一些额外组件进行修改时,可以支持双向数据和时钟信号。图3:采用ISOW7842的信号和电源隔离I2C解决方案欲了解有关每个隔离电源选项优缺点的更多信息,请参阅“如何为隔离I2C隔离信号和电源 I2C”。您的问题在这里没有得到解答?如果您想要了解更多有关I2C隔离器的信息,或者您有任何其他问题需要解决,请在下方留言,帮助我们继续探讨。其他资源·         “实现高压信号隔离质量和可靠性”·         “通过隔离SPI和I2C简化电池管理系统(BMS)中电流和电压监控”。·         “采用ISOW7841集成信号和电源隔离器的低功耗设计”。

    时间:2019-05-20 关键词: 数字隔离器 faq iso154x i2c

首页  上一页  1 2 3 4 5 6 7 8 9 10 下一页 尾页
发布文章

技术子站

更多

项目外包