摘要: 介绍 EZ-USB 器件的基本特性和 EZ-USB 接口设备的开发方法,结合具体设计示例重点讨论 EZ-USB 接口设备的软配置方式和固件装载技术。
关键词: EZ-USB 软配置 固件装载
引 言:
EZ-USB 是 Cypress 公司带智能内核的 USB 接口器件,集 USB 通信控制引擎和改进的 8051 内核于一体,具有全速度、全序列、易开发及软配置等特点,是设计 USB 设备的首选器件。 EZ-USB 的串行接口引擎能自动完成主要 USB 协议处理,简化了设备固件设计。但其软配置与枚举涉及到 Windows 编程、 Windows PnP 技术以及 Windows DDK 工具、 INF 文件和注册表的使用等问题,因此 EZ-USB 接口设备的软配置方式和固件装载技术是开发 EZ-USB 接口设备的关键问题。
1 EZ-USB 处理器
EZ-USB 的串行接口引擎能自动完成数据收发控制、位填充、数据编码、 CRC 校验、 PID 包解码等 USB 协议处理。 EZ-USB 在连接时自动进行枚举,建立默认的 EZ-USB 设备。首次枚举成功后,还可以通过软配置由 8051 内核重新枚举建立用户定制的设备。
内置的 8051 处理器,相对标准的 8051 处理器进行了改进。以 AN2131QC 为例,主要有以下改进方面:
◇独立的地址总线和数据总线,总线周期为 4 个时钟,平均运行速度提高了近 3 倍;
◇双数据指针和自动指针提高了数据交换效率;
◇扩展的中断系统支持 13 个中断源,并支持自动中断向量;
◇ 1 个 I2C 接口以及 2 个 UART 接口, 24 个可配置 I/O 端口;
◇可变周期的 MOVX 指令可以适合高低速存储器芯片的接口;
◇ 3 个 16 位内置定时 / 计数器、 256 字节内部寄存器 RAM ;
◇芯片内部集成有 8KB 外部 RAM , 8051 内核要用 MOVX 指令访问此 RAM 区。
2 EZ-USB 软配置特性
2.1 软配置特性
软配置特性是 EZ-USB 最重要的特性。软配置特性允许设备无限制的升级或再配置。 EZ-USB 片内集成的外部 RAM 可用于装载固件。当设备与主机连接时,固件从主机装载到这里执行,而不是固化在 ROM 中。因此,装载不同的固件设备就呈现出不同的特性,如设备配置、有效端点、工作方式、设备功能等都可以通过改变固件进行再配置,达到软配置目的,这就是 EZ-USB 的软配置特性。
2.2 配置方式
软配置可采用两种方式实现:自动配置和命令配置。
自动配置是指当设备连接时,固件由专门的装载驱动程序自动装载到设备。这种方式下固件要捆绑在装载驱动程序之中,固件与装载驱动程序之间一一对应,固件修改时要重新生成并重新安装装载驱动程序,固件装载后要重新枚举,以建立定制的 USB 设备,如果不重新枚举主机会找不到设备。
命令配置是指在应用程序中通过命令操作将固件装载到设备。这种方式不需要专用的装载驱动程序,可在任何时刻装载任意固件。固件装载后可以不用重枚举操作,由 EZ-USB 内核响应主机请求,可以简化固件设计。采用命令配置方式时,在应用程序中要编写固件装载代码。固件装载代码主要完成下列操作:
◇从 Intel Hex 格式文件中提取出有效的固件代码;
◇向 EZ-USB 请求复位 8051 内核;
◇向 EZ-USB 请求固件下载,固件下传至 EZ-USB 的内部 RAM ;
◇向 EZ-USB 请求 8051 内核脱离复位状态;
⑤ 对 EZ-USB 外设接口和交替功能进行设置。
3 EZ-USB 接口设备开发方法
USB 设备开发的一般步骤和内容如图 1 所示。其中面向设备的固件主要包括设备描述符信息、设备功能代码和通信控制功能代码。设备描述信息描述 USB 设备的一般特性和配置,如设备类别、接口配置、 VID 和 PID 等。主机在设备枚举时要获取 USB 设备的描述符,从而获得设备的配置信息和相关驱动信息。用户可以通过修改固件中的描述符来改变设备的特性。设备功能代码由设备的功能需求决定。通信控制功能代码执行主机请求分析处理和数据交换处理功能。
设备驱动程序提供用户访问设备的接口。开发系统提供厂家的通用设备驱动程序。用户也可以用相关驱动程序开发工具自己定制。自己定制的设备驱动程序要求符合 WDM 驱动程序规范。若采用自动配置方式, EZ-USB 开发系统提供了装载驱动程序开发模板,利用模板开发较简单。采用命令配置方式则要用户在应用程序中编写固件装载代码。
驱动程序一般通过 INF 文件来安装, INF 文件把设备的 VID 和 PID 绑定到设备驱动程序上,指定存放驱动程序的路径,提供有关驱动程序的注册和显示信息。因此, Windows 检测到 EZ-USB 设备连接时,能根据注册表自动将设备驱动程序装入系统环境。
4 设计举例
作者利用 AN2131QC 开发了一个通用的 EZ-USB 接口模块。此通用模块的软硬件资源全部开放,并配置有测试驱动程序和固件示例。使用此通用模块如同使用一片 IC 芯片,对设备的描述信息和 INF 文件稍作修改,并添加设备功能代码,即可构成一台专用的 EZ-USB 接口设备。
4.1 固件设计
通用 EZ-USB 模块的固件包括描述符表和 USB 通信测试程序。描述符表是一组符合 USB 规范及描述设备特性的结构化信息,赋予其中变量不同的值,设备就呈现出不同的特性。在设备连接时,主机要请求设备提供描述符表,因此描述符表是固件的一部分。本通用模块中定义了 5 种描述符表,表 1 所列是各描述符的主要参数。
此通用模块中的固件仅用于 EZ-USB 通信测试、设备驱动和固件装载演示。通过实验发现固件设计有两点值得注意。
① 采用 ezusb.sys 通用驱动程序时,主机要用查询方式接收从设备来的数据。若主机接收不到设备上传的数据时会长时间等待,甚至会死机。在本文的设计中,解决此问题的方法是数据上传和下传操作成对发生。主机每次下传一个数据包时,设备就上传一个数据包。此时如果设备有数据上传就将数据置入上传数据包中,否则返回一个空包。
② 初始化时应清空一次相应的端点缓冲区,否则有时会出现第一次传输出错的现象,原因可能是复位不充分或者内部 RAM 掉电延时。在实际中发现,设备掉电相当长一段时间, EZ-USB 的 RAM 中数据仍然保持。
4.2 生成设备驱动程序
可以直接用厂家提供的通用设备驱动程序来驱动设备。但通用设备驱动程序只能执行一些标准的 USB 设备请求和数据传输,而且只支持查询方式与设备通信。如果不能满足用户需要,用户可以在模板的基础上进行扩充,重新用 WDM DDK 生成驱动程序。通用模块中采用了通用驱动程序 Ezusb.sys 。采用查询方式,并且使上传和下传对应出现,实时性较好,能满足一般设备要求。
4.3 生成装载驱动程序
采用自动配置方式时,可根据 EZ-USB 开发系统提供的模板生成固件装载驱动程序。具体方法见参考文献 [1 , 2] 。
通用模块中固件装载采用命令配置方式。其操作流程如图 2 所示,其中主要定义了以下 4 个函数以完成固件装载。
Read_Intel_Hex() 从 Intel 格式的 Hex 文件中读出固件代码到缓冲区。
Hex_To_Bin() 移去 Intel 格式的 Hex 文件中格式描述部分,转换为纯固件代码。
Download_Bin() EZ-USB8051 内核复位、固件装载到设备、 8051 内核解复位并运行固件。装载固件前要使 EZ-USB8051 内核进入复位状态,然后装载固件,装载结束后使 EZ-USB 脱离复位状态开始运行固件。三种操作共用一个函数,用传递不同的参数进行区别。
Set_InterFaceAlt() 设置 EZ-USB 接口号和交替功能值,建立通信管道。
4.4 安装驱动程序
驱动程序必须正确装入 Windows 环境之后,才能起作用。编辑 INF 文件,使首次枚举设备的 VID 和 PID 绑定到固件装载驱动程序,使重枚举后设备的 VID 和 PID 绑定到设备驱动程序。设置驱动程序的路径为 C:\Windows\system32 ,设置显示的驱动程序字符串信息。重新启动系统,按提示信息完成安装过程。
4.5 应用程序与设备接口
通用 EZ-USB 模块的测试程序提供两种方式访问 EZ-USB 设备,一是直接通过 I/O 控制调用访问设备,用 CreateFile() 函数打开设备,用 DeviceIoControl() 函数与设备进行通信;二是将复杂的访问函数封装为 DLL ,对用户提供更简洁的方法访问外设。
结 语
利用通用 EZ_USB 接口模块,开发了智能声强测量系统和精密数控雕刻机设备,均获得了成功。设备性能稳定,开发周期短。