1 设计背景
随着嵌入式处理器设计功耗的降低,越来越多的设备朝着小型化和集成化发展,而外形的精简和功能的增加对外围接口功能的兼容性和通用性提出了新的要求,如何在有限的空间内通过最少的外围接口实现最多的功能是嵌入式系统设计面临的新课题之一。与研发新的通信协议相比,充分利用现有接U的多种通信模式更具有现实意义。本文提出一种针对USB接口工作模式复用的设计思路和实现方法。
2 双模式接口的设计原理
通用串行总线(USB)接LJ是当前应用领域最为广泛的接口之一,主要优点是速度快、功耗低,支持热插拔和具有良好的兼容性。根据USB通信协议的设计,USB接口支持双向通信,但只能有一个主控端对通信过程进行控制,因此USB设备存在两种工作模式:USB.Host模式和USB.Device模式。
工作于USB—Host模式的设备包含USB主控器,并且能够控制完成主机和USB设备之间的数据传输,USB系统的数据和命令的传输都是由USB—Host设备来启动的,常见的有计算机以及其他具有USB主控芯片的设备。而工作于USB-Device模式的设备则可分为USB集线器和USB功能设备两种。常见的u盘、MP3和移动硬盘都是USB功能设备。每个USB功能设备内部都包含有描述其功能和资源需求的配置信息,USB.Host设备必须在使用前对其进行配置。两种模式的通信交互模式如图1所示。
在传统的数据通信应用中由于设备功能单一,固定地将接口设定为Host或者Device能够满足实际需求,但在嵌入式系统的应用中往往会出现既需要访问USB设备,又需要和计算机进行通信的情况,这就需要在同一个接口上实现Host和Device两种工作模式。
3 双工作模式的设计实现
3.1硬件设计
设计选用同时支持USB.Host和USB.Device模式的CH375A作为接口控制芯片,该芯片具有8位双向数据总线和完整的读写、片选控制信号,具有全速USB—Host主机接口,支持动态切换主机与设备方式,兼容USB2.0协议。
在USB.HostI作模式下,CH375A提供了串行通信方式,通过串行输入、输出和中断输出与嵌入式主控芯片相连;在USB.DeviceT作模式下,CH375A内置了USB通信中的底层协议,可以采用方便的内置固件模式,也可以采用灵活的外置固件模式,完全满足设计需求。
由于物理接口是复用的,连接时采用并行数据接口与主控芯片通信。两种模式不能同时工作,而接口不能自动识别接入设备的工作模式,因此主从设备识别需要由嵌入式主控芯片根据外部输入来识别。硬件连接图如图2所示。
一图中输入输出接口符号均为CH375A与主控芯片互连的信号,为增强USB信号强度,设计电路时对差分信号采用等长走线,并串接共模电感以减小串扰。
3.2软件设计
设备上电时默认处于”未启用的USB设备”方式,需要主控芯片根据外部输入指定新的工作模式。当设备工作于USB.Host模式时,需要主动地对接入的设备进行检测和初始化,具体流程如图3所示。
程序采用查询方式检测设备接入,检测到设备的存在后首先获取设备中断状态并清空中断请求,初始化设备并查询该设备的存储特性,最后获取设备容量信息并对设备进行读写操作。部分功能函数代码如下:
CheckExist(); //测试CH375A工作状态;
SetUSBMode(USB MODE5); //设置CH375A工作于Host模式;
GetUSBStatus(); //初始化中断状态;
USB_DISK_INIT(); //初始化USB设备;
USB_DISK_INQUIRY() //查询USB存储设备的特性
GetUSBDiskSize(); //获取设备容量;
。..
WriteUSBCmd(int8 x); //向设备写入命令;
WriteUSBData(int8 x); //向设备写入数据;
。..
当设备工作于USB.Device模式时,设备本身就成为一个需要主机控制的USB设备,在接入上位机后流程如图4所示。
此时设备与上位机的通信方式采用请求加应答方式,由上位机主动请求数据,设备被动地应答上传数据。部分功能函数代码如下:
USB_Reset_ALL(): //设备复位;
CheckExist(); 测试CH375A工作状态;
SetUSBMode(USB_MODE2); //设置CH375A工作于内部固件Device模式;
GetUSBStatus(); //初始化中断状态:
USB Open Device(); //通信之前必须先打开设备:
USB_GetFirmwareInfo(); //获取调试固件程序版本,并取消未完成的上传数据块
。..
当设备需要在Host模式和Device模式中进行切换时,由主控芯片接受外部输入的模式切换信号,然后向CH375A发送模式转换命令,流程如图5所示。
在不同模式之间切换,首先要切换至“未启用的USB设备”模式,即上电复位后的默认模式。在经过一定的延时之后,再切换到所需的工作模式,如考虑进一步确保系统的稳定性还可在延时之前加入复位命令。具体功能函数如下:
SetUSBMode(USB_MODE0); //设置CH375A为未启用设备模式;
Delay(1000): //延时
SetUSBMode(USB_MODEn);//设置CH375A为目标模式;
。..。
4 结束语
实践证明,按照程序所规定的流程对USB接口进行配置在调试板上工作正常,在两个模式切换的过程中没有产生任何错误。由于芯片限制,此系统目前只能工作在USB1.1模式下,如何进一步提高两种工作模式下的数据传输速率将是下一步研究的重点。
作者简介:
熊雪晖(1984-),男,61938部队,助理工程师,研究方向:嵌入式系统设计与数据安全。联系地址:北京市海淀区半壁街南路2号,中国人民解放军61938部队数据备份室(100089)。
责任编辑:gt
全部0条评论
快来发表一下你的评论吧 !