关键词:C8051F320;USB;USB描述符;固件
随着USB技术的快速发展以及USB外设在越来越多场合的广泛应用,支持USB接口技术的芯片也越来越多。对于USB接口的设计,如非扩展之用,选用带有MCU的USB控制器当然是设计师们的首选,因为这样不仅可以大大简化硬件电路、减小外设体积,而且还可以提高产品的可靠性。文中介绍的C8051F320就是顺应这种需求而推出的一种新型USB控制器芯片。
1 C8051F320的主要特点
C8051F320是Cygnal公司推出的一款具有全速USB功能的混合信号flash微控制器芯片,该器件内部集成有2304 Byte RAM和16k Byte的flash存储器。实际上,C8051F320是一个完整的小型片上系统(SoC)。由于利用该芯片进行设计时可以不需要任何外部元件(包括电阻和晶振),因而是小型USB应用的理想选择。与其它同类产品相比,C8051F320主要具有如下一些特点:
●全速的USB 2.0功能控制器;
●内部集成了时钟恢复电路,且不需要外接晶体振荡器;
●可支持8个USB端点;
●带有1k字节的USB缓冲存储器;
●内部集成了USB接口的数据收发器,设计中无需外部上拉电阻;
●具有高速增强型8051 MCU内核,该MCU内核采用流水线式指令结构,70%的指令执行时间为一个或两个系统时钟周期,处理速度可达25MIPS(时钟频率为25MHz时)。
此外,C8051F320还有许多其它特性,如支持在系统编程(ISP),带有可编程的数字I/O和数字交叉开关,可提供全速、非侵入式的在系统片内调试电路等。
2 C8051F320的引脚功能
C8051F320的引脚排列如图1所示。主要引脚的功能如下:
D+、D-:USB电缆的USB D+和USB D-连接端;
VDD:2.7~3.6V片上电源输入端或片内电压调节器的3.3V输出端;
REGIN:片内电压调节器的5V输入端;
VBUS:USB电缆VBUS引线的感应输入端,当该脚出现5V高电平信号时,表示该设备已经和主机连接好;
RST/C2CK:多功能引脚,内部上电复位POR(Power On Reset)和VDD监视器的漏极开路输出,使该脚保持低电平15μs以上可对系统进行一次复位。此外,该脚还可作为C2接口的时钟信号输入端;
P3.0/C2D:多功能引脚,可作为I/O端口或C2接口的双向数据信号传输端口。
3 应用举例
笔者以C8051F320为核心设计了一个USB和CAN总线的接口转换模块,运用该接口转换模块可以方便地把具有USB接口的测控设备连接到一个CAN总线测控网络中,以对系统的运行状况进行系统和整体的测试和分析。在该接口转换模块的设计中,最主要的工作就是USB接口部分的设计,包括硬件电路和固件程序的设计。
3.1 USB 接口硬件电路设计
由于C8051F320微控制器具有简单易用的特点,因此,用C8051F320进行USB接口的硬件设计也显得十分简单,主要包括两部分的内容,一是接口转换模块供电方式的选择,二是USB引脚的连接,图2是其USB接口电路图。
由于整个模块的功率估计在3W左右,而USB总线的供电量只适合小功率模块的供电,最大也只有500mA,因此不能满足整个模块的安全供电,所以模块选择自供电模式,图2所示的整个模块(包括C8051F320和模块中所有其它部分)的供电电源都来自外部5V电源。由于C8051F320中的USB收发器内部集成了上拉电阻,因而不需要任何外部器件便可直接与USB接口相连。
3.2 USB固件程序设计
USB固件程序设计是USB接口部分的主要工作,它的主要目的是:当USB设备连接到主机上时,主机可以发现新设备,然后建立连接并完成数据传输任务,也就是能够让Windows正常检测和识别USB设备。因此在USB固件程序中,最重要的工作就是USB描述符的定义和USB传输中断的处理。
(1)USB描述符
USB描述符是USB协议定义的一套描述设备功能和属性的固定结构的描述语言。USB2.0中的描述符包括设备描述符、配置描述符、接口描述符、端点描述符等8种标准描述符和其它一些非标准描述符。USB主机通过USB描述符完成设备类型的识别和配置,同时为设备提供相应的客户端驱动程序,运行于USB协议栈上层的客户端驱动程序通过这些信息来正确访问设备并与其通信,从而达到即插即用的目的。其中,配置中用到的两个端点描述符如表1所列。
表1 端点描述
偏移量 | 域 | 大小 (字节) |
端点描述符1 | 端点描述符2 | ||
数值 | 说明 | 数值 | 说明 | |||
0 | bLength | 1 | 0x07 | 描述符字节数 | 0x07 | 描述符字节数 |
1 | bDescriptorType | 1 | 0x05 | 端点描述符类型 | 0x05 | 端点描述符类型 |
2 | bEndpointAddress | 1 | 0x81 | 端点地址:端点1 IN | 0x02 | 端点地址:端点2 OUT |
3 | bmAttributes | 1 | 0x02 | 传输类型:批量传输 | 0x02 | 传输类型:批量传输 |
4 | wMaxPacketSize | 2 | 64 | 最大数据包64字节 | 64 | 最大数据包64字节 |
6 | bInterval | 1 | 0x05 | / | 0x05 | / |
(2)USB中断服务程序的编写
当USB中断到达时,C8051F320首先通过读取USB功能控制器的三个中断寄存器CMINT、IN1INT和OUT1INT来判断中断来源(USB复位中断、端点0中断、端点1输入中断、端点2输出中断),然后根据不同的中断来源跳入相应的处理模块以进行不同的中断处理,并在处理完毕后返回。
其中,端点0是每个USB设备都必须支持的默认控制传输端点,主要用于主机对USB设备的配置、状态信息的获取和设备错误的纠正等,它的中断处理模块由控制输出和控制输入两部分组成。每次传输首先由设置事务开始,然后根据设置事务数据包中的USB标准命令请求判断该次传输是控制输入还是控制输出。由于作用和地位的特殊性和重要性,端点0中断处理模块是一个最为复杂的中断处理模块。结合C8051F320端点0控制状态寄存器E0CSR的特点和应用的具体需求,图3给出了该中断处理模块的流程图,主要是对控制传输中设置事务的分析和处理。
图3
USB复位中断的主要作用是将相关USB变量、寄存器和各端点的状态恢复为初始状态(需要注意的是:复位后,端点0为空闲状态,端点1的 IN和端点2的OUT为暂停状态)。端点1输入中断和端点2输出中断均为批量传输中断,其主要作用是在收到中断时,在各自预先定义好的缓冲区中写入要传输给主机的数据或取走主机传输过来的数据,实际上,这是C8051F320 读写USB缓冲区的过程。
4 结束语
随着USB技术的日益成熟,越来越多的测控设备趋向于引入USB总线接口技术或者只提供USB外接接口,所以设计一种USB接口到测控网络总线的接口转换模块非常必要。文中给出的这种USB和CAN总线的接口转换模块就是立足于这类需要而进行的一项前期研究工作,该方案具有较强的实用性。