摘要: 描述了一种使用硬件、PC软件和固件与Dallas Semiconductor和Maxim 2线设备通信的方法,以便通过PC的串行端口进行评估和测试。
一个便宜的处理器可以用作PC的RS-232端口和任何Maxim或Dallas 2线设备之间的接口。这允许操作2线设备进行评估(在原型期间)或在某些测试过程中使用。应用说明包含框图和达拉斯FTP站点的链接,可以下载软件和固件示例来实现应用说明。它是作为想要构建自己的接口的客户的参考而不是作为成品呈现的。
本应用笔记讨论了如何构建一个廉价的微处理器电路,以允许PC机使用其串行端口与2线设备通信。除了提供设计硬件,固件和软件以使PC能够与ic通信的一般见解外,还提出了一个完整的PIC微处理器参考设计,以展示如何围绕2线设备构建PC应用程序。参考设计包括一个完整的原理图,固件和一个低级c++串行端口代码,以启动任何想要合并2线设备的应用程序。原理图、固件和软件可以从达拉斯半导体的FTP站点下载。
通常,当客户提供与Dallas Semiconductor的评估套件相关的反馈时,他们表示他们正在使用它们作为评估Dallas Semiconductor IC的一种方式,而不必在过程中努力编写软件来测试部件。然而,在过去的几年里,一个趋势似乎变得越来越普遍,那就是客户在设计的原型阶段使用评估套件与零件进行沟通。在过去,这意味着要同时使用Dallas Semiconductor为他们正在使用的产品编写的图形用户界面(GUI)和DS9123串行端口适配器,这是一种与2线设备通信的缓慢方法。
本应用说明的编写是为了帮助想要构建自己的电路以促进PC和2线设备之间通信的客户,并向他们展示如何生成自己的特定于其应用程序的自定义软件。本文分为四个部分,分别关注硬件设计、固件和软件,最后一个部分逐步介绍如何构建参考设计、对PIC进行编程,并开始为双线应用程序编写定制软件。
首先,在工作开始之前,最好清楚地定义正在设计的内容,这是硬件能够从PC接收数据,然后将其转发到2线设备上。
有很多方法可以将数据从PC传输到外部硬件,那么为什么在许多应用程序中首选串行端口呢?首先,每个PC上都有串行端口,并且访问端口已经由RS232标准明确定义。此外,pc和微处理器都包含串行端口,因此与微处理器的通信非常容易建立。这种标准化的另外三个显著优点是:PC机将以相同的波特率发送数据,而不管其处理能力如何;串行端口在大多数PC机上通常是免费的;为串行端口编写的软件往往可以在所有Windows 操作系统平台上工作。也可以通过从串行端口的I/O信号窃取电源来寄生地为某些适配器供电;然而,这对于参考设计来说是不可能的,因为它消耗了太多的能量。这主要是由于设计工作在相对较高的频率(3.6864MHz)下,这增加了功率需求,超出了寄生供电的范围。
选择串行端口的主要缺点是它肯定需要微处理器将RS232数据格式转换为2线协议,其中可以使用一些其他I/O设备执行任务,而无需添加微处理器。另外,串口采用±12V信号进行通信。这需要集成电路将信号电平转换为微处理器可以处理的电平。虽然可以在数据速率>115.2kbps, PC和微处理器都需要有能力以选择的速度运行。一般来说,个人电脑能够支持所有标准波特率,但微处理器在发送和接收数据的速度方面可能会有一些限制。
构建PC硬件还有其他选择。除了串行端口之外,最常见的两种是使用并口或通用输入/输出卡(GPIO)。这两个选项都有问题,必须处理才能成功使用它们。并口不像串口那样标准。随着时间的推移,并行端口有四种标准,并且有各种芯片组以不同的模式操作端口。最初的标准并行端口(SPP)是第一个标准,大多数pc机都支持它。问题是端口的SPP模式可能必须在运行应用程序的计算机的BIOS中启用。此外,时序很难在并行端口上处理,因为它严重依赖于正在使用的计算机的速度。
GPIO卡不是PC上的标配,必须单独购买,购买PC后再安装。此外,没有GPIO卡标准,因此不可能确保为一张卡编写的软件可以在多个系统上工作。
另一个流行的选择是USB。USB的主要优点是能够寄生地为更大的电路供电,以及连接的带宽。缺点是电路必须在5V的系统电压下运行,并且固件和软件变得更加复杂,因为它们现在必须能够使用设备驱动程序进行通信。
由于串行端口在参考设计中用于与2线设备通信,因此需要解决三个主要问题以允许PC和微处理器之间的通信。
将使用什么来将RS232信号电平转换为微处理器可以处理的电平?
微处理器是否有通用异步收发器(UART),或者编写一个软件UART ?
如果使用硬件UART,什么晶体频率与微处理器的波特率发生器配合良好?
由于串行端口使用±12V信号进行通信,因此它们不能直接连接到微处理器。幸运的是,达拉斯半导体和Maxim都制造了几个RS232电平转换器芯片,将±12V信号转换为0到5V或0到3V信号。最容易使用的100% RS232规范兼容的是DS232A, MAX3221和MAX3223。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(CC)水平,以便与2线设备通信。PIC参考设计使用两个三态图腾柱输出,但它通过驱动信号低电平或三态输出来模拟开路集电极设备。这与真正的开路集电极输出之间的唯一区别是2线器件的V(CC)电平必须等于或低于PIC电路的V(CC)电平。如果没有维持这种关系,则输入电压电平将违反PIC的输入电平规范。
本节的其余部分集中讨论参考设计的硬件细节。图1给出了参考设计电路的框图。
图1所示。参考设计的硬件框图。
除了本节开头的标准之外,以下项目是该电路的设计目标:
V(CC)范围3.0-5.5V
57600波特串口通信
在线可编程微处理器
电路必须能够从软件复位
便宜的组件
板子应该尽可能的小
为了实现这些目标,我们选择了PIC16LF628处理器,主要是因为它的低电压运行和低成本。其他理想的功能包括硬件UART,用于基于中断的快速通信,允许精确硬速率的晶体输入,并且它可以在一个小的20引脚173mil TSSOP封装中使用。
为了转换RS232端口的信号电平,选择了MAX3223,因为当与单个电源(3.0V至5.5V)一起使用时,它提供了真正的RS232信号电平。此外,它有两个通道,这将允许使用串行端口的DTR(数据终端就绪)信号重置板。这部分也可在一个微小的20针TSSOP封装。MAX3223和PIC可以在相同的V(CC)电源下工作,两个芯片将在3V至5.5V范围内工作。这使得电路板可以使用3V和5V 2线部件。
信号RA0和RA1用于与2线设备通信,并为开路收集器2线总线连接到它们上拉。RB1和RB2通过MAX3223连接到串行端口,MAX3223使用外部电容器(未显示)来生成真正的RS232电平。剩余的I/O引脚用于位I/O。它们可以用于其他串行协议,或者如果需要,可以控制2线部件上的其他数字输入。这将在固件部分进行更深入的描述。框图上显示的电路中最复杂的部分是复位电路。在PIC微处理器上,MCLR是一个低激活复位信号。NMOS的门连接到DTR信号,该信号由MAX3223进行电平移位。如果NMOS的栅极处的DTR信号高,则NMOS将打开,这将使PIC复位。如果DTR信号在NMOS门处低,它将释放MCLR信号,这将允许MCLR信号在正常操作时调整为V(CC)或在PIC被电路编程时调整为V(PP)。肖特基二极管存在于编程期间隔离V(PP)电源和V(CC)电源,当NMOS迫使处理器复位时,电阻器限制二极管的通流。虽然MCLR带出到连接器,但在正常操作期间,该引脚应保持断开连接。它仅用于PIC的在线编程。
整个参考设计的完整原理图和物料清单(BOM)可在达拉斯半导体的FTP站点上获得。本文档的演练部分提供了指向FTP站点位置的链接。
手头的任务是从RS232串行协议到2线协议的数据转换,但是还有其他需要考虑的事情。首先,启动和停止总线命令必须为2线主机发出,以便与从设备建立通信。此外,在特定的应用程序中,要向特定设备写入或从特定设备读取的数据量会有很大的不同,设备地址以及在特定地址读取和写入所执行的功能也会有很大的不同。因此,编写的固件不包含特定于设备的命令,并且它被设计成一个低开销协议,可以尽可能快地执行任何给定的命令。这允许软件做出决定并控制应用程序流程,而固件只是接收基本命令并执行它们。图2显示参考设计使用的命令协议。
图2。串口命令与PIC电路通信
命令 | 发送的第一个字节 | 发送的第二个字节 | 返回的字节数 |
开始(重启) | A0h | 0 x00,忽略 | 0xB0命令返回 0xFA命令失败 |
写的字节 | A1h | 数据 | 0xB1命令确认 0xFA命令失败 |
读取字节 | A2h | 承认 0x01 = Ack 0x00 = Nack | 返回的第一个字节=数据 返回的第二个字节 0xB2 =命令确认 0xFA =失败 |
停止 | A3h | 0 x00,忽略 | 0xA3命令确认 0xFA命令失败 |
切换SCL 9次 | A4h | 0 x00,忽略 | 0xA4命令确认 0xFA命令失败 |
位I/O读 | E ?h | 0 x00,忽略 | 0x00读位清除 0x01读位设置 0xFA命令失败 |
位I/O写 | F ?h | 0x00清除位 0x01设置位 | 0xF0命令ack 0xFA命令失败 |
? 值 | ? 指定一个未使用的微处理器引脚。添加命令处理器代码的这一部分是为了方便将此适配器用于其他非标准协议,例如DS1867中的17位3线移位寄存器。 |
被认为是2线通信必不可少和基本的项是启动(重新启动)总线命令、停止总线命令、写入数据字节、带确认的读取数据字节和不带确认的读取数据字节。固件还支持另外三个项目。第一个是切换SCL九次的命令,如果在通信期间检测到错误,这对于重置2线总线很有用。最后两个是位I/O读写,根据发出的命令,读取I/O引脚的状态或设置I/O引脚的状态。这些命令允许在PIC的端口A和B上使用剩余的I/O信号,以满足设计人员的任何要求。
图3演示与响应地址0x40的2线设备通信所需的序列。每个操作都需要PC向PIC发送两个字节。一旦第二个字节被PIC接收到,它将开始处理它接收到的数据。接收到的第一个字节决定了要执行的操作类型(启动、发送数据等)。如果命令需要数据操作数,它将查看发送的第二个字节,否则第二个命令字节将被忽略。由于处理器每条指令需要两个字节,如果命令不需要第二个字节,则必须发送一个虚拟字节。如果PIC接收到一个无效的命令,它将返回0xFA,这表示失败。
图3。示例2线写和读通信序列
发送启动命令,将0x23写入地址为0x40的2线设备,发送停止命令 | |||||
Seq # | 发送的第一个字节 | 发送的第二个字节 | 返回的第一个字节 | 返回的第二个字节 | 描述 |
1 | 0 xa0 | 0 x00 占位符 | 0 xb0 命令应答 | 没有一个 | 2线开始 |
2 | 0最后 | 0 x40 数据 | 0 xb1 命令应答 | 没有一个 | 通过2线总线发送0x40(写地址)。字节) |
3. | 0最后 | 0 x40 数据 | 0 xb1 命令应答 | 没有一个 | 通过2线总线发送0x23(数据到2线部分) |
4 | 0 xa3 | 0 x00 占位符 | 0 xb3 命令应答 | 没有一个 | 2线停止 |
发送开始命令,从地址0x40的2线设备读取0x23,发送停止命令 | |||||
Seq 3 | 发送的第一个字节 | 发送的第二个字节 | 返回的第一个字节 | 返回的第二个字节 | 描述 |
1 | 0 xa0 | 0 x00 占位符 | 0 xb0 命令应答 | 没有一个 | 2线开始 |
2 | 0最后 | 0 x41 数据 | 0 xb1 命令应答 | 没有一个 | 通过2线总线发送0x41(读地址)。字节) |
3. | 0 xa2 | 0 x00 读w/ nack | 0 x23 数据 | 0 xb2 命令应答 | 读w /纳 第一个字节0x23(来自2线部分的数据) 2字节0xB2(命令ack) |
4 | 0 xa3 | 0 x00 占位符 | 0 xb3 命令应答 | 没有一个 | 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 | 红警2 |
2 | RA3中 | |
3. | RA4 | |
4 | RB0 | |
5 | RB3 | |
6 | RB4 | |
7 | RB5 | |
8 | RB6 | |
9 | RB7 | |
一个 | RA0 | |
B | RA1 |
要实现上面讨论的固件,程序流程如图所示图5构造。程序等待接收两个命令字节,并在接收到每个字节时对其进行验证。一旦接收到两个有效字节,程序就执行该命令。如果没有收到两个有效字节,固件拒绝命令,并返回一个错误代码而不是命令确认。FTP站点上有固件(dsio.hex)。
图5。固件程序流程。
在项目需要自定义固件的情况下,强烈建议将固件编写和调试与PC软件分开。这可以使用终端程序来模拟固件开发期间PC所需的内容来完成。这允许问题分离,并且可以使调试时间最小化。
在编写与PIC电路通信的低级PC代码时,要努力实现的主要目标是使代码可重用。这使得在提供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线总线进行9次时钟,该命令可用于在任何传输过程中通信受到干扰时重置总线。为了与PIC的固件通信,这些命令调用几个例程来通过串行端口读写数据。这些例程存在于另外两个文件DSIOLIB1.cpp和DSIOLIB1.h中。
一旦类离开作用域,通常在应用程序退出时,应用程序将释放用于其变量的所有内存。这将调用CdsPic类的析构函数,析构函数将关闭串行端口。
由于为客户提供了2线例程,因此本应用程序说明中将不讨论实现的大部分细节。需要提到的一点是,所包含的串行端口代码只适用于Windows环境(Windows NT 3.1、Windows 95或后续版本)。如果需要不同的编程语言或操作系统,通信软件将不得不重写以适应操作系统和语言要求。要做到这一点,最简单的方法是查看提供的c++代码,看看在与固件通信时必须发送什么和接收什么。然后用新软件模拟交易。建立通信所需的串口设置为57600波特,1个停止位,无奇偶校验。
要基于PIC参考设计构建应用程序,需要完成四个任务。
用dsp对PIC16LF628微处理器进行编程。该文件可从FTP站点获取。使用Microchip提供的PICSTART Plus编程器或BP Microsystems提供的工程编程器。
构建详细原理图中所示的电路,该电路可在FTP站点上获得。如果希望以后能够更改固件,请确保有一种方法可以隔离微处理器的MCLR, V(CC), RB6和RB7。这些是用于对微处理器进行在线编程的引脚。如果使用PIC的表面贴装版本,则对PIC进行在线编程可能比找到合适的适配器插座与程序员的插座一起工作更方便。
下载c++代码(DSIOLIB1.cpp、dsiolib1 .h、DSPIC.cpp、DSPIC.h),可在FTP站点上获得。
编写应用软件。在项目中包含上面列出的四个文件,并在软件的顶部添加一个# Include "DSPIC.h"指令。实例化CdsPic类的成员在全球空间。它在全球空间进行有两个原因。它将允许程序的所有子程序访问2线函数,在应用程序中只允许该类的一个实例。如果类的第二个实例被打开,它将无法打开由前一个实例控制的串行端口,因此它将无法与PIC通信。类实例化之后,使用BoardPresent 成员函数来确定串口是否成功打开。如果检测到该板,则继续调用CdsPic成员函数,根据需要执行2线功能,否则通知用户未找到PIC电路。
生成了一个示例2线应用程序,可以从Dallas Semiconductor的FTP站点下载。它被称为DS2W,它是一个通用的2线工具,允许用户从windows的对话框界面与2线设备通信。该程序的GUI如下所示。
图6。DS2W的GUI界面。
该应用程序的源代码包含在FTP站点上,可以作为示例使用PIC电路进行开发。代码展示了如何使用CdsPic类中可用的所有2线相关函数来构建基于windows的应用程序。
此外,如果硬件按照上述方式构建,则可以下载并执行可执行文件DS2Wa.exe。
上述FTP站点信息可在以下位置获得:
本应用笔记提供了一组硬件、固件和软件的示例,可用于构建自定义应用程序以与2线设备通信。该解决方案易于实现,只需要使用提供的固件对PIC进行编程、构建电路和调用通信软件。为了帮助软件开发,提供了一个示例2线接口程序来演示如何将所提供的通信软件包含到最终应用程序中。如果只需要一个简单的2线程序来手动与2线设备通信,则可以下载并使用示例应用程序的可执行文件。
希望本应用笔记将简化使用达拉斯半导体的2线器件的新产品开发。请将任何有关双线应用程序开发的问题直接发送到混合信号应用程序的电子邮件地址。
注:作为一个例子,达拉斯半导体公司提供了一个参考硬件设计,固件和PC软件与此应用说明;但是,使用提供的材料的风险由您自己承担。达拉斯半导体公司将不承担任何与使用所提供材料相关的并发症或损害的责任。
社群二维码
关注“华强商城“微信公众号
Copyright 2010-2023 hqbuy.com,Inc.All right reserved. 服务热线:400-830-6691 粤ICP备05106676号 经营许可证:粤B2-20210308