USB通信程序设计 第11页

USB通信程序设计 第11页
BULK_ONLY传输协议命令处理
 如果枚举阶段设备按海量存储协议向主机提供了描述符,则当USB总线数据检测软件检测到数据55 53 42 53时,说明已经开始了BULK_ONLY传输阶段。这时可以不用太多考虑USB中断、端点之类的问题,到此阶段后只有两个端点工作,即Bulk_In和Bulk_Out端点,In或Out都是从主机的角度来讲的,前者用于设备向主机发送数据,后者用于主机向设备发送数据。Bulk_In端点的处理比较简单,在需要的时候,设备将要发往主机的数据通过此端点送出即可,如果数据一次不能发完,则设置标志位,通过发送中断的产生可以实现连续发送。Bulk_Out端点的情况比较复杂一些,要判断收到的是协议内容还是数据,如果是协议内容,则要对协议包进行解析,根据协议中的内容得到SCSI命令,然后再根据这些命令处理相应的请求。下面为BULK端点处理的流程图:
Bulk_In端点处理流程图
Bulk_Out端点处理流程图
 在BULK_ONLY传输协议命令处理中,最难处理的就是读写命令。因为主机传送数据至少一次为512字节,但是BULK端点一次最多只能传输64个字节,所以,需要8次才能完成一次主机512字节的传输。因此,在处理读命令时,设置传输数据长度,当设备的发送中断出现后,判断传输数据长度是否为零,如果不为零,则继续传输,直至需要的数据传输完毕,再传输CSW。在处理写命令时,也设置了传输数据长度,在从主机端接收了一定的数据后(由MCU的SRAM而定,由于本项目中使用的MCU只有512字节的SRAM,这里数据长度采用256字节),将数据写入FLASH中。
4.2.4 FLASH的读写
BULK_ONLY传输协议读写命令操作的目标是FLASH中的数据,而FLASH读写又有其自身的特点,如可以随机读,但无法随机写。所以,对于FLASH的读操作采取直接读取的处理;而对于FLASH的写操作,则需要通过设置缓冲区来解决。在与主机进行数据交换的过程中,最小的单位是扇区(1扇区为512字节)。由于对FLASH进行写操作之前必须擦除,而FLASH的擦除一次就必须是一个块(1块为16K字节)。因此,在块擦除之前必须保存同一块中的有关数据。但是,如果每收到一个扇区的内容就进行一次保存、擦除、写的操作,系统任务将十分繁重,无法及时响应主机端的请求。又由于MCU的SRAM只有512字节,不能用于块缓冲。所以,在这里采用的是将FLASH的后几个块作为缓冲区,写操作时,先擦除指定缓冲块,然后将写入数据相关块内的相关数据拷贝到指定缓冲块,接着将数据写入缓冲块,最后,当写满缓冲块时,擦除写数据相关块,将指定缓冲块的数据拷贝到写数据相关块。
结论
通过这次毕业设计的项目开发,我学到了很多书本上学不到的东西,特别是动手解决实际问题的能力得到了加强。
对于USB通信程序开发,以至单片机、嵌入式程序开发,我觉得对编程语言的熟练程度是项目开发的关键。虽然,许多原理上的问题,刚接触感觉很难,摸不着头脑,但,一旦了解后就会觉得思路非常清晰。因此,开发所需要做的主要工作是将原理表述的东西在自己特定的平台上实现。一个协议或是一个方法,其原理和实现的不同在于,原理比较抽象,比较粗略,不需要精确;而要真正用代码实现时,则要求具体、详细、精确,一点差错都不能有,因此,对于语言的熟练程度的确可以事半功倍,提高效率。
其次,调试是项目开发的难点。理论上的东西,是别人总结出来的东西,因此非常抽象,跟实践相比往往省略了许多细节,而项目开发有时候就是根据抽象的理论,来重新实现细节。但很多理论问题的实现不是一次就能成功的,这就需要调试,定位问题的所在,解决问题。调试的时候经验非常重要,并且经验与能力的增长是相辅相成的。如果某个问题在做第一遍不清楚,那么做第二遍时就一定知道了,就可以直接得到正确的结论。这里还要掌握调试手段,像在程序中添加了一些串口打印语句,就会影响程序的正确运行等问题的解决,如果完全凭借资料,是很难解决的。
本项目开发完成后,还存在一些不足的地方。如,固件问题,由于开发使用的开发板是双龙公司的成品开发板,除MCU外其它芯片不能更换。其中D12芯片的一个Bulk端点出现了问题,这就很大程度上影响设备与主机之间交换数据的速度。因此,出现对设备读写不稳定的现象:可以读写小文件,但读写大文件时由于速度慢,主机会认为超时而无法完成。
致谢
大学生活行将结束,计算机与通信学院留给我的知识底蕴,师长的教导,特别是这次毕业设计和论文创作中我学习和领悟到的学习方法,我铭记于心。在此,我要感谢这次毕业设计和论文创作过程中给予我帮助的所有人:感谢我的导师――湖南大学计算机与通信学院徐成副教授,感谢徐老师在设计总框架和论文构思与结构布局上给我的启示;感谢计算机与通信学院相关老师给我的指导;感谢一起做毕业设计的同组同学,他们给了我的无私帮助;感谢图书管理员帮助我快速有效地找到所需要的资料;还要感谢打印社的师傅,这其中也包含了他的辛勤劳动!
此文献给我的母校――湖南大学!
献给计算机与通信学院的全体老师和同学!
特别致谢徐成副教授的关心和指导,祝他身体健康,吉祥如意!

 << 上一页  [11] [12] [13] 下一页

Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有