usb接口(universal serial bus)是一种通用的高速串行接口。它最主要的特点是它的高速传输特性。usb1.1理论速度极限可以达到12mb/s,usb2.0可达到 480mb/s。这样,它可以很好解决大数据量的数据在嵌入式系统与pc机之间的互传问题;同时,它支持热插拔,并且最多同时支持127个外设,非常适合嵌入式系统的应用。
本次设计是在一个已有的dsp图像采集嵌入式系统的基础上,为它配接上一个usb1.1的接口,以达到dsp图像采集系统高速地将图像数据回传到pc机中的目的。设计的要求主要有:
①在原有平台提供的接口基础上,加入一个低成本、高速度的usb接口;
②通过usb接口,实现pc机对dsp图像采集系统的操作与控制;
③实现图像数据在dsp摄像系统与pc机之间高速的双向传输。
基于以上几点可以看出,本方案最主要的特点是成本低廉且传输速度高。
2 硬件方案选择与设计
2.1 方案选择
对于基于dsp平台的usb接口设计,经过综合考虑了几种方案之后决定,采用一个不带mcu内核的usb接口芯片pdiusbd12(成本非常低,一片pdiusbd12的价格仅为20元),再加上简单的外围电路和时序调整电路。
这种芯片仅仅完成usb底层的数据链路级交换,并提供给本地微控制器一个并行的接口,但是它并不完成协议层的工作。协议层的工作需要对微控制器编程,控制usb接口芯片来实现usb协议。所以,开发难度相对来说大一些,要做的编程工作也多一点。但是这套方案的成本非常低,而且由于直接用dsp作为微控制器,没有原单片机的瓶颈限制,所以可以实现很高的数据传输速率。该系统的原理框图如图1所示。
由于pdiusbd12的并行接口时序较慢,只能达到2mb/s。这个速度相对于dsp来说比较低,而且有些地方不是简单地在程序中加入延时就可以调整,所以需要一个时序调整电路来完成它们之间的配合。
图2 tms320c2xx写时序
2.2 pdiusbd12芯片
pdiusbd12芯片它可以工作在5v或者3.3v的工作电压下;具有8位数据总线,且有完全自治的dma传输操作。它还具有可控制的软件连接(softconnect)功能,可以保证在微控制器可靠完成初始化之后再连接上usb总线。另外,它还有一个led驱动脚,可以外接led来监测usb的枚举过程和数据传输过程。当usb接口枚举完成,并且成功配置以后,led将会一直点亮;而在枚举过程以及usb数据通信过程中,led只是有节奏地闪烁。
pdiusbd12只占用微控制器的两个地址资源。也就是说,它只有一根地址线。其中一个地址用来向芯片中写命令,另外一个地址用来向燕片中写数据或者从芯片中读取数据。
pdiusbd12一共有三组端点:端点0完成控制传输;端点1可以配置成中断传输;端点2是主要的数据传输端点。它有64b的缓冲区,如果加上它的双缓冲机制,就有128b的缓冲区;它可以配置成批量传输模式,或者同步传输模式。
总的来说,pdiusbd12是一款性能优异,价格相对软低的usb接口芯片。
2.3 时序芯片
为了降低成本、简化电路,本方案不使用dma传输方式,而以ti公司的tms320c2xx作为微控制器(使用20mhz晶振)。它的并口速度非常高,远远高于pdiusbd12所要求的最高限制2mb/s。此处是硬件设计最关键的地方。
经过详细的时序分析发现,大部分问题可以通过在dsp固件设计的加入延时,或者设置dsp的wsgr寄存器来解决。但是有一个问题,必须在硬件上加以解决。图2是dsp(tms320c2xx)的写时序。
图2中,参数th(w-d)是指在we信号变高(无效)以后,所写的数据将仍然保持有效的时间。这个值最小为3ns,最大为14ns,所以所写的数据在we信号无效以后还会维持有效,大约3~14ns(实际的延时介于这两个值之间)。
由此可以看出,dsp(tms320c2xx)的写时序不能可靠地保证满足 pdiusbd12的要求,而且这个问题无法通过软件加延时的方法来解决,必须通过硬件来处理。经过分析对比,最后决定采用一个很简单但是后来事实证明非常有效的方法来调整它们之间的时序。那就是在dsp(tms320c2xx)与pdiusbd12的总线之间加一个双向缓冲器-74ls245。这个芯片可以在它们的时序之间引入一个延时。虽然这个延时并不可靠、但是由于dsp(tms320c2xx)本身会在wr无效后,继续保持数据有效一段时间(前面已讲过),这要仅仅需要将延时适当延长一点就可以了。74ls245所造成的延时典型值为15ns,最小也为8ns。这样,加上原来dsp写时序的延时,就可以满足pdiusbd12所要求的写时序了。
另外由于加入74ls245所造成的对其它接口时序的影响,可以通过设置dsp(tms320c2xx)的wsgr寄存器来消除,所以这个方案是可行的。(事实上,后来制造好的电路也证明了这个方案是完全可行的)
对其余时序上的配合,经过仔细的计算与核对证明,也是完全可行的。在硬件上,哂方案还采用了一片gal(16v8)来实现对pdiusbd12芯片的片选,以及实现对它的软件和手动复位。
3 软件设计
3.1 固件设计
由于采用的是不带mcu内核的usb接口芯片,所以关于usb1.1协议规范的实现都必须靠dsp(tms320c2xx)控制pdiusbd12芯片来完成。固件的主要设计任务是:在dsp(tms320c2xx)的平台上编写程序,以完成 usb1.1规范所要求的标准请求及用户根据产品需要自己定义的请求。
为了不影响程序的执行效率,本方案采用中断方式完成固件的编写;同时,为了保证程序的模块化及良好的可移植性,在设计中采用分层结构进行固件的编写,如图所示。
最下层是硬件接口层,完成硬件上pdiusbd12与dsp(tms320c2xx)的对接。主要是dsp(tms320c2xx)向pdiusbd12中写入数据或者命令,以及从中读取数据。
中间层主要有两个模块,用来完成pdiusbd12的命令接口和中断处理子程序。命令接口是指按照pdiusbd12的命令格式,完成dsp对它的控制。它的基本命令格式是:dsp先向其中的命令地址写入某一条命令,接着从它的数据地址写入或者读出一系列的数据。中断处理子程序是判断中断的产生源,然后跳转到相应的处理子程序。这些子程序不做过多的处理,而仅仅是将命令数据读出然后置标志位,或者是将某些数据送出。
最上层是主循环程序,以及对于usb1.1标准协议请求(这些请求主要是在usb1.1协议规范的第九章中定义的)和用户自定义请求的处理程序。主循环的主要工作是检查标志位。如果标志位被置位,则调用处理子程序,判断是标准请求还是用户自定义请求,然后调用相应的处理程序加以处理,完成请求。
这样分层的好处是:主循环程序在检查标志位以外的时间可以进行其它工作,提高固件的运行效率。
编程过程中,由于涉及了一些严格的接口时序配合问题,所以,整个固件的编写工作全部采用dsp(tms320c2xx)的汇编语言;用的是cc2000编程开发工具。
3.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()向图像采集系统发送请求。
4 结果及分析
设计方案完成后,在最后的测试当中,通过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接口设计要求。
『本文转载自网络,凯发旗舰的版权归原作者所有,如有侵权请联系删除』