2、软件设计
USB 软件设计包括三方面的工作:固件(Fireware)设计,驱动程序设计和主机端应用程序的设计。
(1)固件设计
设计中,我们考虑到MPEG视频卡要求快速地持续地传送大量数据,并对数据的完整性要求不太高,我们采用ISO传输方式。另外,我们让CY7C68013工作在GPIF模式下的FIFO Read方式,最多可以传输4G byte(WORDWIDE=0)或word(WORDWIDE=1)。外设的数据由于不需8051的处理,我们采用自动打包的方式(AUTOIN=1),直接从FIFO到SIE,这样有利于提高传输速率。其主要实现代码如下:
void TD_Init( )
{
CPUCS = 0X01; file://CLKSPD[1:0]=10; for 48MHz operation.
GpifInit( );
……
SYNCDELAY;
EP6CFG = 0XDA; file://端点配置: 同步IN方式、缓冲大小1024字节
SYNCDELAY;
FIFORESET = 0X80; // activate NAK_ALL to avoid race conditions
SYNCDELAY;
FIFORESET = 0X06; file://reset, FIFO 6
SYNCDELAY;
FIFORESET = 0X00; file://deactivate NAK_ALL
SYNCDELAY;
EP6FIFOCFG = 0X0D; file://wordwide=1
SYNCDELAY;
……
}
(2)驱动程序设计
在WINDOWS平台下,USB 驱动程序由三部分组成:USB设备驱动程序,USB总线驱动程序和USB主控制器驱动程序,它们必须遵循WIN32驱动程序模型(WDM)。其中,WINDOWS操作系统已经提供了处于驱动程序栈底的USB总线驱动程序和USB主控制器驱动程序。而USB设备驱动程序由设备开发者编写,它通过向USB总线驱动程序发送包含URB(USB Request Block)的IRP(I/O Request Packet),来实现USB外设之间的信息交换。当主机应用程序要对USB设备进行I/O操作时,它调用Windows API函数对Win32子系统进行Win32调用,由I/O管理器将此请求构造成一个合适的IRP,并把它传递给USB设备驱动程序。USB设备驱动程序接受到这个IRP后,根据IRP中包含的具体操作代码,构造响应的URB并把它放到一个新IRP中,然后把此IRP传递到USB总线驱动程序,USB总线驱动程序根据IRP中所包含的URB执行响应的操作,并把操作结果通过IRP返还给USB设备驱动程序。USB设备驱动程序接受到此IRP后,将操作结果通过IRP返还I/O管理器。最后,I/O管理器将此IRP中操作结果返还给应用程序,至此应用程序对USB设备的一次I/O操作完成。
开发USB设备驱动程序,可采用Numega公司的开发包Driver Works和 Microsoft公司的2000DDK,并以VC++6.0作为辅助开发环境。Driver Works提供的驱动向导,,可根据用户的需要,自动生成代码框架。减少了开发的难度,缩短了开发的周期。