下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1/ 8对USB的初步了解:1、USB 的优点:可以热插拔,即插上后可以自动识别;系统总线供电,USB 共有四根线,一根电源线,一根地线,一根 D+线,一 根D-线,D+和 D-线是差分输入线;可以支持多种设备,且扩展容易,通过 HUB 可以再一个主机上连接多个设 备传输数据的速度快,最快可达 480Mbit/s方便的设备互联:在没有主机的情况下,实现点到点的通信(还可以实现主从互换) ( U S BOTG)2、USB 的基本规范:USB1. 0/1. 1 低速情况下1. 5Mbit/s :键盘、鼠标等全速情况下 12Mbit/s :U 盘、 CD-ROMUSB2. 0 高速达到 480Mbi
2、t/s :音频设备、显示器等USB OTG 设备到设备的传输3、USB 设备类规范:2/ 8大容量存储设备类(Mass Storage Device U 盘、CD-ROM 等人机交互设备类(Human In terface Device)键盘、鼠标、游戏手柄语音设备类(Audio Device)麦克风、音响等通信设备类(Communication Device)电话、调制解调器等打印机设备类(Printer Device)打印机监视设备类(Monitor Device)显示器、摄像头等4、USB 逻辑上分为 3:信号层,协议层,数据传输层协议层:包是 USB 系统中信息传输的基本单位,所有的数
3、据都是经过打包后在总线 上传输的。包由 6 部分组成:同步字段(SYNC ;包标识符(PID);地址字段(ADDR ;数据字段 (DATA);检验字段(CRC ;包结束(EOP包标识符( PID :令牌包( Token (输出,输入,帧起始,建立 ,数据包( DATA (数 据,数据 1 ,握手包( Handsnake (确认,不确认,停止 ,专用包 (Special (前同步5、USB 协议提供 4 种数据传输方式:控制传输:突发,非周期性,由主机发起,用于命令和状态的传输同步传输:周期性,持续性的传输,用于传输与时效相关的信息,并且在数据中保存 时间戳的信息中断传输:3/ 8周期性,低频率
4、,允许有限延迟的通信大容量的数据传输:非周期性,大容量突发数据的通信6、USB 描述符:1) 设备描述符:描述设备的类型、厂商信息、USB 的协议类型、端点的报数据的最大长度 等,每个 USB 设备只有一个 Device Descriptor2) 配置描述符:每个配置描述符提供了设备特定的配置,描述了设备的接口和端点的性 质、供电模式、设备的耗电3) 接口描述符:描述了设备的不同接口的特性,例如,一个设备 U 盘的功能,又有键盘的 功能,用两个接口描述符分别描述两个功能4) 字符串描述符:描述了设备制造商、设备名称、何序列号等信息基于 STM32 制作 USB 的过程STM32 的 USB 模
5、块特性:遵循 USB8。 4/ 82. 0 全速设备标准支持双向 8 个端点, 8 个 IN 端点和 8 个 OUT 端点(每个端点最大可使用 512字节) 每个端点都有一个缓冲区描述块,描述该端点使用的缓冲区地址、 大小和需要传输的字节数 硬件实现 CRC 自动生成/校验,NRZI 编码/解码和 bit-stuffing(位插入,位填 充)支持控制传输、中断传输、大容量传输和同步传输四种传输方式支持 USB 的挂起和/唤醒*USB 设备的实现过程 *一、系统初始化1、初始化系统时钟,设置 USB 时钟2、配置 USB 中断,选择通道,设置优先级,使能中断3、配置 GPIO4、USB 的初始化
6、,对描述符、设备的端点接口等的初始化5、FLASH 勺初始化二、USB 的枚举枚举过程就相当于主机和设备建立连接的过程(接头),Host 向 Device 询问一些东西,Device 将自身的设备类型,如何进行通信报告给 Host,这样, Host就知道怎么对 Device 进行操作。在枚举过程中就是如何处理好 SETUP 事件,如果 STM32 USB 接收到正确的SETUP 事件,将响应函数 CTR_SETUPQ()此事件是特殊的 OUT 事件,数据方向Host-Device, SETUP 事件数据长度固定为1、在 USB 插入主机时,主机首先需要先对 USB 设备进行供电2、接着 USB
7、 总线复位:5/ 8设置分组缓冲区描述表起始地址;初始化端点 0,设置发送和接收状态。默认所有的设备地址和端口地址都会 初始化为0.3、USB 主机往端点 0 的 0 地址位置发送获取设备描述符的请求。/* 发送请求属于控制传输的建立过程,控制传输包括建立过程,可选数据 过程及状态过程, 首先是主机发送一个令牌, 其次是发送的数据, 最后设备回 应一个应答 (握手包) */4、获取设备描述符信息 设备在接收到请求以后,首先需要对主机发送来的命令进行解析,并将要发送给主机的描述符信息填入 USB 缓冲区中,等待 USB 主机发送 IN 命令,主机 在接收到设备发送来的 ACK 回应以后,发送 I
8、N 令牌包,从而进入到数据过程, 之前存储在 USB 缓冲区中的描述符信息发给主机,并等待主机的应答。主机在 正确接收到设备描述符的信息时会返回一个确认信息。5、主机给设备分配一个新的地址 该阶段是一个没有数据过程的控制传输。首先,在建立过程中主机往设备的端点 0 发送一个设备地址的请求,新地址在建立过程的数据包中。在建立过 程之后直接进入到状态过程,在状态过程中,设备等待主机发送一个IN 令牌包,收到 IN 令牌包后,设备就会返回一个数据包,如果主机确认该数据包正确 接收,就会回应设备一个 ACK 设备收到 ACK 之后启用新的设备地址6、 主机重新获取设备描述符,配置描述符和字符串描述符(
9、如果是HID 还要获取报告描述符等)至此 USB 的枚举过程完成,主机可以根据枚举的过程了解到的设备信息对 USB安装驱动程序,并对 USB 进行操作。三、对程序的分析1、 在 Set_System ()中首先配置了 RCC 时钟,在设置并开启 USB 的时钟6/ 8RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5);RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE);2、 对 USB 的引脚的设置,主要设置上拉电阻,对于此 STM32 板子而言是 设置 PC13 为开漏输出(GPIO_Mode_Ou
10、t_OD3、USB 中断的设置,设置了 USB_LP_CAN_RXO_IRQChanr 中断,因为在USB 传输的过程中使用的是控制传输过程4、最后对 USB 的初始化, 初始化 USB 的控制状态为 IN_DATA 状态, 对一 些需要使用的指针的初始化,包括设备信息,设备标准请求,设备的支持等的 初始化,供枚举过程的使用至此,对于 USB 设备的初始化过程已经完成,接下来进行 USB 的主要程序 部分,也就是枚举过程。插上 USB 之后首先会进入中断过程,执行 USB_lst()函数中的操作,逐 步进入枚举过程,接下来从中断操作开始分析1、进入中断执行 USB_lst()函数后,首先获得中
11、断的状态,因为在初始 化阶段,首先先对 USB 进行了复位操作,所以直接可以进入Device_Property .R eset(函数进行复位操作。得到 USB 的各类描述符值,设置报表地址为 0 x00,端点地址为 0 x00,又对 USB的端点 0 和端点 1 的进行了初始化设置/*在 usb_prop.c 文件中*/2、因为在USB枚举的阶段是通过控制传输的传输过程来实现的, 所以数据 的发送接收,通过 CTR_LP()中断进入的在这个函数中等待中断状态设置好,并且数据发送正确。然后检查是不是 端点 0的收发数据,因为在一开始枚举阶段首先是通过端点 0 来接收主机发来 的数据,所以直接进入
12、端点 0 的函数中 if (EPindex = 0)等地啊主机的 IN 命令 if (wlstr &ISTR_DIR) = 0)接着进入 In0_Process()函数往主机中发送数据。进入 In0_Process(函数以后首先要判断控制状态是 IN_DATA、LAST_IN_DAT7/ 8A、WAIT_STATUS_I 中的哪一个或者都不是。等待数据的发送,假设是 IN_DATA 或 LAST_IN_DATA 则进入数据发送阶段DataStageIn ()函数,主要是发送开始存入缓存区中的数据,以描述符为主, 发送给主机。3、 在主机接收到 USB 发送来的数据之后,主机会重新给 U
13、SB 分配新地址, 这是进入中断在轮询时会检测到(wEPVal&EP_CTR_RX)!=进入到 USB 的接收状 态,接着会执行 Out0_Process()的主机输出,USB 接收状态。此数据输出主机的 过程与上面数据输入主机的过程相类似。也会初始化数据包长,并根据数据长 度来进行数据的接收状态。数据从主机 SB 和数据从 USB 写入主机主要由 UserToPMABufferCopy()MAToUserBufferCopy ()两个函数来完成4、接下来主机会以分配给 USB 的新地址来与 USB 进行数据通信。通信过程与之前相类似,只是不再使用端点 0,而是使用新地址,非 0 端点
14、的处理。接下来说一下 USB 不同的 c 文件的功能:Usb_core.c 枚举过程重要的函数在此列出,包括数据输出主机的函数DataStageOut ()数据输入主机的函数 DataStageI n(),非 0 数据包的建立Data_Setup0 (), 0 数据包的建立 NoData_Setup0 (),还有主机发送的 IN 进 程In0_Process(,主机发送的 Out 进程 Out0_Process ()。还有一些标准的配置 函数,接口设置函数等等。Usb_init.c 这个 c 文件中只包含一个主要的函数 USB_Init(,这里主要是对在usb_core.c 中使用的重要指针的
15、初始化,包括 pinformation, pProperty 和pUser_Standard_RequestS 这三个指针,另外就是在初始化状态时已经将 usb 的控制状态设置为 IN_DATA 状态。并将 USB 初始化为初始配置,上电,开始设备 的状态为未连接状态等Usb_int.c 包含两个主要函数 CTR_HP()和 CTR_LPQCTR_HP()用于处理 高优先级中断,用于同步传输模式和批量模式(双缓冲区),CTR_L(P )用于处理低优先级中断,用于控制传输,中断传输和批量传输(单缓冲区)。8/ 8Usb_mem.c 包含两个函数 PMAToUserBufferCopy ()和UserToPMABufferCopy(),是将 PMA 缓冲区的数据传给用户,和将用户缓冲 区数据传给 PMA 缓冲区的主要数据传输过程。Usb_regs.c 主要是调用宏,实现寄存器的操作,但是上层函数很少调用这些 函数直接就是用宏。Usb_pwr.c 主要是包括对一些电源的配置,包括 USB 上电 PowerOn (), USB断电 PowerOff(),挂起函数 Suspend (),处理唤醒恢复操作 Resumenit (),状态机处理和恢复函数 Resume()Usb_desc.c 主要是对描述符的定义,有 CustomHID_D
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2027年咸宁市高三二诊模拟考试物理试卷(含答案解析)
- 2027届焦作市高三下第一次测试物理试题(含答案解析)
- 盛夏农药喷施安全操作课件
- 2026年北师大版小学三年级数学上册第六单元《乘法》评价方案教案
- 妊娠期高血压疾病的护理
- 广东省广州市白云区2024-2025学年九年级上学期期末历史试题(含答案)
- 新生儿脑出血外科治疗
- 数据基础及结构 2
- LED显示屏安装工程基本培训
- IPAD指南解读之镇静剂选择
- 2026年水利工程安全与质量控制题库及答案
- 霍尼韦尔Forge平台战略竞争力分析市场调研报告
- 雨课堂学堂在线学堂云《人工智能与创新(南开)》单元测试考核答案
- 2026上半年四川成都职业技术学院编制外(考试)招聘30人笔试参考试题及答案解析
- GA/T 2336-2025法医临床学人体体表损伤检验规范
- 2025年汇能控股集团有限公司卓正煤化工招聘144人备考题库及一套参考答案详解
- 建筑修缮考试题库及答案
- 湖北邮政集团招聘笔试题库2026
- 孕期检查注意事项课件
- 无人机测绘操控员岗前评优竞赛考核试卷含答案
- 2025年山西二级造价师土建工程真题及答案解析
评论
0/150
提交评论