该电路提供直接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.该电路提供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)。
图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)。
图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 字节“)。
图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)显示了电路针对这些设置产生的信号。
图5.如何使用图1电路读取寄存器的示例。
图6.读取DS1337的寄存器0。S=开始,A=确认,Sr=重复启动,P=停止。从主到从是阴影;从奴隶到主人是白人。
由于软件开销很大,该电路产生信号的速率被限制在大约20bps。但是,这个想法可以用不同的编程语言实现。
审核编辑:郭婷
-
微控制器
+关注
关注
48文章
7487浏览量
151027 -
usb
+关注
关注
60文章
7891浏览量
263960 -
1-Wire
+关注
关注
0文章
49浏览量
21293
发布评论请先 登录
相关推荐
评论