基于CY7C646xx的通用串行总线接口
PD(General Purpose Driver)模板供用户修改使用。它提供一个上层的程序代码来实现底层的驱动程序的编写,能够完成USB设备的标准请求及Cypress公司的该系列电路所特定的请求和数据的传输。该GPD所提供的接口函数具有通用性,包括打开、关闭设备及USB的I/O操作等。本应用主要采用上述两类接口程序,在没有改变所提供的EZUSB.SYS的驱动程序的情况下,实现主机和外设的数据通信。
5 固件程序的编写
固件程序指的是需要下载到CY7C646xx内RAM中的8051程序代码和数据。需要完成的功能包括初始化CY7C646xx内部的所有用到的寄存器使之与外部电路相配合;对主机的USB标准请求的响应;CY7C646xx的电子仿真实际脱离与重新连接至USB接口的实现;设备休眠状态的启动和终止;完成读取OUT端点和转发至内部从属"写FIFO"及读取内部从属"读FIFO"的数据和转发至IN端点等功能。
该应用采用Keil51编译环境,用C语言完成固件源代码的编写。采用标准的结构框架,修改或者添加自己的代码,完成所需要的任务。
需要注意,如果开发者没有使用片外接存储器,需将Keil51编译环境的L51 Location选项中的Code(指令码部分)始于0x0080,而且xdata(数据部分)始于0xl000,以保证在同一个RAM中指令代码和数据不混迭。
6 计算机端应用程序的编写
应用程序与设备进行通信的通用函数包括打开关闭设备、传输数据等:
6.1 打开和关闭设备
该应用程序基于Ezusb.sys驱动程序,利用VisualC++针对该电路进行操作,完成数据的传输。
打开设备: HANDLE hDevice=CreateFile (DeviceName,
GENERIC_WRITEIGENERIC_READ,FILE_SHARE_WRITE︱FILE_SHARE_READ,
NULL,OPEN_EXISTING,0,NULL);
程序打开设备"DeviceName''的方式为通用读写方式,文件共享读写。
关闭设备:CloseHandle (hDevice)。
6.2 数据传输
其代码为BOOL bResult = DeviceloControl (hDevice,direction,Control,sizeof xxxx_TRANSFER_CONTROL),buffer,length, (unsigned long*)nBytes,NULL),其中,hDevice为设备句柄;direction为数据传输的方向;Control为4种USB数据传输的方式选择;size(xxxx_TRANSFER_CONTROL)为数据格式所需存储空间的大小;buffer为所传输数据的缓冲区地址指针;nBytes为传输完成后实际传输的数据个数:数据传输格式为USB设备的统一规范,可参照Windows DDK中的相应文件。
6.3 数据传输的通信协议
每个数据包由包头和数据或者只由包头组成,最大的数据长度为64字节,由于本应用所采用的该系列的80引脚的CY7C64603没有"数据空"对外标志,所以,外部电路读写逻辑每次渎写64字节。传输的字节不足64时由固件补零:·数据包格式如图3所示。
- 通用串行总线架构(USB)的目的主要基于以下三方面考虑(12-15)
- 通用串行总线(USB)电缆隔离器电路(12-15)
- 解决通用串行总线(USB)控制器有感叹号(12-14)
- USB通用串行总线内部结构解析(12-14)
- 基于ARM Cortex3的低功耗无源USB-CAN透明传输的实(10-08)
- USB数据通信接□模块的通用串行总线简介(10-17)