安全认证系统中嵌入USB接口技术
扫描二维码
随时随地手机看文章
USB(Universal Serial Bus)通用串行总线是计算机与其外围设备通信的一种总线标准,是近年来应用在PC领域的新型接口技术。它的热拔插、即插即用、连接简单、高带宽、可总线供电等优点几乎使其成为目前计算机外设的首选通信接口。世界上几乎所有硬件厂商都生产实现USB协议的芯片。厂商们本着通用性原则,有的在芯片中嵌入了通用微处理器,如CYPRESS公司CY7C6××××系列和INTEL930××系列嵌入了8051系列微控制器;有的则提供了各种常用的与微处理器接口的方案,如NATIONAL SEMICONDUCTOR公司的USBN960× 系列提供了多路与非多路的8位并行接口、DMA并行接口及微波接口;PHILIPS公司的PDIUSBD11提供了I2C总线接口;三星公司研制的USB功能控制器则具有8位并行微处理器接口,并能以同步或者异步方式工作,这为使用USB协议作为通信接口提供了极大的方便。然而,将USB功能嵌入到一种用于安全认证的处理系统中,则存在无法与处理器直接接口的问题。本文探讨了USB功能模块和处理器接口技术,并从其基本应用角度出发,给出了相应的软件流程。具有USB接口的安全认证系统使用简单、便于携带、通信速度快。
1 USB功能模块
USB功能模块是基于微处理器应用实现USB协议的模块。集成有低速USB收发器,配置有3个基于FIFO的端点、1个控制端点(8字节)、2个可配置传输方向的中断端点(8字节)。每个端点都配置有相应的控制与状态寄存器,带有一个8 位微处理器并行接口,可工作在同步或异步方式。
USB功能模块的操作对用户来说是完全透明的。包的译码、数据传输到FIFO、从FIFO发送数据和USB包的装配都是自动完成的。当接收到一个正确数据包或发送成功一个数据包,即向MCU发出中断请求,请求将数据取走或装入下一个要发送的数据包。端点FIFO对USB来说是缓存单元,对MCU来说是一个I/O端口。微处理器通过访问USB寄存器来控制USB模块的操作。
1.1 端点0控制/状态寄存器
D0:OUT_PKT_RDY FIFO装有一个有效数据包,USB将其置1,产生中断,MCU写D6为1,清除D0。
D1:IN_PKY_RDY USB成功发送完一个数据包,清D1时产生中断。
D2:SENT_STALL 控制交换因违反协议而终止,USB置D2,产生中断。
D3:DATA_END MCU装了最后一个数据包到FIFO,置D3,与此同时,置D1。MCU卸载完FIFO最后一个数据包,清D0,置D3。对于0长度的数据相,MCU卸载完SETUP数据包之后,清D0=0,置 D3=1。USB清D3时产生中断。
D4:SETUP_END 在DATA_END(D3)置位之前,控制传输结束,USB置D4,产生中断。
D5:SEND_STALL 如果译码为一个无效的令牌,MCU置D5,与此同时,清D0,USB发STALL给当前的控制传输,MCU写D5=0,结束STALL条件。
D6:SERVICED_OUT_PKY_RDY MCU写D6=1以清除D0。
D7:SERVICED_SETUP_END MCU写D7=1以清除D4。
1.2 USB功能模块的访问时序
USB功能模块的I/O接口可工作在同步或异步方式,本文采用同步方式。其对MCU访问的读写时序要求如图1(a)、(b)所示。
写时序:地址至少要维持两个时钟周期,并且要先于数据一个有效时钟周期,以便将FIFO的写指针选通至RAM写地址端口。当写信号有效时,存储器写使能信号有效,写之后一个时钟周期FIFO指针刷新。地址有效时,片选高有效。
读时序:一旦地址有效,存储器输出使能有效。地址至少维持两个时钟周期,前一个周期将FIFO的读指针选通至RAM的读地址端口,因此数据比地址晚一个时钟周期出现在数据总线上。当读信号有效时,MCU将总线上的数据读走,与此同时,FIFO的指针刷新。地址有效时,片选高有效。
2 安全认证系统
系统中采用了具有加解密功能的处理器。处理器采用栈式结构,具有焦点聚合的低功耗内总线结构和超标量指令结构与多种寻址方式等特点,能高速高效地处理数据。嵌入有RSA和DES模块,能对发送和接收的数据进行实时RSA算法或三重DES算法的加密和解密。系统具有8位地址总线,16位数据位宽的并行接口,其I/O访问时序如图2所示。从图2可以看出,I/O访问在一个时钟周期内完成。 [!--empirenews.page--]
3 硬件设计
将USB接口嵌入到安全认证系统中,从图1和图2可以看出,二者的时序不匹配,不能直接连接,因此在硬件上要进行时序匹配设计,其硬件原理如图3所示。首先将地址和片选信号展宽一个周期。对于写时序,将写信号往后延迟一个时钟周期,即能满足写时序要求;对于读时序,因为读信号有效时,数据必须已出现在数据总线上。从图1(a)可看出,FIFO的数据在地址有效一个时钟周期后才出现在数据总线上,也就是说,微处理器必须先给出一个周期的地址,然后读信号有效,才能得到正确的结果。为解决这个问题,采取了读FIFO时,先写一次FIFO,紧接着读FIFO。但此时要将写信号屏蔽掉,以免影响FIFO的状态。因此设立一个读控制端口,读FIFO时,将其置1,其余时刻清零。假如MCU要从FIFO读取8个字节,则程序如下:
TMOV Z, 01H //读控制端口98置1
ZOUT 98H
MOV I, 7
TMOV MD, bmRequestType //读FIFO的数据到bmRequestType[...]
LX1: ZOUT FIFO0
ZIN FIFO0
MOV T, Z
MOV T, MD
MOV I, T
TMOV [I], T
MOV T, MD
INC
MOV MD, T
NEXT LX1
TMOV Z, 00H //数据读完,98端口清0;
ZOUT 98H
4 软件设计
USB系统通过一个列举过程来识别和配置一个新接入的USB设备,这个过程分5步来完成:
(1)用默认0地址取得设备描述;
(2)设置设备地址;
(3)用新地址取得设备描述;
(4)取得配置描述;
(5)设置配置。 [!--empirenews.page--]
列举过程由控制传输来实现。控制传输有三种类型:
控制读 SETUP-IN-IN-IN……OUT
控制写 SETUP-OUT-OUT-OUT……IN
无数据相 SETUP-IN
通信开始时,PC首先发SETUP包,SETUP包是8个字节的命令包。当USB接收完8个字节的命令,即向MCU发出中断请求,MCU读取这8个字节,对其进行分析。当USB设备给PC发数据时,执行控制读操作;当PC要给USB设备输出数据时,执行控制写操作。输入或输出数据时,数据包的最大传送字节为8字节。
执行控制写操作时,当USB将接收到的数据包写到了FIFO时,OUT_PKT_RDY标志位置1。MCU查询标志位,读取数据。当MCU读空FIFO数据,即将OUT_PKT_RDY标志位清0;当MCU读完了最后一个数据包时,将DATA_END标志位置1, 告知USB控制写操作完成。
执行控制读操作时,当MCU写了一个数据包到FIFO时,将IN_PKT_RDY标志位置1,USB成功发送完这个数据包时将IN_PKT_RDY标志位清0,MCU查询此标志位,装入下一个数据包。当MCU装完最后一个数据包,即将DATA_END标志位置1,告知USB控制读操作完成。
无数据相接收到SETUP包即告控制传输结束,MCU读完SETUP数据即将OUT_PKT_RDY标志位清0,并将DATA_END标志位置1。其列举过程的软件实现流程如图4所示。
该方案已在PC上通过验证。具有USB接口的安全认证系统,通信速度快、便于携带、使用方便,插入PC的USB接口即可。