关于程序员:STM32-USB高速USB端口加持4G联网

5次阅读

共计 1318 个字符,预计需要花费 4 分钟才能阅读完成。

本文由 RT-Thread 论坛用户 @fhqmcu 原创公布:https://club.rt-thread.org/ask/article/8fc0968257c2ca01.html

1、前言

对于 STM32F4USB 驱动程序(FULL SPEED)目前是能够用,然而有很多问题,比方 NAK 的问题,导致 U 盘读写出错。USB 底层驱动程序中进行 OUT 传输时必须减少一个 1ms 延时的问题。等等储多问题。本文高速 USB 的驱动程序参考了网友 @sakumisu 的文章:基于 CherryUSB 调试 dwc2 usb host 笔记,感激他在 USB 方面做出的钻研与调试。

2、STM32 高速 USB 的调试

STM32 高还 USB 能够应用外部 DMA 来进行 USB 的数据包的传输,会大减少 USB 通信的速度,同时能够解决应用 FULL SPEED 过程中遇到的各种问题,因而花工夫来批改 STM32F 的 USB 驱动程序,把 USB RNDIS 设施驱动更换到高速 USB 接口,代码的批改的几个方面如下:

2.1. 应用高速 USB 接口要更换 USB 的 IO 管脚,大家所熟知的 PA10, PA11 只能用于全速 USB,换成高速 USB 后要应用 PB14, PB15 管脚本,程序做如下初始化。


调试程序时,总想着这中央简略,不会搞错,后果 USB 驱动局部程序改好了后,怎么调试都无奈进入 USB 中断,最初查看到这里是 USB 高速管脚配置成 GPIO_InitStruct.Alternate = GPIO_AF10_OTG_HS 导致的,批改这部分代码时没有查看手册,依据 GPIO_AF10_OTG_FS 的宏定义查看到有 GPIO_AF10_OTG_HS 定义,就间接改了导致的。看来总在小河沟里翻船呀,总以为这里简略,不会出错。后果因为 IO 的配置的问题曾经遇到了 2 次了,上一次是调试 SPI2 驱动程序,批改 IO 看手册,看手册。
2.2 USB 驱动程序的批改
USB 驱动程序的批改,次要批改了操作系统设施驱动程序接口 drv_usbh.c 文件,在这个文件中对 USB 驱动应用全速 USB 与高速 USB 全副做了初始化,采纳宏定义 DRV_USBH_USE_HS 来进行切换。此宏定义能够在 rtconfig.h 中减少,定义此宏示意应用高速 USB,不定义应用全速 USB。代码很多,请参考博客前面的 git 仓库链接。

STM32F 低层 USB 驱动程序的改良,改良时兼容原来全速 USB 的性能。具体的改良点如下:

1、应用高速 USB 时,须要关上 DMA 设置。

2、应用高速 USB 时,须要敞开 NAK 中断,如果不关 NAK 中断会调程序调到你狐疑人生。

3、驱动程序应用高速 USB 端口,理论工作在全速的模式。

4、应用时留神硬件管脚的变动,能够间接采纳跳线连贯 USB 口到 PB14, PB15 下面。

3、代码仓库

下面所做的高速 USB 的驱动程序的优化曾经上传到 GIT 仓库下面。参见版本标签 V1.2
STM32 USB HOST 驱动 4G 网卡
https://github.com/longtengmc…

4、性能晋升

采纳 FTP 下载文件并且写入到 FLASH 中的测试形式,下载一个 310Kbyte 文件,应用全速 USB 时下载工夫为 10 秒,应用高速 USB 时下载工夫约 7 秒。最要害的时解决了全速 USB 驱动设施时各种返回 NAK 的问题。

正文完
 0