完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
关于USB的知识总结
协议版本 USB 协议版本有USB1.1、USB2.0,而目前公布的最新USB协议USB3.0,主要由于数据线的增加USB3.0 数据传输速度有了很大的提高。对于 USB1.1 协议支持低速模式(1.5Mb/s)、 全速模式(12Mb/s),而 USB2.0协议还支持高速模式(480Mb/s)。不同的器件对 USB 协议的支持是不一样的。而我们应用的STM32的USB协议的解释都是基于USB2.0全速模式的。 2、USB线缆 USB线缆中的四个金属触点对应的导线V BUS为5V电源线,GND为电源地线,而D-和D+ 组合成一组差分数据线。D-和D+这一组差分数据线,在一个时刻只能传输一路信号,这也决定了USB2.0的全速模式只能是半双工的通讯方式。 注:在 USB 主机上,D-和 D+都是接了 15K 的电阻到低的,所以在没有设备接入的时候,D+、D-均是低电平。而在 USB 设备中,如果是高速设备,则会在 D+上接一个 1.5K 的电阻到 VCC,而如果是低速设备,则会在 D-上接一个 1.5K 的电阻到 VCC。 3、USB主机与设备 在 USB 的通讯模型中要严格区分USB主机(Host)与USB设备(Device) ,因为在USB的通讯中,有且只有一个主机。当检测到有 USB 设备接入时,首先由主机发起第一次通讯。 一个 USB 主控器同时最多可支持127个设备,这是由于USB协议中规定USB设备接入后,主控器会给它分配一个 7 位的设备地址,以后就使用该地址进行通讯,所以使用 USB 集线器能扩展接口,但无法扩展主控器可支持设备数目的上限。 注:STM32F103系列芯片的USB控制器外设仅可以作为USB设备的控制器,而不能用于USB主机控制器。在STM32F105、STM32F107系列芯片中的 USB 控制器称为“USB OTG全速控制器(OTG FS)”,它带有OTG(on the go)功能。OTG是 USB2.0协议中规定的双重角色功能,这种控制器仅可作为USB 的主机端,也可以作为 USB 通讯中的设备端。 4、USB传输类型 控制传输类型(Control Transfers):突发、非周期的传输,主要用于传输命令和状态消息。端点0一般就被配置为控制传输。 同步传输类型(Isochronous Transfers):周期性、持续的传输,常用于与时间相关的事件、信息的传送。例如音频设备中的音频数据。 中断传输类型(Interrupt Transfers):传输频率低、数据量小的传输。如鼠标、键盘设备的控制信息。 批量传输类型(Bulk Transfers):非周期性的,大数据量的传输。例如如 USB 存储器。 5、USB枚举 (1) 为了获得设备描述符,主机首先使用地址0,向接入的设备发送 USB 标准请求:Get Device Descriptor(获取设备描述符)。正常时,设备会给主机返回它自己的设备描述符,但由于第一次通讯不知道端点0支持数据包的最大长度,所以主机只能通过设备描述符中的第8个字节了解设备端点0的最大数据包长度,这8个字节以外的信息还没法了解。 (2) 主机为设备分配一个新地址,把这个地址存放到标准请求Set Address(设置地址)中,发送这个请求给设备,设备保存该地址,以后的通讯就使用这个新地址。 (3) 主机重新向设备发送Get Device Descriptor(获取设备描述符) 请求,这次主机会完全读取设备返回的设备描述符,了解设备的信息。 (4) 主机向循环设备发送Get Device Configuration(获取配置描述符)请求,获得设备的配置描述符、接口描述符、类特殊描述符、端点描述符。 (5) 主机发送Get Device String(描述字符集) 获取厂商 ID、产品描述、型号等信息。 (6) 若 USB 能提供该设备的驱动,主机向设备发送Set Configuration(选择设备配置)请求设备进入某个配置状态。 (7) 建立通讯。 6、USB固件库说明 注:1-3属于底层文件,4-6属于中层文件,这些文件用户是不需要进行改动的。在不同的 USB 应用中,用户可能需要对 USB 固件库的上层部分文件配置进行修改(主要为 u***_prop.c和 u***_endp.c文件)。 (1)u***_int.c,本文件包含两个中断服务函数 CTR_LP()和 CTR_HP(),在接收发送中断时使用这两个函数进行处理,这两个函数主要又调用各个 USB 端点的处理函数,端点处理函数由用户根据自己的需要自定义。 (2)u***_regs.c,本文件是硬件抽象层。它含有各种用于读取或设置 USB 寄存器的函数,相当于对寄存器操作方法的封装。 (3)u***_mem.c,本文件主要负责进行数据传输处理。它的函数主要负责数据在用户区域(内存)或 USB 数据包缓冲区的互相转移。 (4)u***_core.c,本文件主要负责 USB 协议管理,如 USB 标准请求、各种端点 0 的控制信息处理。 (5)u***_init.c,本文件主要包含了 USB 初始化的函数。 (6)u***_sil.c,本文件包含精简接口的初始化或向端点读写的操作函数。 (7)u***_pwr.c,该文件中包含处理上电、调电、挂起和恢复事件的函数。 (8)u***_istr.c,该文件中只有一个函数,即 USB 中断的 USB_Istr 函数,该函数对各类引起 USB 中断的事件作轮询处理。 (9)hw_config.c(u***_conf.c),该文件中包含系统配置的函数,包含基本的时钟配置、中断配置和存储器初始化函数。 (10)u***_desc.c,该文件包含一些与 USB 相关的设备描述符、配置描述符等,以数组形式存储,在 USB 主机请求的时候,这些信息会发送给主机。 (11)u***_prop.c,该文件用于实现相关设备的 USB 协议,例如初始化、SETUP 包、IN包、OUT 包等等。 (12)u***_endp.c,本文件包含端点收、发送的处理函数,由用户根据不同的 USB 设备进行不同的定义。 图表 1 USB固件库文件关系图 7、USB时钟 调用库函数RCC_USBCLKConfig()把 USB 的时钟预分频设置为 1.5,USB的时钟是由PLLCLK分频得来的,我们实验配置的PLLCLK为72MHz,1.5分频后正好为 48MHz 作为 USB 外设的时钟。调用 RCC_APB1PeriphClockCmd()函数使能 USB 外设的时钟,这时 USB 外设就运行起来了。 8、USB 的中断映射单元 1、USB 低优先级中断(通道 20):可由所有 USB 事件触发(正确传输,USB 复位等)。固件在处理中断前应当首先确定中断源。 2、USB 高优先级中断(通道 19):仅能由同步和双缓冲批量传输的正确传输事件触发,目的是保证最大的传输速率。 3、USB 唤醒中断(通道 42):由 USB 挂起模式的唤醒事件触发。 图表 2 USB设备框图 9、BOT协议 BOT (Bulk Only Transport),译为仅批量传输协议,它是 USB 的子类协议。它只使用USB 传输模式中的批量传输通道进行命令、状态、数据的传输,没有中断和控制通道。建立了传输后(即枚举后),默认的端点 0 只用于清除批量管道的状态和发送 Mass Storage 复位、Get Max Lun 这两个请求。 在 BOT 协议中使用 CBW 格式发送命令,用 CSW 格式发送命令状态。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1754 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1613 浏览 1 评论
1053 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
721 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1667 浏览 2 评论
1930浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
716浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
562浏览 3评论
587浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
544浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-19 09:42 , Processed in 1.186024 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号