基于CPLD的USB总线读写控制功能实现
2022-06-09
0 引言
目前市面上广泛流行的U盘,以其传输速度快、容量大、方便携带等优点,深受消费者青睐。然而这种便携式存储设备,很多时候却悄悄地成为电脑病毒的寄生场所。对于一些涉密部门而言,其计算机对USB接口往往极其敏感,有些甚至干脆直接锁住USB接口,以防止插入U盘窃取计算机中的资料。与U盘相比,他们往往更愿意采用简单可靠的只读光盘来交换数据,如图1。但普通光盘难以做到重复利用,且需要事前刻录,使用起来不及U盘便捷。
本文论述了一种基于CPLD的USB总线读写控制器设计,该设计能够从硬件上杜绝这种“通过U盘窃取数据”的可能,从而使人们在享受U盘传递数据快捷便利的同时,不必再有数据被窃取的担忧,也省去了以往刻录光盘的繁琐,使用模式如图2所示。
图1 传统的只读光驱+只读光盘模式 图2 USB口+USB总线控制器+普通U盘模式
1 硬件架构
本设计基于EPM3512AQC208芯片,采用两片TI公司1106芯片作为USB总线转发芯片,其接口电路参见文献[5]。系统时钟采用12MHz无源晶振,时钟信号经ICS512时钟管理芯片倍频成96MHz后提供给CPLD作为基准时钟。考虑到USB2.0的最大供电电流只有500mA,此处控制板采用单独外接+5V直流电源供电。另外,使用LDO电源管理芯片将+5V电源转换成+3.3V后供CPLD工作,芯片型号为LM1084-3.3V;使用TPS3307-33芯片进行电路复位管理。
2 CPLD软件实现
2.1 软件实现方案
要实现数据从U盘到PC的单向流动,即禁止数据输出到U盘,有两种实现方式。
方案一:CPLD实时监测USB总线上的数据,当检测到Write(10)命令(其SCSI指令代码为0x2a)或Write(12)命令(其SCSI指令代码为0xaa)时,自动将两根USB差分总线中的一条拉低,从而造成数据差分输出失败,达到禁止输出的目的。
方案二:CPLD实时监测USB总线上的数据,当检测到Mode sense命令(其SCSI指令代码为0x1a)时,预示着接下来U盘将向主机传输相应存储介质参数了。在传送的数据串中,有一位标示着该存储设备是否可以被写入。以普通带写保护功能的U盘为例,开启写保护时,检测到的输入参数数据流为23 00 80 00……,关掉写保护后,检测到的输入参数数据流为23 00 00 00……,以上数据为小端模式,故第三个字节的最高位为写保护信息位,图3是利用Bus Hound工具抓取的两种U盘在实际应用中的Mode sense命令返回参数。若利用USB总线控制器将此位修改为1,则该U盘即不能被写入,但不影响其正常读取,从而实现了我们所需的功能。
目前市面上广泛流行的U盘,以其传输速度快、容量大、方便携带等优点,深受消费者青睐。然而这种便携式存储设备,很多时候却悄悄地成为电脑病毒的寄生场所。对于一些涉密部门而言,其计算机对USB接口往往极其敏感,有些甚至干脆直接锁住USB接口,以防止插入U盘窃取计算机中的资料。与U盘相比,他们往往更愿意采用简单可靠的只读光盘来交换数据,如图1。但普通光盘难以做到重复利用,且需要事前刻录,使用起来不及U盘便捷。
本文论述了一种基于CPLD的USB总线读写控制器设计,该设计能够从硬件上杜绝这种“通过U盘窃取数据”的可能,从而使人们在享受U盘传递数据快捷便利的同时,不必再有数据被窃取的担忧,也省去了以往刻录光盘的繁琐,使用模式如图2所示。
图1 传统的只读光驱+只读光盘模式 图2 USB口+USB总线控制器+普通U盘模式
1 硬件架构
本设计基于EPM3512AQC208芯片,采用两片TI公司1106芯片作为USB总线转发芯片,其接口电路参见文献[5]。系统时钟采用12MHz无源晶振,时钟信号经ICS512时钟管理芯片倍频成96MHz后提供给CPLD作为基准时钟。考虑到USB2.0的最大供电电流只有500mA,此处控制板采用单独外接+5V直流电源供电。另外,使用LDO电源管理芯片将+5V电源转换成+3.3V后供CPLD工作,芯片型号为LM1084-3.3V;使用TPS3307-33芯片进行电路复位管理。
2 CPLD软件实现
2.1 软件实现方案
要实现数据从U盘到PC的单向流动,即禁止数据输出到U盘,有两种实现方式。
方案一:CPLD实时监测USB总线上的数据,当检测到Write(10)命令(其SCSI指令代码为0x2a)或Write(12)命令(其SCSI指令代码为0xaa)时,自动将两根USB差分总线中的一条拉低,从而造成数据差分输出失败,达到禁止输出的目的。
方案二:CPLD实时监测USB总线上的数据,当检测到Mode sense命令(其SCSI指令代码为0x1a)时,预示着接下来U盘将向主机传输相应存储介质参数了。在传送的数据串中,有一位标示着该存储设备是否可以被写入。以普通带写保护功能的U盘为例,开启写保护时,检测到的输入参数数据流为23 00 80 00……,关掉写保护后,检测到的输入参数数据流为23 00 00 00……,以上数据为小端模式,故第三个字节的最高位为写保护信息位,图3是利用Bus Hound工具抓取的两种U盘在实际应用中的Mode sense命令返回参数。若利用USB总线控制器将此位修改为1,则该U盘即不能被写入,但不影响其正常读取,从而实现了我们所需的功能。