您的位置:首页 > 其它

USB固件程序设计初步

2010-01-02 18:05 176 查看
前阵子一直忙着复习考试,都没没有时间学习USB,还好,现在考完了,终于有时间了.好好学习我USB了.预计是先把固件程序用控制传输发送数据调试成功.然后在Linux下编写相应的USB驱动,先点亮LED灯.下面说说USB的固件程序是怎样设计的.

编程环境是:Keil51.板子是用CY7C68013A做的USB最小系统.下载软件是:CYconsole.


先说程序框架:在主函数中定义自己的设备请求号,在请求号中有相应的设备请求处理函数,在设备请求处理函数中可以对端点,进行设置.USB端点是最基本
的,端点的集合就是接口,而接口的集合就是配置.设备请求在固件程序中是被放在一个叫做SETUPDAT的八字节数组中的第2位,
即:SETUPDAT[1]中.驱动程序通过给该结构中发送设备请求来控制响应的USB设备.在USB固件程序的框架中通常是通过switch-case
语句来处理USB设备请求的.以下是一个定义一个数据发送和接收的设备请求,通过端点0以及使用控制传输方式通信:

#define SendData 0xB1

#define ReceiveData 0xB2

switch(SETUPDAT[1])

case SendData:

DR_Send();

case ReceiveData:

DR_Receive();

/*******************两个函数具体实现如下********************/

BOOL DR_Send(void)

{

EP0BUF[0]=0XB1; /*使用端点0来处理0xB1请求*/

EP0BCH=0;

EP0BCL=2; /*数据长度*/

EZUSB_Delay(100); /*延时,等待处理*/

OED=0XFF; /*将D端口设置为输出*/

IOD=EP0BUF[1]; /*EP0BUF是一个64B的寄存器,第一字节用于放请求码,其他位都放数据*/

EP0CS|=bmHSNAK; /*握手*/

return (TRUE);

}

BOOL DR_Receive(void)

{

EP0BUF[0]=0XB2;

EP0BCH=0;

EP0BCL=2;

EZUSB_Delay(100);

OED=0x00;

EP0BUF[1]=IOD;

EP0CS|=bmHSNAK;

return(TRUE);

}

编译生成.HEX文件,使用EZ_USB_Interface下载都USB 板子上,在相应的D端口插上LED灯,在控制台发送数据就可以查看固件程序了.固件程序通过后就可以编写驱动了.这里说的驱动是Linux下的驱动.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: