从USB到I²C的桥接

描述

该电路提供直接I2电脑 USB 端口的 C 接口。USB转1线加密狗为PC提供1-Wire主控器,用于控制1-WireI/O扩展器。此 I/O 扩展器具有两个双向开漏端口,PC 可以写入和读取这些端口。通过在这两个端口上生成正确的逻辑信号,PC可以模拟I®2C 主控。

当您需要直接 I 时2C接口到您的PC,有几个选项可用。例如,PC的并行端口可以模拟I2C主机。然而,新PC通常缺少此端口,并且Windows的现代变体(Windows XP和Windows Vista)不允许轻松访问它。

更好的方法是使用USB端口,但该技术需要复杂的驱动程序,并且通常还需要微控制器,而微控制器又需要固件。不是你能在一个下午建造的东西!有许多商业版本可用,但它们并不便宜。另一方面,图1的电路可以快速构建,并且可以与LabVIEW和Visual Basic等多种编程语言一起运行。

1-Wire

图1.该电路提供I2计算机 USB 端口的 C 接口。

U1 (DS9490R)是一款USB转1线桥接器,为PC增加了一个1线主机。连接至1-Wire网络的1-WireI/O扩展器(U2、DS2413P)提供两个双向漏极开路端口,可通过U1由PC控制。这就是创建 I 所需的所有硬件2C 主控。

软件

对于缺少硬件的微控制器,I2C master,“位敲击”是实现软件 I 的行之有效的方法2C 主控。这是用于启用软件 I 的技术2此平台的 C 母版。

软件生成 I2通过控制 U2 的 PIOA 和 PIOB(引脚 6 和 4)的逻辑电平来发出 C 信号。例如,要创建起始条件,SDA 必须在 SCL 为高时从高过渡到低。将 SCL (PIOA) 驱动为高电平,然后将 SDA (PIOB) 驱动到高电平,然后将 SDA 拉低。因此,软件实现了 I2C 通过控制 PIOA 和 PIOB 来控制。DS2413数据资料中的流程图显示了这种PIO功能(图2)。

1-Wire

图2.PIO功能流程图,取自DS2413数据资料。

要更改PIO输出,必须首先通过ROM功能对器件进行寻址。该系统仅包含一个1-Wire从机,因此您可以使用“skip ROM”命令跳过复杂的寻址过程。然后,通过发送“5A”命令写入 PIO 输出锁存器。1-Wire I/O扩展器(U2)包括一个8位寄存器,其两个LSB连接到PIOA和PIOB。(其他六位不在乎。

为了更改逻辑状态,新数据将发送两次:一次按原样发送,一次反转。从机(U2)通过向主站返回“AA”命令来确认无差错接收,并通过发送新的输出状态来结束。整个序列现在可以重新开始,也可以通过1-Wire主机的复位中止。因此,您必须为每个输出更改传输四个字节(不包括跳过ROM和5A命令)。例如,您必须执行以下序列来生成 I2C 启动命令:

 

主模式 数据 评论
TX (重置) 重置总线
RX (存在) DS2413 存在
TX 0xCC 跳过只读存储器
TX 0x5A 写入 PIO 寄存器
TX 0xFF SCL=1 & SDA=1
TX 0x00 倒置数据
RX 0xAA 接收数据
RX 0x0F 返回输出状态
TX 0xFD SCL=1 & SDA=0
TX 0x02 倒置数据
RX 0xAA 收到的数据
RX 0x2D 返回输出状态

 

类似的序列实现其他事件,如发送字节、确认和停止。

Maxim为DS9490提供软件驱动程序,以及支持Microsoft .NET平台的Windows1-Wire软件开发套件(SDK)。为了说明,我们可以实现一个 I2LabVIEW 中的 C master,使用 其 .NET 支持。这仅在安装支持.NET的1-Wire驱动程序时才有效。另一个先决条件是安装 Microsoft .NET 框架和 Visual J# 可再发行组件包。

为防止其他应用访问1-Wire网络,VI“I2C 初始化“(其中 VI 是 LabVIEW 术语,意思是 虚拟 仪器),初始化 U1 并 使 LabVIEW 独占 访问 1-Wire 网络 (图 3)。然后发出1-Wire复位,然后发出跳脉冲命令(CC),最后发出PIO写入命令(5A)。

1-Wire

图3.六“我2“C 初始化”初始化DS2413,之后即可接收I/O数据。

从站(U2)现在已准备好接受PIO的数据。六“I²C 时钟“将 SCL 线从低电平切换到高电平(图 4)。SDA可以设置高或低,VI返回SDA状态。您可以通过连续调用此函数 8 次(传输的每个位一个)来写入完整的字节。如果从站返回数据,则SDA由主站驱动高电平。为了传输“0”,从机可以将SDA拉低(这是可以的,因为PIOB是漏极开路输出)。由于U2会自动返回更新的输出状态,因此不需要特殊的读取操作(参见VI“Send I2C 字节“和”Get I2C 字节“)。

1-Wire

图4.六“I²C 时钟“将 SCL 从低切换到高。SDA可以设置为“I2C 写入“操作并读取”I2C 读取“操作。

VIs“I2C开始“,”I²C停止“和”I2C acknowledge“使用相同的结构来生成适当的SDA和SCL信号。通过组合这些VI,您可以对完整的I2C 读取或写入会话。为了说明通信会话(图5),我们读取实时时钟的寄存器0(DS1337)。然后,该设备以0x39应答,这是计算秒数的寄存器的内容。寄存器地址设置为0x00,从地址设置为0xD0,要读取的字节数设置为1。示波器图像(图6)显示了电路针对这些设置产生的信号。

1-Wire

图5.如何使用图1电路读取寄存器的示例。

1-Wire

图6.读取DS1337的寄存器0。S=开始,A=确认,Sr=重复启动,P=停止。从主到从是阴影;从奴隶到主人是白人。

由于软件开销很大,该电路产生信号的速率被限制在大约20bps。但是,这个想法可以用不同的编程语言实现。

审核编辑:郭婷

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分