基于CPLD的USB总线读写控制功能实现(2)
要实现数据从U盘到PC的单向流动,即禁止数据输出到U盘,有两种实现方式。
方案一:CPLD实时监测USB总线上的数据,当检测到Write(10)命令(其SCSI指令代码为0x2a)或Write(12)命令(其SCSI指令代码为0xaa)时,自动将两根USB差分总线中的一条拉低,从而造成数据差分输出失败,达到禁止输出的目的。
方案二:CPLD实时监测USB总线上的数据,当检测到Modesense命令(其SCSI指令代码为0x1a)时,预示着接下来U盘将向主机传输相应存储介质参数了。在传送的数据串中,有一位标示着该存储设备是否可以被写入。以普通带写保护功能的U盘为例,开启写保护时,检测到的输入参数数据流为23008000……,关掉写保护后,检测到的输入参数数据流为23000000……,以上数据为小端模式,故第三个字节的最高位为写保护信息位,图3是利用BusHound工具抓取的两种U盘在实际应用中的Modesense命令返回参数。若利用USB总线控制器将此位修改为1,则该U盘即不能被写入,但不影响其正常读取,从而实现了我们所需的功能。
图3两种U盘的Modesense命令返回参数
以上两种方式均在硬件平台上成功实现。比较可知,方案一采取简单的破坏数据输出的方式,实现起来相对容易,但输出失败的数据势必会在下次自动重新试传,这样弹出错误窗口会有时间延迟,且对配置稍低的PC机而言,这种延时比较明显;方案二采取修改Modesense返回参数的方式,直接将U盘设定为禁止写入的设备,这样在后续的数据传输时反应较快。考虑到实际使用效果,本设计选取第二种方案,本文也主要介绍基于该方案的实现。
2.2传输过程分析
USB总线采用差分传输方式,USB2.0共有4条线,分别是、D-、D+和GND。当D+、D-为不同电平时,有J、K两种状态;当D+、D-都为低电平时,称之为SE0状态。数据在总线上传输之前,会先进行NRZI编码。因此,在检测总线数据之前,也需进行NRZI解码。
2.2.1包和事务
USB2.0协议规定了四种传输类型,分别是控制传输、同步传输、批量传输和中断传输。数据在USB总线上传输的基本单位是包。不论何种包,都以同步域开始,紧跟着一个8位包标识符PID,最终以包结束符EOP结束。以数据包为例,它由一个同步域开始,紧跟着是PID,后面跟着n个字节的数据,然后是16位CRC校验码,最后是EOP。
图4数据包的结构
一个事务通常由两个或者三个包组成:令牌包、数据包和握手包。令牌包用来启动一个事务,总是由主机发送;数据包用于在主机和设备之间传输数据,传输方向由令牌包来指定;当接收方正确接收数据后,发送握手包。控制传输包括三个过程:建立过程、数据过程和状态过程,其中建立过程和状态过程分别是一个事务,数据过程则可能包含多个事务。
2.2.2仅批量传输
在仅批量传输协议中,规定了数据传输的结构和过程,共分成三个阶段:命令阶段、数据阶段和状态阶段。命令阶段由主机通过批量端点发送一个CBW(命令块封包)的结构,在CBW中定义了要操作的命令以及传输数据的方向和数量。CBW的结构参见文献[4],其中dCBWSignature为CBW的标志,长度为32位,即0x55、0x53、0x42、0x43。当检测到一个包的起始序列为0x55、0x53、0x42、0x43时,即表明该包为CBW;另外,CBW中CBWCB表示需要执行的命令,若为0x1a,即表示Modesense命令。
与CBW类似,命令状态封包CSW的结构参见文献[4],其标志dCSWSignature为0x55、0x53、0x42、0x53。
一次完整的仅批量传输过程如下:
命令阶段令牌包主机发送
数据包(CBW)主机发送
握手包U盘应答
数据阶段令牌包主机发送
数据包(包含写保护信息位)U盘返回
握手包主机应答
状态阶段令牌包主机发送
数据包(CSW)U盘返回
握手包主机应答
2.2.3返回参数的截取及修改
对全速模式的USB2.0传输而言,每个包都由同步域开始,即连续的"00000001"二进制字符串,在数据传输中同步字符串是独特的,因此利用序列检测即可确定每个包的开始时刻。由于同步字节后即为一个字节的PID,同样利用序列检测到的PID即可确定该PID的类型,从而确定该包的作用。当确定该包为主机发送的令牌包后,则对下一个包的起始序列进行检测。若为CBW的起始序列0x55、0x53、0x42、0x43,则表明该包即为CBW。继续检测其第15字节的CBWCB,若为0x1a,即为Modesense命令。在数据阶段的数据包开始后,从PID结束开始的第24位起将两根差分总线全部取反,直至包结束(EOP不能取反)。
2.3VerilogHDL程序模块
利用VerilogHDL编程实现上述功能,首先按模块搭建框图。由于篇幅所限,在此仅给出程序框图,如图5所示。
图5VerilogHDL程序框架
投稿辅导服务咨询与期刊合作加盟
谢老师联系QQ:
646779424(普刊)
陆老师联系QQ:
913775405(普刊)
蒋老师联系QQ:
867306987(核心)
刘老师联系QQ:
271374912(核心)
联系电话:18015016272
17327192284
投稿辅导投稿邮箱:zgqkk365@126.com
陆老师联系QQ:
蒋老师联系QQ:
刘老师联系QQ:
联系电话:18015016272
17327192284
投稿辅导投稿邮箱:zgqkk365@126.com
>>更多
期刊推荐
- 《校园英语》旬刊 省级 教育类学术期刊
- 《吉林教育》旬刊 省级 教育类学术期刊
- 《文教资料》 旬刊 省级
- 《科技风》半月刊 省级 科技类优秀期刊
- 《价值工程》旬刊 国家级 科技统计源期刊
- 《中国实验方剂学杂志》 半月刊 北大核心
- 《电影评介》半月刊 14版北大核心
- 《社科纵横》季刊 社科类优秀期刊
- 《求索》月刊 14版北大核心期刊
- 《中华建设》月刊 国家级 建设类优秀期刊
- 《继续教育研究》月刊 北大核心期刊
- 《网络空间安全》(信息安全与技术)月刊 国
- 《新闻传播》月刊 省级 新闻类优秀期刊
- 《财会月刊》旬刊 14版北大核心
- 《体育文化导刊》月刊 体育类双核心期刊
- 《机械研究与应用》双月刊 省级 机械应用类
- 《公路交通科技》 月刊 北大核心
- 《教学与管理》旬刊 北大核心
- 《新课程研究》旬刊 省级 教育类优秀学术期
- 《中国医药指南》 旬刊 国家级
- 《高教论坛》 月刊 省级
- 《课程教育研究》 旬刊 国家级
- 《语文建设》 旬刊 14版北大核心
- 《教育发展研究》 半月刊 双核心
- 《学术界》 月刊 双核心