廉价的处理器可用作PC的RS-232端口与任何Maxim或Dallas 2线器件之间的接口。这允许操纵2线器件进行评估(在原型期间)或在某些测试过程中使用。应用笔记包含框图和达拉斯FTP站点的链接,可在其中下载软件和固件示例以实现应用笔记。它作为希望构建自己的界面的客户提供参考,而不是作为成品呈现。
介绍
本应用笔记讨论了如何构建廉价的微处理器电路,允许PC使用其串行端口与2线器件通信。除了提供硬件、固件和软件设计以使PC能够与IC通信的一般见解外,还介绍了完整的PIC微处理器参考设计,以展示如何围绕2线器件构建PC应用。该参考设计包括完整的原理图、固件和低级串行端口代码C++以快速启动任何希望集成2线器件的应用。原理图、固件和软件可以从达拉斯半导体的FTP站点下载。
概述
通常,当客户提供与达拉斯半导体评估套件相关的反馈时,他们表示他们正在使用它们来评估达拉斯半导体的 IC,而无需在此过程中努力编写软件来练习零件。然而,在过去几年中,一个趋势似乎变得越来越普遍,即客户在设计的原型设计阶段使用评估套件与部件进行通信。在过去,这意味着既要使用达拉斯半导体公司为其使用的产品编写的图形用户界面(GUI),也要使用DS9123串行端口适配器,这是一种与2线器件通信的缓慢方法。
本应用笔记旨在帮助希望构建自己的电路以促进PC和2线器件之间通信的客户,并向他们展示如何生成特定于其应用的定制软件。它分为四个部分,分别侧重于硬件设计、固件、软件,最后一部分提供分步演练,展示如何构建参考设计、对PIC进行编程以及开始为2线应用编写定制软件。
设计将PC连接到2线器件的硬件
首先,最好在开始工作之前明确定义正在设计的内容,这是硬件支持的。 从PC接收数据,然后将其中继到2线设备。
有很多方法可以将数据从PC传输到外部硬件,那么为什么串行端口是许多应用的首选呢?首先,每台PC上都有串口,RS232标准已经明确定义了访问端口。此外,PC和微处理器都包含串行端口,因此与微处理器的通信非常简单。这种标准化的其他三个显着优点是PC将以相同的波特率发送数据,无论其处理能力如何,串行端口在大多数PC上通常是免费的,并且为串行端口编写的软件倾向于在所有Windows™操作系统平台上工作。也可以通过从串行端口的I / O信号中窃取电源来寄生地为某些适配器供电;但是,对于参考设计来说,这是不可能的,因为它消耗太多的功率。这主要是由于该设计以相对较高的频率(3.6864MHz)工作,这增加了超出寄生供电的功率要求。
选择串行端口的主要缺点是它肯定需要一个微处理器将RS232数据格式转换为2线协议,在这种情况下,可以使用其他一些I / O设备在不添加微处理器的情况下执行任务。此外,串行端口使用 ±12V 信号进行通信。这将需要一个IC将信号电平转换为微处理器可以处理的水平。虽然可以以 115.2kbps >数据速率运行,但 PC 和微处理器都需要能够以所选速度运行。通常,PC能够支持所有标准波特率,但微处理器可能会在发送和接收数据的速度方面存在一些限制。
还有其他用于构建 PC 硬件的选项。除串行端口外,最常见的两种是使用并行端口或通用输入/输出卡 (GPIO)。这两个选项都存在必须处理才能成功使用它们的问题。并行端口不如串行端口标准。随着时间的推移,并行端口有四个标准,并且有各种芯片组以不同的模式操作端口。最初的标准并行端口 (SPP) 是第一个标准,大多数 PC 都支持。问题是可能必须在运行应用程序的计算机的 BIOS 中启用端口的 SPP 模式。此外,在并行端口上很难处理时序,因为它在很大程度上取决于所使用的计算机的速度。
GPIO 卡不是 PC 上的标准设备,因此必须单独购买并在购买 PC 后安装。此外,没有GPIO卡标准,因此无法确保为一个卡编写的软件适用于多个系统。
另一个流行的选项是USB。USB的主要优点是能够寄生为更大的电路供电,以及连接的带宽。缺点是电路必须在5V的系统电压下工作,并且固件和软件变得更加复杂,因为它们现在必须能够使用设备驱动程序进行通信。
由于串行端口用于与参考设计中的2线器件通信,因此需要解决三个主要问题,以实现PC和微处理器之间的通信。
什么将用于将RS232信号电平转换为微处理器可以处理的水平?
微处理器是否有通用异步接收器发射器 (UART),或者是否会编写软件 UART?
如果使用硬件UART,哪些晶体频率与微处理器的波特率发生器配合良好?
由于串行端口使用±12V信号进行通信,因此它们不能直接连接到微处理器。幸运的是,达拉斯半导体和Maxim都制造了几个RS232电平转换器芯片,将±12V信号转换为0至5V或0至3V信号。DS100A、MAX232和MAX232最容易使用,3221%符合RS3223规范。DS232A为5V器件,将RS232信号电平转换为0至5V信号,两个Maxim芯片工作在3V至5.5V,具有一个(MAX3221)或两个(MAX3223)串行通道。所有器件都支持高达120kbps的波特率。
UART用于在发送和接收数据时保持通信的定时。许多(但不是全部)微处理器都包含符合RS232标准的硬件UART。除了处理时序之外,硬件UART还处理从字节到位流的数据序列化,并且无需软件干预即可发送/接收开始和停止控制位。上述所有问题都可以由软件UART处理,但它通常必须以较慢的波特率处理,并且仅处理串行端口通信可能需要微处理器的很大一部分时间。传统观点认为,通常最好购买带有硬件UART的微处理器。它允许高效的中断驱动代码来控制串行端口外设,它往往更可靠,并且由于RS232端口非常普遍,成本增加通常很小。
使用硬件UART时要考虑的重要一点是使用振荡器或晶体,其频率将与微处理器的波特率发生器配合使用。波特率发生器通常使用时钟频率除以 2 的幂来设置波特率。时钟频率为11.0592MHz的分数或倍数通常适用于此任务。选择晶体频率后,应使用微处理器数据表中的公式计算波特误差。如果大于 3%,则可能无法在微处理器和 PC 之间建立通信。此外,使用电阻/电容(RC)时钟源的微处理器很可能无法维持串行通信,因为工作频率可能会漂移超过3%。由于波特率误差将跟随微处理器时钟频率的百分比变化,因此这与静态波特率误差为3%会带来相同的问题。
一旦 PC 和微处理器通信,两条集电极开路 I/O 线,上拉至 2 线器件的 V抄送与2线器件通信需要电平。PIC 参考设计使用两个三态图腾柱输出,但它通过将信号驱动低电平或三态输出来仿真集电极开路器件。此输出与真正的集电极开路输出之间的唯一区别是 V抄送2线器件的电平必须等于或低于V抄送PIC 电路的电平。如果不保持这种关系,输入的电压电平将违反PIC的输入电平规范。
本节的其余部分重点介绍参考设计硬件的细节。图1所示为参考设计电路的框图。
图1.参考设计的硬件框图。
除了本节开头的标准外,以下项目是本电路的设计目标:
在抄送范围 3.0-5.5V
57600波特串行端口通信
在线可编程微处理器
电路必须能够从软件复位
便宜的组件
电路板应尽可能小
为了实现这些目标,之所以选择 PIC16LF628 处理器,主要是因为其低电压运行和低成本。其他理想的特性包括用于基于中断的快速通信的硬件UART,允许精确吟游诗人速率的晶体输入,并且采用小型20引脚173mil TSSOP封装。
为了转换RS232端口的信号电平,选择MAX3223是因为当与单电源(232.3V至0.5V)一起使用时,MAX5信号电平可提供真正的RS20信号电平。此外,它还具有两个通道,允许使用串行端口的DTR(数据终端就绪)信号来重置电路板。该器件还提供微型 3223 引脚 TSSOP 封装。MAX<>和PIC可以采用相同的V工作电压抄送电源,两个芯片都将在3V至5.5V范围内工作。这允许该板同时使用 3V 和 5V 2 线器件。
信号 RA0 和 RA1 用于与 2 线器件通信,上拉电阻连接到它们以用于集电极开路 2 线总线。 RB1 和 RB2 通过 MAX3223 连接到串行端口,MAX232 使用外部电容(未显示)产生真正的 RS2 电平。其余 I/O 引脚用于位 I/O。它们可用于其他串行协议,或根据需要控制3223线器件上的其他数字输入。这将在固件部分进行更深入的描述。框图所示电路中最复杂的部分是复位电路。在PIC微处理器上,MCLR是低电平有效复位信号。NMOS的栅极连接到DTR信号,由MAX<>进行电平转换。如果 NMOS 栅极处的 DTR 信号为高电平,则 NMOS 将接通,这将使 PIC 处于复位状态。如果 DTR 信号在 NMOS 栅极处较低,它将释放 MCLR 信号,这将允许 MCLR 信号自行调整为 V抄送在正常操作或 V聚丙烯如果PIC正在电路编程。肖特基二极管的存在是为了隔离V聚丙烯来自 V 的电源抄送在编程期间供电,当NMOS强制处理器复位时,电阻会限制二极管的通电流。尽管 MCLR 已连接到连接器,但在正常工作期间应断开此引脚。它仅用于PIC的在线编程。
整个参考设计的完整原理图和物料清单 (BOM) 可在达拉斯半导体的 FTP 站点上找到。本文档的演练部分中提供了指向 FTP 站点上该位置的链接。
设计固件以与PC和2-Wire器件通信
手头的任务是从RS232串行协议到2线协议的数据转换,但还有其他事情需要考虑。首先,必须为2线主站发出启动和停止总线命令,以建立与从器件的通信。此外,在特定应用程序中,要写入或从特定设备读取的数据量将有很大差异,设备地址以及通过在特定地址读取和写入执行的功能也会有很大差异。因此,编写的固件不包含特定于设备的命令,并且它被设计为尽可能快地执行任何给定命令的低开销协议。这允许软件做出决策并控制应用程序流,而固件仅接收基本命令并执行它们。图 2 显示了参考设计使用的命令协议。
图2.与 PIC 电路通信的串行端口命令
命令 | 发送的第一个字节 | 发送的第二个字节 | 返回的字节数 |
启动(重新启动) | A0h | 0x00,忽略 |
0xB0命令确认 0xFA命令失败 |
写入字节 | A1h | 数据 |
0xB1命令确认 0xFA命令失败 |
读取字节 | A2h |
确认 0x01 = 确认 0x00 = 纳克 |
返回的第一个字节 = 返回的数据 返回 的第二个字节 0xB2 = 命令 Ack 0xFA = 失败 |
停 | A3h | 0x00,忽略 |
0xA3命令确认 0xFA命令失败 |
切换 SCL 9 次 | A4h | 0x00,忽略 |
0xA4命令确认 0xFA命令失败 |
位 I/O 读取 | 呃?h | 0x00,忽略 |
0x00读取位清除0x01读取位设置 0xFA命令失败 |
位 I/O 写入 | F?h |
0x00 清除位 0x01设置位 |
0xF0命令确认0xFA 命令失败 |
?值 | ?指定一个未使用的针脚微处理器针脚。添加这部分命令处理器代码是为了便于将该适配器用于其他非标准协议,例如DS17中的3位1867线移位寄存器。 |
被认为是2线通信必不可少和基本的项目是启动(重新启动)总线命令、停止总线命令、写入数据字节、读取带确认的数据字节和读取不确认的数据字节。固件支持其他三个项目。第一个是切换 SCL 九次的命令,如果在通信过程中检测到错误,这对于重置 2 线总线很有用。最后两个是位 I/O 读取和写入,它读取 I/O 引脚的状态或设置 I/O 引脚的状态,具体取决于发出的命令。这些命令的存在是为了允许将PIC端口A和B上的剩余I/O信号用于设计人员可能需要的任何内容。
图3显示了与响应地址2x0的40线器件通信所需的顺序。每个操作都要求 PC 向 PIC 发送两个字节。一旦PIC收到第二个字节,它将开始处理它收到的数据。接收的第一个字节确定要执行的操作类型(启动、发送数据等)。如果命令需要数据操作数,它将查看发送的第二个字节,否则忽略第二个命令字节。由于处理器期望每条指令有两个字节,因此如果命令不需要第二个字节,则必须发送虚拟字节。如果 PIC 收到无效命令,它将返回 0xFA,这表示失败。
图3.示例2线写和读通信序列
发送启动命令,将0x23写入地址2x0的40-Wire器件,发送停止命令 | |||||
序# | 发送的第一个字节 | 发送第 2 个字节 | 返回的第一个字节 | 返回第 2 个字节 | 描述 |
1 | 0xA0 |
0x00 占位符 |
0xB0 命令确认 |
没有 | 2线启动 |
2 | 0xA1 |
0x40 数据 |
0xB1 命令确认 |
没有 | 通过 0 线总线发送40x2(写入地址。字节) |
3 | 0xA1 |
0x40 数据 |
0xB1 命令确认 |
没有 | 通过0线总线发送23x2(数据到2线部分) |
4 | 0xA3 |
0x00 占位符 |
0xB3 命令确认 |
没有 | 2线挡块 |
发送启动命令,从地址0x23的2线器件读取0x40,发送停止命令 | |||||
顺序 3 | 发送的第一个字节 | 发送第 2 个字节 | 返回的第一个字节 | 返回第 2 个字节 | 描述 |
1 | 0xA0 |
0x00 占位符 |
0xB0 命令确认 |
没有 | 2线启动 |
2 | 0xA1 |
0x41 数据 |
0xB1 命令确认 |
没有 | 通过 0 线总线发送41x2(读取地址。字节) |
3 | 0xA2 |
0x00 阅读带纳克 |
0x23 数据 |
0xB2 命令确认 |
读取带纳克 第1个字节0x23(来自2线部分的数据) 第2个字节0xB2(命令确认) |
4 | 0xA3 |
0x00 占位符 |
0xB3 命令确认 |
没有 | 2线挡块 |
始终返回至少一个值以确认命令已成功完成或失败,在 2 线读取字节操作的情况下,将同时返回数据字节和命令的确认。PIC 为每条指令返回的确认字节实际上是在通知软件两个项目都成功发生。首先,它确认 PIC 正在与 PC 通信。这在大多数时候可能看起来简单可靠,但它确实提供了反馈,以通知用户串行电缆断开,或者尚未向应用板供电。其次,它验证持续监控2线通信的PIC是否看到预期的确认。这意味着从PC到PIC或从PIC到2线器件的通信都不会中断。
位 I/O 命令(0xE 和 0xF?)可用于将 I/O 引脚的状态设置为输出,也可以将引脚置于高阻抗状态并将其读取为输入。由于本应用笔记不针对位I/O操作,因此在此结点不再深入讨论。但是,命令协议包含在图 2 中,而 ?识别特定I/O引脚的值如图4所示。
图4.位 I/O 读写地址
描述 | ?值 | 端口销 |
位 I/O 读取(0xE? 位 I/O 写入(0xF? |
1 | RA2 |
2 | RA3 | |
3 | RA4 | |
4 | RB0 | |
5 | RB3 | |
6 | RB4 | |
7 | RB5 | |
8 | RB6 | |
9 | RB7 | |
一个 | RA0 | |
B | RA1 |
为了实现上面讨论的固件,构建了图 5 中所示的程序流程。程序等待接收两个命令字节,并在收到每个字节时对其进行验证。一旦收到两个有效字节,程序就会执行该命令。如果未收到两个有效字节,固件将拒绝该命令,并返回错误代码而不是命令确认。固件 (dsio.hex) 可在 FTP 站点上找到。
图5.固件程序流程。
如果项目需要自定义固件,强烈建议将固件与PC软件分开编写和调试。这可以使用终端程序来模拟固件开发期间对PC的要求来完成。这允许分离问题,并且可以将调试时间保持在最短。
为PC编写低级软件以控制PIC
在编写低级PC代码以与PIC电路通信时,要努力实现的主要目标是使代码可重用。这使得在提供PC通信代码的初始工作完成后,将PIC电路与多个2线项目一起使用变得简单。本节重点介绍将引用的“通信代码”,该代码允许PC与PIC的固件进行通信。这不应与GUI软件开发人员生成的最终应用程序代码混淆。下一节将集中介绍如何从头开始构建应用程序(硬件和软件)。此外,尽管可以在不涉及语言细节的情况下解决此主题,但将从C++的角度进行讨论,因为它是所提供代码的语言。
C++是一种非常强大的语言,它包含大量预定义的变量类型以及类,允许定义用户定义的对象和变量。在这种情况下,代码可重用的方式是编写一个C++类来处理与PIC电路的所有通信。由于所有通信要求都包含在单个类中,因此该类的任何实例都能够命令电路执行其任何功能。提供的类称为 CdsPic,它包含在两个文件中,DSPIC.cpp 和 DSPIC.h。
C++类初始化类的构造函数中的串行端口。初始化将打开 COM1,重置 PIC,然后等待 PIC 的串行端口初始化横幅将 PIC 电路标识到 PC。如果 PIC“未找到”,构造函数将关闭 COM1,并尝试 COM2,然后尝试 COM3,最后尝试 COM4。找到正确的端口后,它将退出构造函数,并且 DetectBoard() 函数将在调用时返回 true。如果在检查所有四个端口后未找到 PIC,构造函数将退出,并且 DetectBoard() 函数在调用时将返回 false。如果函数返回 false,则由应用软件来处理问题。
假设适配器被“找到”,那么只要类保持在范围内,就可以调用该类的所有 2 线函数。这些函数包括 Start2W()、WriteSlave2W()、ReadSlave2W() 和 Stop2W()。此外,还有一个命令(ToggleSCL9x())对2线总线进行1次时钟,可用于在任何传输过程中通信受到干扰时重置总线。为了与PIC的固件通信,这些命令调用多个例程通过串行端口读取和写入数据。这些例程存在于两个附加文件中,DSIOLIB1.cpp 和 DSIOLIB<>.h。
一旦类离开作用域,通常当应用程序退出时,应用程序将释放用于其变量的所有内存。这将调用 CdsPic 类的析构函数,析构函数将关闭串行端口。
由于2线例程是提供给客户的,因此本应用笔记将不讨论该实施例的大部分细节。应该提到的一件事是,包含的串行端口代码仅适用于Windows的环境(Windows NT 3.1,Windows 95或任一的后续版本)。如果需要不同的编程语言或操作系统,则必须重写通信软件以适应操作系统和语言要求。最简单的方法是查看提供的C++代码,以查看在与固件通信时必须发送的内容和接收的内容。然后使用新软件模拟交易。建立通信所需的串行端口设置为57600波特,1停止位和无奇偶校验。
使用参考设计构建应用硬件和 PC 软件
要基于 PIC 参考设计构建应用程序,需要完成四项任务。
使用 FTP 站点上提供的 dsio.hex 文件对 PIC16LF628 微处理器进行编程。使用Microchip提供的PICSTART Plus编程器或工程编程器(如BP Microsystems提供的编程器)。
构建详细原理图中显示的电路,该原理图可在FTP站点上找到。如果需要以后能够更改固件,请确保有一种方法可以隔离 MCLR,V抄送、微处理器的 RB6 和 RB7。这些是用于对微处理器进行在线编程的引脚。如果使用PIC的表面贴装版本,则对PIC进行在线编程可能比找到合适的适配器插座与编程器的插座配合使用更方便。
下载 FTP 站点上提供的C++代码 (DSIOLIB1.cpp、DSIOLIB.h、DSPIC.cpp、DSPIC.h)。
编写应用软件。在项目中包括上面列出的四个文件,并在软件顶部添加一个#include“DSPIC.h”指令。在全局空间中实例化 CdsPic 类的成员。它在全球空间中完成有两个原因。它将允许程序的所有子例程访问2线函数,并且只允许此类的单个实例进入应用程序。如果打开该类的第二个实例,它将无法打开由前一个实例控制的串行端口,因此它将无法与 PIC 通信。实例化类后,使用 BoardPresent() 成员函数确定串行端口是否已成功打开。如果检测到电路板,请根据需要继续调用CdsPic成员函数以执行2线功能,否则通知用户未找到PIC电路。
生成了一个示例2线应用,可以从达拉斯半导体的FTP站点下载。它被称为DS2W,它是一种通用的2线工具,允许用户从Window的对话框界面与2线器件进行通信。该程序的 GUI 如下所示。
图6.DS2W 的图形用户界面。
此应用程序的源代码包含在FTP站点上,可用作示例,以帮助使用PIC电路进行开发。该代码演示如何使用CdsPic类中提供的所有2线相关函数来构建基于Windows的应用程序。
此外,如果硬件是如上所述构建的,则可以下载并执行可执行的 DS2Wa.exe。
总结
本应用笔记提供了一组硬件、固件和软件示例,可用于构建与2线器件通信的定制应用。该解决方案易于实现,只需使用提供的固件对PIC进行编程,构建电路以及调用通信软件。为了帮助软件开发,本文提供了一个2线接口程序示例,以演示如何将提供的通信软件集成到最终应用中。如果只需要一个简单的2线程序即可与2线器件手动通信,则可以下载并使用示例应用的可执行文件。
审核编辑:郭婷
全部0条评论
快来发表一下你的评论吧 !