本文由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的问题。