|
摘 要:本文详细介绍了一种基于USB总线的随机信源设备的设计与实现。内容包括随机信源噪声的产生与采集、USB控制芯片AN2131SC的特点及其应用以及USB驱动、固件和客户应用软件的编写等。 关键词:USB;AN2131SC;固件;AD9281 引言 密码技术是信息安全的核心技术之一,数据加密的安全性依赖于密钥。密码学意义上好的密钥是指利用随机现象产生随机信号,再通过对其编码而生成的随机序列,它具有等概率、独立、平稳等特性。随机信源产生模拟的电子噪声,利用ADC将其数字化,并最终提供真正随机的数字序列,来产生不同格式的密钥,从而满足各种实际的应用需求。因此随机信源及其研究是信息安全领域不可或缺的部分。本文介绍了一种基于USB接口的随机信源的设计方案和实现。 硬件设计 硬件设计包括:信源噪声产生电路、A/D转换电路和USB硬件模块。图1是该随机信源的原理框图。 信源噪声产生 信源噪声产生原理是利用具有雪崩效应的齐纳二极管产生噪声,然后再将其经宽带放大器进行放大。在具体设计中,最好选用10V左右的齐纳二极管,此时按图2的接法,通过微调可调电阻来改变流过齐纳二极管的电流值,就能从耦合电容得到较平坦的频谱。可以适当调整电流值,以寻找噪声频谱既平坦、噪声电平又尽可能高的最佳点。雪崩噪声的主要成分是散弹噪声,属于高斯白噪声。 由于实际的宽带放大器都不具有理想的滤波特性,这种高斯白噪声通过宽带放大电路后,一般就不再是白噪声了。因此在设计宽带放大器时,需要增加校正网络,使输出的噪声在一定的带宽范围内接近高斯白噪声。 除了考虑足够的信号强度和频带宽度外,还要采取增益控制、阻抗匹配、电源去耦、信号屏蔽等措施,防止电路出现自激振荡,提高随机信源电路的工作稳定性。图3是通过频谱分析仪实测的信源噪声的功率谱密度图,其中3dB噪声带宽约为65MHz;等效噪声带宽约为200MHz。 A/D转换 A/D转换就是将宽带放大器输出的模拟电子噪声转化为数字噪声的过程。在噪声采集电路中,使用了AD9281芯片。该芯片内部结合了两个8bit、28MSPS的ADC,两个输入缓冲放大器,一个内部参考电压,多路复用数字输出缓冲器。采用单电源供电,工作电压范围:2.7V~5.5V,功耗低,温度适用范围宽。 AD9281有四种信号输入方式:单端输入方式、差动输入方式、交流耦合输入方式和变压器耦合输入方式。由于输入信号是宽带放大器经电容耦合进来的,没有直流成分,本方案采用交流耦合输入方式。 AD9281有五种工作模式:1V模式、2V模式、外部设置模式、外部参考电压模式和参考缓冲模式。本方案采用的是外部设置模式,如图4所示。使用内部参考电压,通过外部的电阻分压来调整参考电压:VREF=1+(Ra/Rb),其中Ra和Rb分别是可调电阻两部分的阻值,这种模式可满足输入信号电压峰-峰值从0.7V到2.5V的变化范围,避免了直接调整信号幅度所引起的负面影响。 USB硬件 USB接口控制使用的是Cypress公司的AN2131SC芯片。该芯片是一种全速USB控制器,遵循USB协议1.1版, 44个引脚,使用3.3V电源。 在整个噪声采集过程中,AN2131SC的主要作用是:利用其USB内核与主机通信并传输数据。利用其片上增强型8051作为控制器,使AD9281正常工作。具体工作过程为:AN2131SC上电复位后,芯片按照USB规范应答,提供设备标识,然后再次枚举,加载对应驱动程序,并将控制权转交给8051,8051对AD9281发采集指令,进行噪声采集,将所得的噪声数据存储到内部FIFO,当一定字节的数据采集完后,再将它们通过USB总线传至主机。噪声采集工作原理可参看图4。需要说明的是,AN2131SC实际同步传输带宽由8051能在同步端点FIFO内、输入和输出的数据速度来决定。AN2131SC 8051的时钟是24MHz(42ns),其指令周期需4个时钟:42 ns×4=168ns,将外部一个字节数据移到IN端点FIFO的典型传送循环需要9个指令周期:168ns×9≈1.5ms,环内每ms传送到IN FIFO的字节数为:1ms/1.5ms≈660字节。如果需要更快的速度,需对环内循环代码展开,但这样会增加程序代码的数量,较好的方法是对环内循环代码作部分展开。因为AN2131SC同步传输带宽决定AD9281的采样频率,根据以上分析,采样频率最好不要超过660KHz。本文实际的采样频率约为500 KHz。此时模拟噪声的带宽远大于实际的采样频率,采样时噪声的频谱会产生重叠。由于本文不考虑噪声的还原,这种影响是可以忽略的。 软件设计 系统软件包括USB总线设备驱动程序、设备固件程序和主机应用程序三部分。 USB总线设备驱动程序 为了节省开发时间,本文在设计中直接使用了EZ-USB的通用驱动程序(GPD):ezusb.sys。 EZ-USB GPD支持符合USB1.1规范的IOCTL。主机应用程序通过I/O控制来访问GPD,即先通过调用一个Win32函数CreateFile()来获得设备驱动程序的句柄,然后用函数DeviceIoControl()来提交I/O控制代码和相关的输入/输出。 设备固件程序 设备固件程序主要为AN2131SC控制器接收和传送噪声数据提供所有的操作。首先固件代码要完成设备的枚举过程,来告诉主机关于设备的重要信息,如设备的制造商号、产品号以及其它信息,并初始化USB总线设备;其次要从AD9281中获取数字化的噪声数据,传送给主机。 事实上,EZ-USB内核建立了默认的USB设备,所有描述符由内核自动处理。通过利用USB默认的机制,可用很少的固件代码,完成一定功能的USB传输。这里给出利用默认端点8-IN的采集测试固件部分代码。默认端点8-IN是同步传输端点,使用交替功能2时,信息包的长度为256字节。 ;初始化 …… loop: mov dptr,#USBIRQ ;等待SOF IRQ位 movx a,@dptr jnb acc.1,loop mov a,#00000010b ;SOFIR 位 movx @dptr,a ;写1清除 SOF IRQ 位 mov r7,#100 ;采集100字节数据 sample: mov dptr,#OUTA mov a,#00010000b ;Q通道采样开始指令 movx @dptr,A ;输出至 PORTA引脚 mov dptr,#PINSB movx a,@dptr ;读PORTB引脚Q通道采样数据 mov dptr,#IN8DATA movx @dptr,a ;采样数据放入片内FIFO mov dptr,#OUTA mov A,#00000000b ;Q通道采样结束指令 movx @dptr,A ;输出至 PORTA引脚 djnz r7,sample ; 判断是否采集了100字节数据 sjmp loop end 以上代码经编译后,可用EZ-USB控制板将生成的HEX文件下载到AN2131SC中,并用其对USB信源设备进行一些必要的测试。 主机应用程序 主机应用程序主要完成基于Windows的各种噪声数据的处理,并完成相应的功能应用,如:随机信源测试、随机密钥编制、密钥品质评价等。在Win32系统中,把每一个设备都抽象为文件,USB设备也不例外。应用程序通过文件操作API函数:CreatFile()、ReadFile()、WriteFile()、DeviceIoControl()和CloseFile(),实现与驱动程序中的设备通信。由于对功能应用需求的千差万别,这里对主机客户应用程序的实现细节不作详述。图5是用VC编写的随机信源测试程序得到的信源噪声波形图、分布图及相关数据。 结语 基于USB控制芯片AN2131SC的随机信源,具有易于设计实现、价格低廉等优点。但该USB控制芯片只遵循USB1.1协议,较低的USB传输带宽限制了AD9281的采样速率,而且也使得所提供的低通宽带高斯白噪声得不到充分利用。在某些应用场合,对随机信源的数据速率要求较高,此时,可选用遵循USB2.0协议的USB控制芯片,如Cypress公司的CY7C68013芯片,再结合本设计方案,可以较容易地实现基于USB总线的高速随机信源的设计。■ 参考文献 1 Dual Channel 8-Bit Resolution CMOS ADC:AD9281. Analog Devices,2003 2 The EZ-USB Intergrated Circuit Technical Reference Manual. Cypress Semiconductor Corporation,2000 3 颜荣江. EZ-USB 2100系列单片机原理、编程及应用. 北京:北京航空航天大学出版社,2002 4 杜武林. 高频电路原理与分析. 西安:西安电子科技大学出版社,1994 5 姜丹. 信息论与编码. 合肥:中国科学技术大学出版社,2002
() |