微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > I2C总线接口扩展技术

I2C总线接口扩展技术

时间:12-13 来源:互联网 点击:

主器件可以是没有i2c总线接口的器件,此时用它的两根i/o口线来虚拟i2c总线接口,只要时序满足i2c总线的要求,就可以进行i2c总线操作。

4.1基于单片机系统的i2c总线接口技术[2,3]

i2c总线技术最早是基于单片机系统提出的,现在越来越多的单片机带有i2c总线接口,可以直接应用。但是更多的单片机系统并没有i2c总线接口,要在 i2c总线系统中应用,必须进行i2c总线虚拟。这一技术经过多年的发展,已经十分成熟,具有专门的虚拟通用软件包viic1.0[3],用户甚至可以不必了解i2c总线的协议,也可以进行i2c总线开发,实现了操作的“傻瓜化”,极大的方便了用户,扩展了单片机的应用领域,推动了i2c总线技术的发展。

该软件包适用于80c51系列单主系统中i2c总线外围器件扩展的应用程序设计。由于软件中的时序模拟基于6mhz时钟设计,故在实际应用中可以根据具体的系统时钟来适当修改时序模拟子程序中的空操作指令,便可以直接应用。

该软件包包含以下3部分共9个子程序:

(1) 模拟i2c总线操作的典型时序:起始位(star)、停止位(stop)、发送应答位(mack)、发送非应答位(mnack) 。

(2) 模拟i2c数据传送过程:应答位检查(cack)、发送1个字节数据(wrbyt)、接收1个字节数据(rdbyt)。

(3) 模拟外围器件读写操作:i2c总线读操作过程(rdnbyt)(接收n个字节),i2c总线写操作过程(wrnbyt)(发送n个字节)。

不论总线上扩展什么外围设备,都统一采用以下3条指令作为viic软件包与用户的操作接口界面,即:

mov sla,#slar/slaw;总线上节点寻址并确定传送方向

mov numbyt,#n;确定传送字节数n

lcall rdnbyt/wrnbyt;读/写操作调用

文献中对该虚拟软件包有详细的介绍,包括源程序和使用说明,并给出了应用实例。

对应该软件包,文献4中介绍了基于franklin c51编写的虚拟i2c总线软件包viicc1.0。它由1个头文件和1个源程序组成。在使用时,用户同样不必关心i2c外围器件功能如何,都使用下面的指令:

rdnbyt(uchar slar,uchar qq[],uchar number); ――单主系统的主接收方式

wrnbyt(uchar slaw,uchar ff[],uchar number); ――单主系统的主发送方式

其中:

slar/slaw是从器件的地址 (读/写);

number是需要读写的数据字节的个数;

qq[]是从虚拟i2c总线上读出的数据数组;

ff[]是需要向虚拟i2c总线上写入的数据数组。

viicc1.0占用资源与viic1.0占用资源基本上一样。由于viicc1.0是基于 12mhz的时钟设计的,因此实际系统时钟变化时,需要在头文件中适当修改nop ( )的个数。实际应用时,只要把头文件和源程序写入相应的程序区,适当修改几个参数就可以应用,操作简单方便。

4. 2 基于dsp系统的i2c总线接口的扩展

如前文所述,i2c总线技术在以单片机为mcu的系统中应用最广泛,设计也最灵活简单。但在许多的系统中,采用dsp(数字信号处理器)作为mcu。若系统中含有i2c接口的外围器件,我们也可以直接用dsp进行i2c总线的开发。目前还没有专门带有i2c接口的dsp,所以也只能采用dsp的2根i/o 口线进行模拟。仿照文献3,4中的设计思路,文献5给出了基于tms320c2xx系列dsp的虚拟i2c总线软件包的设计和应用,极大的方便了以dsp 为mcu的i2c系统。

该软件包含有2个宏定义和12个子函数,适用于单主系统的主发送和主接收方式,支持tms320c2xx系列对i2c总线外围器件n字节的读写操作,通信方式为对虚拟节点寻址后点对点的读写。该软件包采用4根通用i/o口线(i/o0~i/o3)的任意2根模拟sda和scl,他们的输入输出方向由 aspcr的低4位设定,相应口线状态的设定或读取由iosr寄存器控制。由于c2xx系列的dsp结构与单片机有很大的不同,口线的输入输出状态不是自动切换的,且aspcr 、iosr寄存器都不支持位寻址方式,所以该软件包与前文基于单片机的软件包viic1.0/viicc1.0有所不同。对用户而言,可不必了解软件细节,只要正确设置相应存储单元的内容,调用相应的子函数就可以应用,用户接口同样简单易用。

另外,文献[6]给出了tms320vc5402实现i2c总线接口的2种设计思路。一是利用该型号dsp的多信道缓冲串口(mcbsp):通过设置 mcbsp的spcr1、spcr2和pcr 相应位,可以将mcbsp的clkr、fsr、clkx、fsx脚设置为通用i/o脚,然后按照i2c总线协议进行软件编程,就可以实现与i2c总线的接口;二是利用vc5402 的主机接口(hpi):通过设置hpi控制寄存器(hpic)、通用目的i/o状态寄存器(gpiosr)和通用目的i/o控制寄存器(gpiocr)相应位,就可以将8位的数据总线(hd0~hd7)转变成通用i/o口,然后进行编程,同样可以实现与i2c总线的接口。文献中给出了较详细的设计思路和部分程序代码。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top