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下的驱动.
编程环境是: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下的驱动.
相关文章推荐
- 【转】【学】采用PDIUSBD12的USB系统固件程序设计
- 采用PDIUSBD12的USB系统固件程序设计
- 《C语言及程序设计初步》第33讲实践项目
- 老毛子固件路由器挂载usb摄像头
- 【转贴】Lua 程序设计初步
- Windows 的多线程程序设计初步
- C语言基础教程(六)Turbo C 程序设计初步
- Win32位程序设计初步之网络通信
- [转载]USB固件的执行过程
- Win32位程序设计初步之服务
- Java GUI程序设计的初步上
- stm32通过usb下载固件
- 2017-2018-1 20155235 20155211 验二 固件程序设计
- 20155214&20155216 实验二:固件程序设计
- 2017-2018-1 20155202 20155239 实验二 固件程序设计
- 2017-2018-1 20155311 20155305实验二 固件程序设计
- 2017-2018-1 20155217 20155236实验二 固件程序设计
- 2017-2018-1 20155202 20155239 实验二 固件程序设计
- 基本固件框架的追踪研读之USB控制传输
- USB固件开发总结(二)