USB通信协议.doc

上传人:sk****8 文档编号:3535094 上传时间:2019-06-02 格式:DOC 页数:16 大小:100.50KB
下载 相关 举报
USB通信协议.doc_第1页
第1页 / 共16页
USB通信协议.doc_第2页
第2页 / 共16页
USB通信协议.doc_第3页
第3页 / 共16页
USB通信协议.doc_第4页
第4页 / 共16页
USB通信协议.doc_第5页
第5页 / 共16页
点击查看更多>>
资源描述

1、做了一段时间的 USB 方面的开发,虽然是现成的方案,我们只需要搞清楚它的架构,再添加我们的代码就行了。空闲之余,研究了一下 USB 通信过程,也把 82A851R 部分的汇编代码重新用 C 语言描述了一篇(仅是描述,不代表能真正运行) 。发现汇编代码条理性太在太差了,不好读。一把 C 语言的代码一写,马上觉得清楚很多。废话少说,开始贴图,贴代码。下面是将一些函数重新用 C 语言描述了一遍#define BYTE unsigned char/*/ 基本定义函数/*BYTE FIFO_RD_CHECK(BYTE num)BYTE FIFO_FLAG=0;UCC|=num;/选择 Endpoint

2、,0,1,2,3,4,MISC/低 3 位置 0MISC|=0X00;/TX 位置 0;Delay_3us();MISC|=0X01;/Set RequestDelay_28us();if(MISC/READYif(MISC/Len0 DetectedMISC/clear REQreturn FIFO_FLAG;BYTE FIFO_WR_CHECK(BYTE num)BYTE FIFO_FLAG=0;/后 4 位表示 Ready 位,前四位表示 Len0 位的状态是否有被设置UCC|=num;/选择 Endpoint,0,1,2,3,4,MISC/低 3 位置 0MISC|=0X02;/TX

3、位置 0;Delay_3us();MISC|=0X01;/Set RequestDelay_28us();if(MISC/READYif(MISC/Len0 DetectedMISC/clear REQreturn FIFO_FLAG;void Read_FIFO(BYTE *Fifo_Addr,BYTE Fifo_Size,BYTE *buffer)int i=0;MISC|=0x01;/Set Requestfor(i=0;idata_start0)/请求的数据超出 ROM 数据return;data_count=buffer6;if(MISCif(data_count=0)Send_Ha

4、nd_Shake();return; /开始真正的 control_readwhile(1)if(bFlag_RD_HTable=0)/Read Low BytebFlag_RD_HTable=1;bufferi=(BYTE )*rom_dataptr;/取其低位i+;data_count-;/全局变量,要发送的总长度if(data_count8;/取其高位rom_dataptr+;/将 ROM 指针前移if(bufferi=0x3f)continue;elsei+;if(data_count=0X81 0010 0000Bif(tempelse buffer0=0;buffer1=0;whi

5、le(1)if(Check_Real_Cmd()=TRUE) break;/估计是 Len0=1,结束会话if(FIFO_WR_CHECK(0)=FALSE) continue;Write_FIFO(Fifo_0_Addr,FIFO_SendLen,buffer);/*/ GetConfiguration(): 设置配置的函数 / /*void GetConfiguration(BYTE *buffer,BYTE USB_Configuration)BYTE FIFO_SendLen;buffer0=USB_Configuration;FIFO_SendLen=0x01;while(1)if(

6、Check_Real_Cmd()=TRUE) return;if(FIFO_WR_CHECK(0)Write_FIFO(Fifo_0_Addr,FIFO_SendLen,buffer);/*/ GetInterface(): 获取 Interface 接口的函数 / /*void GetInterface(BYTE USB_Interface_Alt,BYTE *buffer)BYTE FIFO_SendLen;buffer0=USB_Interface_Alt;FIFO_SendLen=0x01;while(1)if(Check_Real_Cmd()=TRUE) return;if(FIFO

7、_WR_CHECK(0)/Not ReadyWrite_FIFO(Fifo_0_Addr,FIFO_SendLen,buffer)/*/ SetReport(): 设置 Report 的函数 / /*BYTE SetReport(BYTE *buffer)BYTE FIFO_wValueH=buffer3;BYTE nCmdIndex1;if(FIFO_wValueH=0x02)/set_output_reportif(buffer4!=0x03)/check interfaceSTALL|=0x01;/ENPOINT0 Errorreturn;if(buffer6!=0x08)/FIFO_wLengthL,check lengthSTALL|=0x01;/ENPOINT0 Errorreturn;nCmdIndex1=0x21;return nCmdIndex1;/返回命令索引号

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 实用文档资料库 > 策划方案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。