另外由于加入74LS245所造成的对其它接口时序的影响,可以通过设置DSP(TMS320C2XX)的WSGR寄存器来消除,所以这个方案是可行的。(事实上,后来制造好的电路也证明了这个方案是完全可行的)
对其余时序上的配合,经过仔细的计算与核对证明,也是完全可行的。在硬件上,哂方案还采用了一片GAL(16V8)来实现对PDIUSBD12芯片的片选,以及实现对它的软件和手动复位。硬件总体框图如图4所示。
2 软件设计
2.1 固件设计
由于采用的是不带MCU内核的USB接口芯片,所以关于USB1.1协议规范的实现都必须靠DSP(TMS320C2XX)控制PDIUSBD12芯片来完成。固件的主要设计任务是:在DSP(TMS320C2XX)的平台上编写程序,以完成 USB1.1规范所要求的标准请求及用户根据产品需要自己定义的请求。
为了不影响程序的执行效率,本方案采用中断方式完成固件的编写;同时,为了保证程序的模块化及良好的可移植性,在设计中采用分层结构进行固件的编写,如图5所示。
最下层是硬件接口层,完成硬件上PDIUSBD12与DSP(TMS320C2XX)的对接。主要是DSP(TMS320C2XX)向PDIUSBD12中写入数据或者命令,以及从中读取数据。
中间层主要有两个模块,用来完成PDIUSBD12的命令接口和中断处理子程序。命令接口是指按照PDIUSBD12的命令格式,完成DSP对它的控制。它的基本命令格式是:DSP先向其中的命令地址写入某一条命令,接着从它的数据地址写入或者读出一系列的数据。中断处理子程序是判断中断的产生源,然后跳转到相应的处理子程序。这些子程序不做过多的处理,而仅仅是将命令数据读出然后置标志位,或者是将某些数据送出。
最上层是主循环程序,以及对于USB1.1标准协议请求(这些请求主要是在USB1.1协议规范的第九章中定义的)和用户自定义请求的处理程序。主循环的主要工作是检查标志位。如果标志位被置位,则调用处理子程序,判断是标准请求还是用户自定义请求,然后调用相应的处理程序加以处理,完成请求。
这样分层的好处是:主循环程序在检查标志位以外的时间可以进行其它工作,提高固件的运行效率。
编程过程中,由于涉及了一些严格的接口时序配合问题,所以,整个固件的编写工作全部采用DSP(TMS320C2XX)的汇编语言;用的是CC2000编程开发工具。
2.2 PC机软件的设计
PC机的驱动程序由Philips公司提供。然后,用VC++6.0,通过调用API函数,编写PC的应用程序。这样即可实现PC机对DSP(TMS320C2XX)摄像系统的摄像控制以及图像的传输。
主要使用的API函数是DeviceIOControl()、ReadFile()、 WriteFile()。其中DeviceIOControl()用于PC(主机)向DSP图像采集系统发送请求;ReadFile()和 WriteFile()分别用于从图像采集系统中读出数据以及向图像采集系统中写入数据。
在设计过程中必须注意的问题是:由于USB接口是主-从方式的接口,它的一切传输过程都必须通过主机向外设发送请求后才可以开始,所以在使用ReadFile()、WriteFile()读写数据之前,必须先通过 DeviceIOControl()向图像采集系统发送请求。
3 结果及分析
设计方案完成后,在最后的测试当中,通过USB1.1接口,PC机与DSP系统的通信速率最高达到了580KB/s(4.6Mb/s)以上。这个速率指的是有效数据传输速率,不包括数据传输联络的头信息部分,所以这个速率还是比较令人满意的。现在,传输一张幅面为352×288像素的黑白图片(大小为99KB),耗时不到1s。如果实现动态的拍摄及显示,那么,整个系统每秒可以拍摄并完成显示 3~4幅不经压缩的幅画为352×288像素大小的黑白图片。
测试结果表明,该系统运行可靠(已将程序烧写进片内Flash中),各项性能指标都已达到了最初的设计要求,能够很好地实现图像数据在PC机与DSP之间高速的双向传输。并且,这套USB接口方案只采用了1片PDIUSBD12接口芯片和1片 74LS245,器件成本只有20元左右,这个成本是比较低的。同时,由于采用了DSP作为控制器,所以它的通信速率可以很高;因此,可以说本方案达到了低成本,高速率的USB1.1接口设计要求. |