您当前的位置:五五电子网电子知识单元电路接口电路通过USB连接到PC机上的IIC总线接口电路 正文
通过USB连接到PC机上的IIC总线接口电路

通过USB连接到PC机上的IIC总线接口电路

点击数:7921 次   录入时间:03-04 11:59:32   整理:http://www.55dianzi.com   接口电路

  此电路的硬件结构见下图。这个电路通过USB连接器Kl接到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是这两个漏极开路型端口的上拉电阻。这些恰恰是增加一个IIC总线所需要的全部硬件。这个电路的PCB布局图可以从www.elektor.com/080655上免费下载。当然也可以画图定制PCB板。

通过USB连接到PC机上的IIC总线接口电路

  如果微控制器没有硬件的IIC总线“主设备”,往往用软件实现IIC总线“主设备”。业界称之为“bitbanging”(译者注:Bit-banging是一种用软件替代专职硬件的串行通信的技术)。软件直接对微处理器的管脚的状态进行设置和采样,其功能涵盖诸如:时钟、电平、同步等所有参数。与此不同的是(传统的串行通信技术中),专职硬件诸如modem、UART或者位移寄存器等一般是用来处理这些参数,并且提供一个(缓存)的数据接口。软件在这种情况下同信号处理无关。实现Bit-banging技术的成本可以很低,常用于嵌入式系统。

  这时,需要用软件控制两个管脚的逻辑电平以产生IIC总线信号。例如:为了产生一个所谓的“启动”条件,SCL需要变为高电平,同时SDA要从高电平降为低电平。为了产生这个条件,首先SCL(PIOA)和SDA(PIOB)都需要变为高电平,然后SDA再被拉为低电平。因此,如果软件能够控制PIOA和PIOB,则IIC总线“主设备”就是一个软件的实体。

  为了改变PIO的输出,这个端口首先要能够寻址(ROM功能)。在本设计只有一个l-Wire总线“从设备”。因此使用了“跳过ROM”的命令(‘CC’)。

  全部1-Wire总线命令表见下表。

  可以用来跳过复杂的寻址过程。接着传送‘5A’命令,允许写入到Pl0输出锁存器(这是对DS2413的命令组,其Pl0函数流程图可以从http://datasheets.maxim-ic/en/an/AN155.pdf查到)。这里有一个8位寄存器,其两个LSB(最低有效位)被接到PIOA和PIOB(其他6位不必管它)。

  为了改变其逻辑状态,新的数据必须发送两次:一次为正的,一次为求反的。DS2413通过返回‘AA’到主设备,表示接收无误并且结束,同时也开始输出新的起始状态。

  现在,整个过程可以周而复始,或者被从1-Wire总线的“主设备”来的复位命令RESET所取消。这样每次输出状态变化时要传送4个字节(如果‘跳过ROM’和‘5A’命令不计算在内的话)。

  为了产生l2C总线开始命令,执行表1中显示的命令序列。对于其他情况,则实施用类似的命令序列如停止STOP,等待SENDBYTE,应答ACKNOWLEDGE等。

  Maxim公司提供了用于DS2490(DS9490)的软件驱动器和用于WINDOWS的1-Wire总线软件开发套件(SDK)。这个SDK提供了对于WINDOWS的.net平台的支持。作为实例,我们将显示使用其.net的支持,在LabVIEW中一个12C总线主设备是怎样实现的。这个例子只有当1-Wire总线驱动器安装并带有.net支持时才能工作。而且需要“VisualJ#Redistributable”  软件包  

  LabVIEW虚拟设备(VI)的所谓IICinitialize,下图显示了其方框图。初始化DS2490,并且给出LabVIEW对于1-Wire网络的独占的处理。

  这是为了防止其他应用程序存取1-Wire网络。此后,1-Wire复位命令发布,接着是跳过(skip)命令(CC),最后以Pl0写入命令(5A)结束。

  现在.DS2413已经准备好从Pl0口接收数据。

  VI(虚拟设备)‘IICCLOCK’SCL线从低变高翻转(见下图)。SDA可以置为高电平或低电平,而VI返回SDA的状态。通过在一行中调用这个函数8次可以写入一个完整的字节(每传输一位一次)。

  如果这个从设备返回数据,SDA就被主设备拉高。

  在从设备希望传输“0”时就可以拉低SDA(这是可以的,因为PIOA是漏极开路型输出端)。由于DS2413会自动返回被更新的输出状态,所以不需要专门的读出操作。关于字节操作,可以参见补充软件下载www.elektor.com/080655中的“sendIICbyte”和“getI2Cbyte”命令。此外,还可以下载VI虚拟设备“IICstart”,“IICstop”和“IICacknowledge”,使用相同的结构来产生SDA和SCL信号。通过组合这些虚拟设备,就可以实现完整的I2C读或写任务的编程。

  下图中我们可以看到一个通讯编程任务的实例。

 

  其中DS1337中的寄存器0(IIC实时钟)内容被读出。DS1337以O×39回答,这是以秒来计数的寄存器的内容。这个寄存器的地址设置为0×00。设从设备寻址为Ox00,要读出的字节数设置为10图6中是使用这些设置时示波器中的图像,显示出由电路所产生的信号。

  由于程序时间开销相当大,信号产生的速率受到严格的限制(为20bit/s的序列)。但是解决方法已经相当函数化,在图中使用的虚拟设备都能够从www.elektor.com下载。

 




本文关键字:接口  接口电路单元电路 - 接口电路