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所示。

责任编辑:gt

关于接口,总线,驱动就介绍完了,您有什么想法可以联系小编。