1 概 述
RS232(UART)接口是一种简单、方便和实用的通信接口,用途非常广泛。在许多嵌入式应用,如智能仪器仪表、电子设备中,均使用RS232与PC机等外部系统进行通信,实现上位机对下位机的控制及数据交换等。在系统调试过程中,通常也是通过RS232,将调试数据发送到PC上显示出来。
但在PC机领域,RS232(COM)串行接口已经从最新一生产的计算机,尤其是笔记本电脑中消失了,而串行接口USB成为了标准的配置。这种变化给硬件工程师带来了不少麻烦。
目前通常的解决办法是购置一根“USBto RS232”转换电缆,其基本作用是在USB总线上仿真出一个RS232端口。这种方法的主要优点在于:PC应用程序将该USB口连接当作COM口连接使用,从而可以使工程师轻松跨越复杂的USB低层接口协议,仍使用原来熟悉的,针对COM口操作的方式编写程序代码。
本文将介绍另外一种与上述方法原理类似的设计实现方案,设备之间的外表连接全部换成了USB标准物理接口和连接电缆,但在PC上仍然使用针对COM口操作的方式编写程序代码,保留了原来的风格。该方案是采用Cypress公司PSoC家族中带USB接口的CY7C64215(或CY8C24x94)芯片实现的。
2PSoC、PSoCUSB和USBUART
2.1 PSOC
可编程片上系统(Prograromable System on Chip,PSoC),是Cypress公司近几年推出的一种新型的可编程半导体器件芯片。PSoC由8位微处理器内核,多个可编程的模拟模块和数字模块,硬件乘法累加器,以及I2C、Flash、SRAM等周边外围资源组成。因此,PSoC除了能实现一般MCU的功能外,还可通过可编程模拟和数字模块,灵活地实现嵌入式系统所需的多种模拟与数字外围功能。PSoC集三种可编程能力于一体,不仅具有MCU的可编程能力,还包含了部分可编程逻辑运算功能,同时提供了可编程模拟阵列。通过对寄存器的配置或控制,三者之间还可以协调工作,是具有真正的混合信号处理能力的可编程片上系统。
PSoC中的数字资源(如定时器、PWM、UART等)和模拟资源(如放大器、比较器、滤波器等)是以数字模块和模拟模块的方式给出。不同型号PSoC芯片的差异主要在于其拥有的数字模块和模拟模块的数量不同。用户可根据特定需求来定义这些模块。
PSoC的集成开发环境PSoC Designer也预先为用户定义了近百个常用的数字和模拟资源配置模块。这些预定义的模块称为用户模块,如数字资源有定时器、PWM、UART、 SPI、CRC、PRS等,模拟资源有放大器、比较器、滤波器等,ADC则由若干数字模块和模拟模块组合而成。这使得PSoC开发人员无需通过设置寄存器来构建这些周边设备,只需在PSoC Designer中选择和放置所需的用户模块并进行参数设定。PSoC Designer不仅能配置用户模块,还为用户创建了低层驱动函数,并提供使用这些用户模块的API函数供用户编程时调用。这种新颖的系统设计方法使工程师可以把主要精力集中在上层系统软件的设计工作中,极大地方便了整个系统的设计开发。
2.2 PSoC USB
PSoC系列中的CY7C64215、CY8C24x94芯片不仅具备上述PSoC的功能和特点,还包括了一个功能完善的全速(12 Mbps)USB端口。PSoC的USB端口资源符合USB2.O规范,是一个可以工作在12 Mbps速度下的全速器件,具备1个上行端口和1个USB地址的规范要求。PSoC USB包括1个串行接口引擎(SIE),1个PSoC存储器仲裁器(PMA),256B的专用SRAM,1个带有内部调节器的全速USB收发器以及2个专用USB引脚。
USB SIE支持5个端点,包括1个控制端点(端点0)和4个数据端点(端点1、2、3和4)。控制端点经过配置可支持SETUP、IN和OUT请求。数据端点可分别独立配置,从而响应中断、批传输、同步IN或OUT请求等。SIE使PSoC器件能与USB主机实现全速通信,并可自动完成以下USB处理任务,无需固件干预,从而简化了USB流量接口的工作。
①将接收到的编码数据进行转换,将总线上要传输的数据格式化。
②生成CRC校验和。忽略那些传送进来的未通过校验和验证的数据包。
③地址检查。忽略所有地址未指向器件的事务。
④发送适当的ACK/NAK/Stall握手信号。
⑤识别标记类型(SETUP、IN、OUT),一旦接收到有效的标记,即设置适当的标记位。
⑥识别帧起始(S()F)并保存帧的数量。
⑦通过PSoC存储器仲裁器向USB SRAM发送数据,或从USB SRAM接收数据。
PSoC存储器判优器(PMA)是PSoC USB专用SRAM与数据SRAM的2个内存块(USB SIE与M8C)之间的接口。PMA可提供8个通道用于传输数据。M8C可使用所有的通道寄存器,但4个非控制USB端点分别由PMA通道寄存器的特定集来分配。
PSoC USB系统资源包含专用的256 B SRAM,其与PSoC内核中所用的SRAM页相同,但不能通过M8C存储器操作指令存取。PSoC USB的专用SRAM只能通过PMA寄存器进行存取。
内部USB收发器与外部USB总线相连,根据USB2.O规范收发信号。在正常的USB操作状态下,收发器直接与SIE连接,初始化之后无需与用户互动。
就系统级而言,PSoC的全速USB系统资源通过M8C寄存器访问指令进行操作配置,实现与PSoC其他部分的连接,并通过2个USB引脚与外部相连。
2.3 USBUART用户模块
USBUART用户模块是PSoC集成开发环境PSoCDesigner中专门为用户使用PSoC USB预先定义的自动配置资源。USBUART实现了USB设备功能,并利用PSoC的1个USB端口来仿真1个COM端口,同时在PSoC器件侧提供了类似于UART的高层API函数。因此利用该用户模块可以方便地替代传统的基于RS232(UART)接口的通信方案。2种方案的对比如图1所示。
USBUART是在PSoC的USB端口基础上,在USB总线上仿真RS232端口。这种方法的主要优点在于,PC的上层应用程序将此USB设备仍旧看作是1个COM连接,从而使上层操作非常易于实现。这种方法可以使用在从Windows 98SE到Windows XP所有版本的MicrosoftWindows操作系统中的标准COM口驱动程序——MSC0M控件来编写的应用程序中。
USB通信设备类(CDC)规格定义了许多通信模型,其中包括了1个在USB上实现串行通信仿真的抽象控制模型。Microsoft Windows USB调制解调器的驱动程序usbser.sys符合此规格。
在一台新的USB设备第一次连接到一台WindowsPC时,Windows将要求用户提供驱动程序。Windows2000及以后版本在安装驱动程序时需要一个INF文件。Windows没有为这个usbser.sys驱动程序提供标准的INF文件。为了安装能够在USB上仿真RS232的设备,用户必须提供一个能够将附加的设备映射到MicrosoftCDC驱动程序的INF文件。USBUART用户模块会自动生成这个必要的INF文件,建立在工程项目的LIB文件夹内供使用。在提供了INF文件后,驱动程序允许USB1设备仿真成1个USB端口。
PC上面向COM口终端应用程序中的设置(波特率、数据位、奇偶校验、停止位和流控制)都不会影响数据传输的性能,因为此时的COM口实际是 USB设备,使用USB协议来控制数据流。但是,除了流控制以外的COM口终端设置值,在PSoC端可以采用特定的API函数调用检索到,以便在需要时用于真正的RS232设备。
3 软硬件设计
实际上应用工程师并不需要了解如此多的关于USB的底层内容和协议。只要基本掌握和看懂图1所示的原理,借助PSoC:USB和USBUART,就可以在很短的时间内实现基于USB接口的PC与嵌入式系统的连接通信。下面具体介绍该方案的软硬件设计和实现。
3.1 硬件设计
图2是采用CY7C64215实现该方案的原理图。
图中的CY7C64215是带有1个全速USB接口的PSoC芯片,左边的USB—B为USB连接座,其中D+和D一为2个USB信号线,通过 2个51 Ω电阻与CY7C64215的2个USB引脚D+和D一连接。整个系统电源是通过USB连接座上的5 V引脚获取,即由PC机的USB口提供工作电源。需要特别注意的是,电路中使用了1片电压调整芯片,将从USB口上输入的5 V电压调整为3.6 V后,再作为CY7C64215的工作电源。这是因为USB协议中规定了USB信号线D+和D一的电平为O~3.6 V,CY7C64215采用3.6 V的工作电压是为了保证USB信号线的电平匹配。如果CY7c64215直接使用5 V电源工作,那么在D+和D一信号线上必须对地增加2个3.6 V稳压二极管,分别将它们钳位在3.6 V,这样才能保证PC正确识别该USB设备和USB通信的正常。
图中右边的ISSP为PSoC的编程下载口,PSoC器件支持ISSP在线串行下载,编译生成的HEX文件可以通过该编程口烧录到PSoC内部的Flash中。图中的LED是USB工作指示灯,在USB通信过程中会闪烁。
3.2 PSoC软件系统设计过程
软件系统设计过程全部是在PSoC的集成开发环境PSoC Designer 5中完成的。首先建立1个新的项目,选择带有USB接口的CY7C64215芯片。在芯片中选择添加USBUART用户模块,并为该模块填写相应的参数。表1给出了USBUART的几个参数及意义,其中MaxPower仅当选择设备由USB总线供电时有效。
在这个示例中,除了选择必需的USBUART用户模块外,还选择使用了1个LED用户模块,该模块用于控制LED指示USB的工作状态。根据硬件电路,配置该模块的输出为CY7C64215的P1_2引脚,用于驱动LED。
选择配置完2个用户模块后,就可让PSoC Designer生成应用程序框架了。在这个过程中,PSoC Designer会自动综合所有的配置信息,更新和产生所使用用户模块的底层汇编语言驱动代码和API函数,并同时生成一个C语言的主程序框架。
接下来就是编写USBUART设备的上层应用程序代码了。在PSoC Designer中,打开已经生成的main.c主程序,添加如下所示的简单代码:
这段简单的C代码功能首先启动LED和USBUART用户模块工作,开放CPU的中断允许,然后等待USB初始化。USB接口初始化成功(与 PC连接成功)后,程序开始循环查询和接收PC下发的数据,然后将收到的数据再回送给PC,同时控制LED的闪烁,从而实现简单的、可作为USBUART 设备性能测试的Echo功能。
最后编译整个系统程序,生成HEX文件,通过ISSP下载烧录到CY7C64215中。整个软件系统设计过程便告完成。
3.3 USBUART的连接与测试
使用l根普通的USB延长连接线,将CY7C64215的USB口连接到PC机的USB口上,PC显示发现新的USB设备,并提示安装驱动。 USBUART设备的驱动程序是PSoC Designer自动生成的,保存在工程文件目录的L1B子目录下,文件名为USBUART_XP_Vista.inf(或US—BUART.inf)。用户只要按照提示的要求,选择这个USB设备文件就可以安装USBUART的驱动了。打开PC机的硬件配置,会发现PC的硬件设备中多了1个COM口。
接下来的测试是在PC机上打开串口调试工具(如超级终端),连接到该COM口,然后手动发送1个任意字符。CY7C64215控制的LED则开始闪烁,在超级终端上也同时收到由USBUART回送的该字符。
更进一步的测试是,将超级终端的波特率设置成115 200 bps,每隔1 ms自动发送1个字符。此时CY7C64215控制的LED全亮(由于闪烁间隔时间太短),超级终端也会连续收到字符。通过对比在超级终端中发送和接收到的字符个数是否相同,可以验证是否丢失数据。
4 总 结
RS232是单个设备接入计算机时最常采用的一种方式,由于其通信规程协议比较简单,很多传统的仪器设备和嵌入式系统都采用了这种通信方式。将 USB转UART技术应用于嵌入式系统与.PC机之间的数据通信,在计算机上产生1个虚拟的COM口,用户只需像使用通用串行口一样使用USB口即可。这样不仅能使嵌入式系统具备USB通信的诸多优点,简化了USB编程,同时还可以利用USB对嵌入式系统提供5 V的电源(500 mA以下)。而PSoC USB和USBUART则提供了非常方便和快捷的实现方法,并具备以下几个特点。
该方案使得工程师能够绕过复杂的USB底层接口和协议,采用简便的RS232(UART)方式进行上层系统设计,继承了传统方案的优点,不会给设计人员带来困难。同采用配置1根“USB toRS232”转换电缆的方案相比,USBUART的硬件设计和结构更为简单,物理接口占用的空间也大大减小。在电路上不仅省掉了UART与RS232的电平转换环节(MAX232),还可以使一些小型、微型的嵌入式系统直接采用由PC机的USB口供电的工作方式,进一步省掉了电源系统,有效降低了整个系统的硬件成本。
USBUART本身还提供了20多个应用编程接口(API)子程序,它们作为该用户模块的一部分,使设计人员只需要在更高层次上与USBUART模块打交道。而且CY7C64215、CY8C24x94除了具备USB端口外,还含有多个可编程配置的数字和模拟模块、32 KB的Flash、1 KB的SRAM、2个8×8的乘法器、1个32位加法器、超过56个可编程的I/O(CY8C24x94)等强大的资源。仅仅1片芯片,不但可以实现基于 USB的通信,还可以同时完成各种不同的模拟和数字,以及模数混合的应用(如CapSense、CY8C24x94)。
本方案非常适合在设计新的产品和系统时采用,作者已经成功地将其融入到多个新设计的系统和产品中使用。