MCU芯片验证中的USB模块批量传输验证
2018-10-15,,,,,
,,,,,
(1.北京智芯微电子科技有限公司 国家电网公司重点实验室 电力芯片设计分析实验室,北京 100192;2.北京智芯微电子科技有限公司 北京市电力高可靠性集成电路设计工程技术研究中心)
引 言
在芯片验证中,一般针对芯片内每一个模块都会做相应的功能验证和性能验证。其中功能验证是最基本的验证内容,只有在功能验证的基础上才可开展性能验证。本文研究的一款MCU中包含了USB模块,在嵌入式MCU中,USB协议相对于其他一些基本的传输协议较为复杂,USB模块验证工作自然也是重点和难点。本文即对USB的基本协议内容和部分验证方法做了阐述。
1 基本概念
USB规范中定义了USB主机和USB设备。主机作为通信的发起方,在整个通信中占有主导地位。下面就USB通信的数据流、主机与设备之间的识别来概括介绍一下这些基本概念。同时为了方便介绍后面的测试方法,这里还对FAT32进行简单介绍。
1.1 USB通信的数据流组成
USB—通用串行总线,顾名思义其传输的数据是由一位一位的串行二进制构成的。若干位二进制构成了USB域,若干个域组合构成USB包,两个或三个包组合构成事务,一个或多个事务组成传输,在应用层面还把实现不同功能的USB设备类型归为不同的USB类。下面分别介绍USB的域、包、事务、传输和类。图1是USB通信单元的关系分层图。
图1 USB通信单元分层图
① 域是USB的最小单位,由若干位组成,可分为7种类型:同步域、标识域、地址域、端点域、帧号域、数据域、校验域。
② 包由若干域构成,分为4种类型,分别是令牌包、数据包、握手包和特殊包,不同类的包又分成几种具体的包(见图1)。
③ USB事务是指向端点传递的服务,通常是由令牌包、可选的数据包和可选的握手包组成。
④ USB传输是在客户软件程序及其功能设备之间移动信息的一个或多个USB事务,分为控制传输、中断传输、同步(等时)传输、批量传输4种传输类型。这里说一下批量传输,批量传输可通过错误检测和重试的方法保证数据在主机和设备之间无错误的传输。批量传输包括了三个阶段:令牌、数据和握手。图2所示是批量传输事务流程的示意图(PING和NYET包只能在高速操作的设备中使用)。
图2 批量传输事务流程的示意图
图4 FAT32文件系统结构
⑤ 类不属于通信单元,是在应用的层面把USB加以区分,USB类的数据通信由一种或几种传输完成,比如常用的U盘设备是大容量存储类(Mass Storage Class,MSC),键盘/鼠标设备是人机接口类(Human Interface Devices,HID)。
1.2 USB的枚举过程
USB总线由VBUS、D-、D+、GND四根线构成,USB的数据传送依靠D+、D-这对差分信号线。在USB设备接入USB主机时,主机通过D+或D-上的电平变化来检测设备的接入;识别到有USB设备后,USB主机采用USB标准请求获取USB设备的相关信息并作相应的设置,配置完成USB的枚举过程。图3是USB枚举过程流程图。
图3 USB枚举过程
① USB主机复位,USB总线获得一个确定的总线状态;
② USB主机通过默认0地址获取USB设备的设备描述符(前8字节,从而知道端点0的最大包长);
③ USB主机再次复位USB总线;
④ USB主机给USB设备分配一个地址;
⑤ USB主机通过分配的地址获取USB设备的设备描述符(全部);
⑥ USB主机获取USB设备的配置描述符(前8字节);
⑦ USB主机获取USB设备的配置描述符集合(配置描述符、接口描述符、类特殊描述符、端点描述符);
⑧ USB主机获取USB设备的字符串描述符和语言描述符;
⑨ USB主机设置USB设备的配置(因为配置可能不止一个,由主机控制使用哪个配置)。
1.3 FAT32文件系统简介
FAT32文件系统是一种比较常见的文件系统,其内部结构组成如图4所示,包括保留区、FAT区和数据区。
保留区中包含了DBR(系统引导扇区)和FSINFO,DBR在文件系统的0扇区处,其包含了文件系统的各种配置信息(文件系统大小、FAT区起始地址、FAT区大小、数据起始地址等)。FSINFO记录文件系统剩余簇的数量及下一个可用簇的簇号信息。
FAT区的大小和起始地址可通过DBR中的相关信息确定。FAT区包括了两个完全相同的FAT表,FAT表中按4字节一个表项划分。通过FAT表项可以描述簇的状态及表明文件或目录的下一簇的簇号。
数据区是真正用于数据存储的区域。数据区下包含了目录和文件,文件系统的第一个目录被称为根目录。目录下包含了一条条的目录项,记录着此目录下文件的以下信息:文件大小、文件创建时间、文件修改时间、文件的起始地址等。
文件系统在被PC识别时首先获取DBR信息,解析DBR计算出FAT区和数据区的地址和大小,并定位根目录起始地址。通过目录中的目录项获取文件的起始位置,若文件大于一个簇,PC会通过FAT表找到存储文件的下一个簇的地址。至此,PC即可访问整个文件系统的文件。
2 USB模块批量传输的测试
测试MCU的USB模块是依照上述介绍的内容将MCU实现成为了一个虚拟的U盘,虚拟U盘的文件系统采用FAT32。通过测试虚拟U盘来测试USB模块的功能。
2.1 USB部分的实现
U盘是一个大容量存储的USB设备,使用的是批量传输,其指令采用了SCSI指令集。在按照上述内容实现了USB的枚举和读写的同时,还需要实现SCSI指令集的处理,其处理过程如图5所示。下面是相应的指令解释。
① Test Unit Ready:用于监测U盘是否处于准备好的状态,对于可移除磁盘,PC会每秒发送一次此指令。
② Inquiry:获取U盘设备的一些基本信息,如是否为可移除磁盘、ISO版本号、ANSI版本号等内容。
③ Read Format Capacity:获取U盘格式化容量信息。
④ Read Capacity:获取U盘容量信息。
⑤ Read10:读取U盘内容的指令,可根据指定地址读取相应存储空间的信息。
⑥ Write10:写U盘指令,可以向指定的地址空间写入相应的数据。
图5 U盘SCSI指令处理流程图
2.2 虚拟U盘FAT32文件系统部分的实现
本次目标是验证USB的批量传输,并不需要涉及到存储的操作,所以这里的U盘文件系统被枚举挂载的是虚拟U盘。U盘挂载到PC之后,PC对U盘的数据读取操作是从MCU固定RAM地址读取固定数据,PC对U盘的数据写入操作直接被MCU丢弃。虚拟U盘文件系统之所以能在PC上显示出已格式化的磁盘设备,是因为其在PC读取对应的FAT32文件系统保留区、FAT区、数据区地址内容时返回了相应的文件系统数据。图6是PC识别U盘FAT32文件系统的流程图。
图6 PC识别U盘FAT32文件系统流程图
虚拟U盘的文件系统挂载是为了测试USB模块的批量传输,不必要具体参与DBR、FAT、数据区内容的编辑。本验证通过格式化一个普通U盘,使用WinHex软件获取相应文件系统区域的内容和对应地址。图7是通过WinHex软件获取文件系统关键区域的方法,按照此方法依次获取DBR、FAT区和数据区的地址和内容,将获取的数据应用在图6所示的流程图对应的程序段中。
图7 U盘DBR获取方法示意图
2.3 测 试
首先,可以通过上述方式实现U盘功能,能够枚举并且挂载磁盘,已经可以说明USB通路的通信是能正常运行的。
其次,在U盘正常枚举之后可以通过U盘测试软件测试其速度性能。图8是MCU USB作为U盘时的读写性能测试结果(写为20.1 MB/s,读为23.7 MB/s)。
最后,可通过PC软件长时间不间断地对U盘进行读写,测试USB通信功能的稳定性。
结 语
图8 虚拟U盘速度测试结果