历史上的今天
返回首页

历史上的今天

今天是:2025年03月24日(星期一)

正在发生

2018年03月24日 | 8051单片机的I2C接口并行扩展及接口设计

2018-03-24 来源:eefocus

    1 前 言

    I2C总线接口器件在视频处理、移动通信等领域的应用已经非常普遍。另外,通用的I2C总线接口器件,如带I2C总线的RAM,ROM,A/D,D/A,LCD驱动器等,也越来越多地应用于计算机及自动控制系统中。随着I2C接口器件越来越广泛的应用,8051系列单片机与他之间的通信越来越频繁。

 

    8051系列单片机与I2C总线接口器件通信时,8051的通用口与I2C总线器件的SCL,SDA连接。根据I2C 总线数据传输协议,8051必须对其两个通用口进行频繁的置位、清零。根据基于51指令系统编制的汇编程序,传送一位数据,需要9个机器周期,而对于 8051,一个机器周期要耗费6个时钟周期,即用54个时钟周期才能传送一位数据。如此则极大地占用了CPU的工作时间,降低了系统的工作效率,导致I2C器件的优势难以显现。因此,有必要设计8051与I2C总线的专用接口电路。该接口电路能够对I2C总线上的数据进行自动收发,而CPU只需要通过并口访问该接口电路中的有关寄存器就可以实现与I2C器件的数据交换,从而使整个系统的性能得到提高。本设计用VHDL硬件描述语言为工具,用ALTERA公司的 MAXPLUSⅡ软件进行编译仿真,下载芯片为EPM7128SLC84-15。

    2 设计目标和要求

    为了提高数据传送的速度,设计一个I2C接口电路。8051不直接与I2C器件交换数据,而是通过并口与该I2C接口电路交换数据,I2C总线上的数据传送也通过该I2C接口电路来完成。从而通过CPU的外部存储器读写指令就可实现与I2C器件的数据交换,使对串口的操作用并口的方式来实现。

    在I2C接口电路内部有一个控制寄存器CI0和一个数据寄存器CI1,即I2C接口电路占用两个地址。通过写控制寄存器CI0的内容实现对I2C接口电路的编程,读写数据寄存器CI1的内容实现与I2C器件的数据交换。在CI0中的内容定义了8051对I2C器件进行操作的类型(读或写)和I2C器件内地址的字节数等信息,使I2C接口电路能够识别从8051传来的数据是地址还是数据、8051将要发送数据还是接收数据以及数据的长度等。

    如果8051要发送数据给I2C器件,则根据I2C总线协议,在数据CI1接收到第一个数据后启动I2C总线,然后将CI1中的数据进行并串转换后逐位发出,发出完毕后设置一个标志位,使8051知道可以发送下一个总线后首先写I2C器件内地址,然后进行数据接收,进行串并转换后将接收到的数据装入CI1中,再设置标志位,使8051知道可以读出数据。

    根据上述设计要求,I2C接口芯片的引脚如图1所示。其中clk可以使用独立的时钟,使I2C总线的位传送速度远高于8051的位操作,从而可使I2C总线的数据传送接近并口的数据速率;a0是地址信号输入,a0=0时进行CI0写操作,当a0=1时进行CI1读/写操作;bz为标志输出位,bz=0时,8051需要等待,bz=1时8051可以对CI1操作。

   19.gif?imageView2/2/w/550

    I2C接口芯片在系统中的情况如图2所示。这里8051对I2C接口芯片操作使用了查询方式,也可以改用中断方式。

   20.gif?imageView2/2/w/550

    3 并行接口设计的实现

    3.1 接口设计的内部结构

    该芯片的内部结构图如图3所示。系统由控制寄存器CI0,数据寄存器CI1,并串转换,串并转换,移位寄存器以及I2C控制模块6部分构成。


    3.2 方式控制字

    8051向控制寄存器CI0写控制字,实现对I2C接口的编程控制。CI0的控制字格式如下所示:

   21.gif?imageView2/2/w/550


    A2,A1,A0位:对与8051相连的I2C器件组的片选(器件地址)。对应不同值时选择不同的器件通信。

    R/W:用来控制8051对I2C器件的读写操作。1表示8051对I2C器件读数据;0表示8051对I2C器件写数据。

    M1M0:当S=1时的4种工作方式:

    ①I2C总线未连接,要进行写操作。

    ②I2C总线未连接,要进行读操作。

    ③I2C总线已连接,换一个I2C器件或换新地址,要进行写操作。

    ④I2C总线已连接,换一个I2C器件或换新地址,要进行读操作。

    S:工作控制位。当S=0时,关闭I2C总线,其他情况S=1。

    DZS:指明8051对I2C器件读写的地址数。具体为:

    0:8051对I2C器件内单字节地址读写。

    1:8051对I2C器件内双字节地址读写。

    3.3 I2C模块对I2C传输协议的实现

    根据I2C数据传输协议,时钟为高电平时,数据线由高电平向低电平跳变,启动I2C数据传输。然后每到来一个时钟脉冲,传送一位串行数据,第8个脉冲到来后,已完成一个字节的传输,第9个脉冲时,发送应答信号。写数据时,I2C器件收到数据,发送应答信号;读数据时,8051收到数据,发送应答信号。数据传送过程中,时钟为高电平期间,数据线上的内容保持不变。数据传送完毕,应答结束后,需要用停止信号停止数据传输,时钟高电平时,数据线由低电平向高电  55平跳变来实现此停止信号。

    I2C模块实现I2C数据传输协议。start信号为1时,启动数据传输;write信号为1时,向I2C器件写数据,read信号为1时,向I2C器件读数据。

    读写过程中,输出标志位flag、计数器dcnt,控制en的两位矢量,从而控制并串转换寄存器和串并转换寄存器的并入、移位、保持、清零操作。停止信号为1时,结束数据传输。

    3.4 接口芯片的工作原理与控制过程

    8051向控制寄存器CI0写控制字,实现对I2C接口的编程控制;向数据寄存器CI1写数据,实现对I2C接口的数据传输。

    当bz=1时,8051才对数据寄存器读写,而每次读写后接口电路自动将bz置0,在接口电路完成有关操作等待8051的读写时将bz置1。

    (1)I2C总线未连接,要进行写操作。8051的操作:

    ①写控制字W1;②当bz=1时写器件内地址第1字节;③当bz=1时写器件内地址第2字节…;④当bz=1时写第1字节…。

    I2C的操作:

    当接收到该控制字W1后操作为:①置bz=1,启动I2C总线;②根据控制字中的器件地址发出第1个字节(器件选择、写);③发送器件内地址,置bz=1;④发送数据内容,置bz=1…。


    (2)I2C总线未连接,要进行读操作。8051的操作:

    ①电路写控制字W2;②写器件内地址第1字节; ③当bz=1时写器件内地址第2字节…;④当bz=1时读第1字节…。

    I2C的操作:

    当接收到该控制字W2后操作为:①置bz=1,启动I2C总线;②根据控制字中的器件地址以出第1个字节(器件选择、写);③发送器件内地址;④关闭I2C总线;⑤启动I2C总线;⑥第2次发送器件选择字节、读;⑦接收数据内容,置bz=1…。


    (3)I2C总线已连接,换一个I2C器件或换新地址,要进行写操作。

    8051的操作:

    ①写控制字W5;②当bz=1时写器件内地址第1字节;③当bz=1时写器件内地址第2字节…;④当bz=1时写第1字节…。

    I2C的操作:

    当接收到该控制字W5后操作为:①置bz=1,关闭I2C总线;②启动I2C总线;③根据控制字中的器件地址发出第1个字节(器件选择、写);④发送器件内地址,置bz=1。

    (4)I2C总线已连接,换一个I2C器件或换新地址,要进行读操作。

    8051的操作:

    ①电路写控制字W6;②写器件内地址第1字节; ③当bz=1时写器件内地址第2字节…;④当bz=1时读第1字节…。

    I2C的操作:

    当接收到该控制字W6后操作为:①置bz=1,关闭I2C总线;②启动I2C总线;③根据控制字中的器件地址发出第1个字节(器件选择、写);④发送器件内地址;⑤关闭I2C总线;⑥启动I2C总线;⑦第2次发送器件选择字节、读;⑧接收数据内容,置bz=1…。

    4 结 语

    扩展接口芯片设计采用VHDL语言实现,芯片设计的全部程序均通过ALTERA公司的MAXPLUSⅡ软件编译,仿真结果正确。编译、仿真后的VHDL 程序经下载线下载至EPM7128SLC84-15芯片,验证正确。设计的接口时钟要求6 MHz,可直接和单片机接口连接。

    扩展后的接口,传送一位数据只需要4个时钟周期。扩展的接口,访问I2C器件的时钟可以自行设定,他们之间的通信不需要等待8051。一旦8051的并行数据送出,该接口可立即用自己设定的速度传送。从而该接口在8051和I2C器件之间通信时,数据的传送可达到并行的速度,这就是本接口扩展设计的最大优点。

    由于使用的设计软件是ALTERA公司的MAXPLUSⅡ软件,下载仿真芯片为EPM7128SLC84该芯片延迟时间为15 s,延时时间过长;接口的设计本身对数据传输的时钟也可进一步减少,更进一步提高数据传输的速度。基于以上两点,还需要对本设计进一步优化,以期进一步提高性能与速度。

    参考文献

    [1]何立明.I2C总线应用系统设计[M].北京:北京航天航空大学出版社,1995.

    [2]曾繁泰,陈美金.VHDL程序设计[M].北京:清华大学出版社,2002.


推荐阅读

史海拾趣

Analogix Semiconductor公司的发展小趣事

Analogix Semiconductor是一家全球领先的高速接口解决方案供应商,专注于设计和制造创新的数字视频传输芯片和接口技术。以下是Analogix Semiconductor公司发展的相关故事:

  1. 成立与初期阶段:Analogix Semiconductor公司于2002年成立,总部位于美国加利福尼亚州圣何塞市。公司的创始人包括James Zhou博士和Bill Hata。公司成立之初,主要致力于研发和生产数字视频传输芯片,旨在为消费电子市场提供高性能的连接解决方案。

  2. 技术创新与产品推出:Analogix Semiconductor公司通过不断的技术创新和产品研发,迅速在行业中树立了良好的声誉。公司推出了一系列创新的高速接口解决方案,包括DisplayPort、HDMI、USB和MIPI等技术。这些产品以其高质量、高带宽和低功耗而受到市场的广泛认可。

  3. 市场拓展与全球业务:随着公司产品线的不断丰富和技术实力的增强,Analogix Semiconductor迅速拓展了全球市场。公司在亚洲、欧洲和北美等地建立了广泛的销售网络和合作伙伴关系,为客户提供定制化的解决方案和优质的服务。

  4. 应用领域与客户合作:Analogix Semiconductor的产品被广泛应用于消费电子、计算机、通信和汽车等领域。公司与全球领先的电子设备制造商、芯片设计公司和系统集成商等客户建立了长期稳定的合作关系。通过与客户的密切合作,Analogix Semiconductor不断了解市场需求,提供符合客户要求的创新产品和解决方案。

  5. 持续发展与未来展望:作为一家持续成长的公司,Analogix Semiconductor将继续致力于技术创新和产品优化,满足不断变化的市场需求。公司将继续加强研发投入,拓展产品应用领域,提升市场竞争力。在未来,Analogix Semiconductor将继续秉承“创新、质量、服务”的经营理念,为客户提供更加优质和可靠的解决方案,实现共同发展和成功。

All Sensors公司的发展小趣事

All Sensors公司的创始人Dennis被誉为美国硅谷的传奇人物。在70年代,Dennis在硅谷成功发明了全球第一颗压力传感器,这一创新不仅奠定了All Sensors在传感器领域的领先地位,也为整个电子行业带来了新的技术革命。这颗传感器的诞生,标志着All Sensors正式踏上了传感器技术的研发之路,为后续的发展奠定了坚实的基础。

Amptek Inc公司的发展小趣事

All Sensors在传感器技术领域一直保持着世界领先的地位。公司掌握着核心的MEMS传感器技术,如独有的CoBeam2 TM传感器技术等。这些技术的应用使得All Sensors的传感器在精度、稳定性和寿命等方面都达到了行业领先水平。同时,公司还不断投入研发,推出更多创新产品,满足不断变化的市场需求。

ERGOBAHCO公司的发展小趣事

进入21世纪后,电子行业面临着技术更新换代的巨大变革。ERGOBAHCO公司敏锐地捕捉到了这一变革带来的机遇和挑战,开始加大在新技术、新产品的研发力度。公司通过与高校、科研机构等合作,成功推出了一系列符合市场需求的智能化、绿色化的电子产品。这些产品不仅为公司带来了丰厚的利润回报,也进一步巩固了公司在行业内的领先地位。

AiT Semiconductor Inc公司的发展小趣事

对于半导体行业来说,产品质量是企业的生命线。AiT公司一直注重质量管理,从原材料采购到产品生产、检测等各个环节都严格把关。他们引进了先进的质量管理体系和检测设备,确保每一件产品都符合高标准的质量要求。同时,公司还建立了完善的客户服务体系,及时解决客户在使用过程中遇到的问题。这些举措使得AiT公司的产品在市场上赢得了良好的口碑和客户信任。

ESS [ESS Technology,Inc]公司的发展小趣事

ESS不仅在个人电脑音频领域取得了显著成就,还在HIFI领域实现了突破。ESS的HIFI传承可以追溯到其创始人对音频技术的深刻理解和对市场需求的敏锐把握。通过多年的技术积累和不断创新,ESS成功推出了多款高性能的HIFI音频芯片,如ES9018,这些产品凭借其卓越的性能和音质赢得了广泛好评。

问答坊 | AI 解惑

USB下载线

和大家一起分享一下,谢谢诶!…

查看全部问答>

EPGA超好的学习教材

本帖最后由 paulhyde 于 2014-9-15 09:30 编辑 EPGA超好的学习教材,需要的就来下。  …

查看全部问答>

8280 spi 从模式设置问题

我用两个8280板子调spi通信功能 现在其中一个板打环自己发收没问题 然后一个设置为主,一个设置为从 主发数据,从没反应 我采用的是中断响应,提示的是MME,多主模式错误 不过从机,我确实是设置成了slave模式 现在可以判断,是从机设置的有 ...…

查看全部问答>

请教

我是自动化的学生 以后想从事嵌入式系统开发方面的工作 学VC++有没有用啊 ?…

查看全部问答>

求powerpc860的封装,管脚定义文档

从freescale下的datasheet里面没有找到关于pinout list,真是奇怪了,8260文档里就有.请哪位朋友给份说明给我,谢谢了! wangkun0227@163.com…

查看全部问答>

转一篇学习STM8的好文章哈

第一节: 心情和时钟        说实话我能够使用的单片机不多,我总是以为无论什么单片机都能开发出好的产品。 前些年用51,总是向各位大大学习,无休止的索取,在网上狂览一通。心里感激的同时也想奉献一些,可是我会 ...…

查看全部问答>

请教大侠!测试架读到得nand flash id 是错误的,有没有办法修复?

请教大侠!测试架读到得nand flash id 是错误的,有没有办法修复?有搞过恢复nand flash ID的兄弟请加致电:15899781278 莫  QQ:236136…

查看全部问答>

毕业设计求助!!!急,求各位老大帮忙

我做的是 校园作息时间控制系统   可就是不对,请各位老大帮忙看下吧,帮忙给改下,不胜感谢 关键是我的DS12887芯片 就是不走时。。。…

查看全部问答>

转让正点原子ALIENTEK STM32开发板+2.8寸触摸屏

http://ershou.taobao.com/item.ht ... yotE&id=21972604671 …

查看全部问答>

MSP430 G2553-看看程序在你们的板子上运行起来怎么样

大家好!  我这是一个 Launchpad口袋实验平台 (指导书)(第六章)中所给是用按键控制的pwm方波的例子  这个在我的板子上用示波器测出来  占空比很不稳定 ,led灯没按按键是而不是稳定的亮    希望坛友 ...…

查看全部问答>