引言
随着3G网络的普及,无线上网已经得到了很好的发展。人们借助无线上网卡就能使计算机随时随地接入网络。USB接口的无线上网卡凭借其插拔方便、安装简单的特性,深受众多用户的青睐。但是,在无线网络给人们带来巨大方便的同时,网络安全问题也一直是困扰用户的难题。USB KEY产品的出现对现行的网络安全体系是一个极为有力的补充。本文设计的一种整合USB KEY的无线上网卡,不仅能提供3G无线上网功能,而且集成普通USB KEY的安全保障功能。
图1 系统结构框图
1 系统架构
本设计以VIATelecom公司的CBP7.1 EVDO(以下简称CBP7.1)无线上网卡开发平台为基础,加入Synochip公司的AS508专用安全芯片作为辅助。系统的总体结构如图1所示。
图1中CBP7.1是一款通信基带处理器,以ARM968为控制核心,辅以2个DSP核处理调制解调功能和音频编解码功能,支持CDMA2000 1xRTT和EVDO协议[1]。它作为主控芯片和射频模块一起,将完成无线上网卡的基本功能。AS508是针对普通USB KEY产品领域推出的32位处理器,采用Cordis5+ RISC内核,并内嵌SM1加密算法、真随机数发生器、DES/3DES加密引擎、AES加密引擎、公钥算法引擎,可以很好地满足USB KEY的各种应用场合[2]。原始独立的参考设计中,CBP7.1和AS508分别通过各自的USB接口与计算机进行数据传输。如果要进行将两者合二为一的设计,最直观的做法是增加USB HUB控制芯片,但这样无疑会增加产品的硬件成本。而本设计中只使用CBP7.1的USB接口与计算机相连,兼顾上网和USB KEY相关数据传输的功能,并在CBP7.1内部解析和剥离USB数据包,将与安全相关处理的命令和数据通过UART接口与AS508进行交互,在AS508中进行处理并反馈结果。
基于CBP7.1的上网卡已是大批量生产的成熟产品,因此上网卡的设计实现部分将不在本文中赘述。接下来的部分将重点阐述CBP7.1与AS508配合实现USB KEY功能的设计。
2 硬件设计
2.1 电源设计
USB设备唯一的取电方式来自于计算机通过USB总线提供的5 V输入。鉴于芯片耐压范围和功耗效率的因素考虑,需要先用Buck DCDC芯片将5 V电压降至系统所需要的合理输入值(如3.6 V),之后再提供给各个模块。无线上网卡部分的供电需要配套的电源管理芯片(PMIC)来完成,它包含一个DCDC和多个LDO,由其决定系统的上电时序和基带、射频子模块电源电压及开关控制逻辑。AS508的供电也可以直接取自于DCDC降压后的电源输出,再由AS508内部自带的LDO完成其所需的3.3 V和1.8 V的电源转换。
2.2 时钟设计
由于CDMA通信系统对频率稳定度的要求,需要选用一款带温度补偿的压控振荡器(VCTCXO),分别给基带和射频提供19.2 MHz的参考时钟输入。为避免基带芯片中高速信号带来的噪声污染射频部分,在参考时钟信号进入CBP7.1之前增加一级缓冲器作为隔离。系统工作时基带芯片还会根据AFC算法对振荡器频率进行微调,以纠正频率误差,使它达到更精确的时钟信号输入。AS508自带片上振荡器,外部只需配一个12 MHz石英晶振和负载电容就能提供芯片的时钟源,再经内部PLL倍频后可以达到96 MHz的工作频率。
2.3 存储设计
图2 软件模块划分
CBP7.1通过EBIF总线搭配外部32 MB
Flash和8 MB的PSRAM二合一MCP存储芯片,而AS508内嵌10KB ROM,128 KB Flash和12KB SRAM。针对本系统的需求,对存储器的使用分配如下:首先,代码区用于系统代码的存储和运行,将分别在各自的Flash和SRAM中完成;第二,两个处理器都拥有自身的文件系统,这部分也将包含在各自的Flash存储空间中;第三,需要预留一个虚拟的CDROM区,存放上网卡所需要的客户端驱动和应用程序,以及USB KEY的CSP等上层库文件和客户端程序。由于AS508内部Flash空间有限,需要外接一个SPI接口的NOR Flash来扩展存储空间,用于存放相关内容。本设计中可以简化存储方案,将两者的CDROM区合并,统一存放在CBP7.1的外部Flash中,从而省去一个SPI NOR Flash,进一步降低了硬件成本和PCB面积。
2.4 接口设计
CBP7.1包含了丰富的外围接口资源。与计算机的数据传输使用USB接口,支持2.0全速标准,可以达到12 Mbps的数据率,拥有6个输入和输出端点。与PMIC之间通过I2C总线接口通信,最高为400 kHz时钟频率,支持76.5kbps ~ 1.288 Mbps数据率。SPI接口用于基带和射频模块间的控制信息传输,峰值数据率可达1.228 8 ~ 19.660 8 Mbps。AS508和CBP7.1的数据交换则通过UART接口完成,最高230.4 kbps的波特率,两者分别拥有4字节和64字节的输入/输出FIFO。
3 软件设计
USB KEY功能软件设计的核心思想是在计算机端将无线上网卡识别成一个CDROM设备,并且可以通过标准或自定义的SCSI命令与设备进行通信。整个系统划分为两个部分:
① 基带处理器软件负责与计算机的USB通信,虚拟出一个CDROM设备,接收并解析数据包,区分CDROM标准磁盘命令或是智能卡相关命令。若是CDROM相关操作,则在本地处理完成并反馈状态和数据;若是智能卡命令,则通过UART接口转发至AS508的COS处理。
② COS(Chip Operating System,片上操作系统)即安全芯片上运行的软件,主要功能是控制USB KEY和外界的信息交换,管理内部的存储器并完成各种安全相关命令的处理。系统软件整体架构如图2所示,下文将分模块具体介绍各部分设计的要点。
3.1 基带处理器软件
3.1.1 USB设备驱动
USB设备通信协议的实现是一个中断处理的过程。驱动程序在USB控制器初始化之后,接收来自主机的各类中断消息,包括控制传输、数据包发送、数据包接收、系统处理和异常处理等请求。控制传输请求中最重要的部分是在USB设备枚举阶段完成各种描述符向主机的上报。描述符包括设备描述符、配置描述符和接口描述符等。
3.1.2 BOT(Bulk_Only Transport)传输协议
主机根据描述符信息在枚举过程中完成对设备的配置后,识别出为Bulk_Only的Mass Storage设备,然后即刻进入Bulk_Only传输方式[3]。
3.1.3 SCSI命令处理
CDROM设备遵从SCSI接口标准,它是一种用于计算机和智能设备之间系统级接口的独立处理器标准。SCSI命令用于通知设备进行某些物理操作(如读/写指定区块),或者返回设备的某些信息(如类型、容量、厂商信息等),以字节流的形式通过总线发送到设备。这些由字节流组成的命令称为CDB(Command Descriptor Blocks,命令描述块)。为了满足USB虚拟CDROM使用的Bulk_Only传输规范,需要将SCSI命令封装在CBW中的CBWCB字段里。
本设计中SCSI命令分为标准命令和自定义命令两类。标准命令用于计算机端虚拟出的CDROM磁盘相关操作,如计算机端对存放在CDROM中的设备驱动程序和应用软件的读取安装。基带处理器软件中需要实现SCSI标准命令集的部分功能。常用的SCSI命令见表1。
表1 常用SCSI标准命令
自定义的SCSI命令用来处理智能卡安全相关的操作。USB KEY用到的智能卡命令将封装在CDB中。软件中可通过CDB中的第一个字节操作码字段来区分标准命令或是自定义命令。当识别到操作码为非标准命令(例如0x11)时,即改走自定义命令的处理流程。自定义命令包括主机发出的输入和输出的两类命令请求,可以通过CDB中的第二个字节来区分。
3.1.4 UART通信
自定义的SCSI命令及其后主机下发的相关数据将由安全芯片来处理,因此基带处理器软件中需要将CDB中的信息及之后的数据重新打包后通过UART接口发送至安全芯片,并接收来自安全芯片处理后的响应和数据。UART收发双方约定物理层数据帧采用1位起始位、8位数据位、1位奇校验位和1位停止位的帧结构。多个数据帧组成的信息包,将按照如下格式进行传输。
其中,SYNC_CHAR是1字节信息包同步头,内容为0xFE。LENGTH字段标明了后续MSG_ID字段与DATA字段的字节数总和,即1+N个字节。MSG_ID字段区分之后的DATA字段的内容是主机发送的输入请求、输出请求或是纯数据。CHECKSUM字段为信息包提供了校验功能,除了SYNC_CHAR字段之外的所有字节相加应为零。
综上所述,基带处理器软件基于USB Bulk_Only传输协议处理CDROM设备通信的流程图如图3所示。
3.2 安全芯片软件
安全芯片软件主要由通信管理、命令管理、文件管理和安全管理4个模块组成[4]。
通信管理模块采用ISO78163标准定义的接触式智能卡T=0(异步半双工字符传输)协议。主机发送由CLA、INS、P1、P2、P3五个连续字段组成的命令头和数据完成后,等待智能卡的应答。USB KEY接收到5个命令字节后,会向主机返回两个字节的SW状态字节和相应的数据[5]。
命令管理模块根据通信管理模块数据包中解析出的智能卡命令进行处理。基本命令和应答状态集在ISO78164标准中作了规定。基本命令集主要包括二进制文件读写、记录文件读写、逻辑通道管理、内外部认证等[6]。实际应用中,USB KEY可以根据需求对智能卡基本命令集进行适当的扩充。
文件管理是COS的基础模块,它在AS508芯片内嵌Flash的特定区块中建立FAT文件系统,负责组织、管理、维护USB KEY内存储的所有数据,包括对MF、DF和EF三级数据类型的操作。
安全管理模块包含三个部分:安全状态、安全属性和安全机制。软件中定义了无权限、外部认证、用户登陆和管理员登陆4种安全状态以及对文件的读、写、删除和使用4个权限等级的安全属性。安全机制可以认为是安全状态实现转移所采用的转移方法和手段,包括:密码校验、密钥认证、数据鉴别及数据加密等。
图3 基于BOT的基带处理器软件流程图
在AS508原始COS基础上,本设计对通信管理的部分稍作修改,由USB接口通信改成UART接口通信的方式。通过UART接口接收来自基带处理器重新组包后的智能卡操作相关的命令和数据。UART数据帧和信息包的格式与上节描述的一致。根据MSG_ID字段判断接下来是否需要进行处理或是响应操作。若是主机输出请求,则接收并解析命令与数据,进入命令管理模块进行处理。若是主机输出请求,则调用命令管理模块中得到的响应信息和数据,通过UART接口向基带处理器发送。UART通信流程图如图4所示。
图4 UART通信流程图
结语
本设计在CBP7.1EVDO 3G无线上网卡的平台基础上,利用外部专用安全芯片扩展了USB KEY的功能。产品结构简单、功能完备,有效地降低硬件成本的同时提高了用户使用的便捷性,具有一定的推广价值。