A-A+

STM32F746 DISCOVERY试用-USB存储

2016年11月23日 电子世界 暂无评论

拿到板子一周了,终于有时间来整理一周来的学习情况。刚看到板子丰富的资源时,激动不已,那么就来细细研究吧。先来USB存储设备。

准备CUBEMX(神器,开发STM32简直不要太方便,当然也支持其他芯片厂商的器件)、Keil MDK5。F746搭载了全速和高速两个USB接口,而且高速口外接了PHY,所以当然要试试高速了。打开CUBEMX,选择好器件。

配置时钟。首先使能外部高速时钟源。

点击Clock Configuration进入生成时钟配置方案,这步在使用103和407的时候没遇到过问题,F746的时候自动计算解决方案时会出错,导致最终计算结果不正确,这时候可以手动输入某些参数,最终配置结果如下:

打开USB_OTG_HS选择外部PHY Device>

在USB_DEVICE项中选择Mass Storage Class。

板子带有SD卡槽,自然是选择SD卡作为存储设备,点击SDMMC1激活SD卡,此处选择4bits总线宽度。

以上4步配置完需要的外设,接下来就是对外设的中断,参数类数据进行配置。

进入Configuration。先对SD卡的读写方式配置,为了速度更快,我选择DMA方式。

中断配置,中断分组根据自己需要选择

这里需要开启SDMMC中断后DMA才能正常工作,SDMMC中断优先级设置为比DMA高,USB中断比以上两个中断优先级低,并且响应式优先级设置为如图的高低顺序(数值可根据自己的分组调整,这段是参见官方给的程序设定)。

以上各步完成就可以生成代码了,注意生成工程代码前将堆、栈大小设置的大一点,因为HAL库的USB数据是在堆空间分配的,如果设置太小,USB的数据包大小是有限制的。生成工程根据自己的开发环境选择,MDK或者IAR。

打开工程,需要修改部分程序。第一处在MX_SDMMC1_SD_Init(void)末尾,缺少SD的初始化函数,加入HAL_SD_Init(&hsd1, &SDCardInfo1);该函数在初始化完会返回当前SD卡的参数,这些参数会在USB读写的接口函数中用到。那么接下来继续修改。打开usbd_storage_if.c里面是对sd卡读写的底层函数,第一个获取容量大小的函数,修改为:

读取函数

写入函数

修改到此,usb基本就可以用了,但是可能会发现写入的速度很慢,别急,前面说了,是你设置的数据包大小不够。找到usbd_confi.h文件,在宏定义里有个MSC_MEDIA_PACKET,将后面的数值改大,测试改到10K,传输速度能到2MB/s但是再继续增加数据包大小,速度并没有明显提升,一直在2MB/s左右(有清除的同志们可以分享下你的见解)

USB的问题就是到了2MB/s就不会有明显的提升了,我觉得480Mb/s的速度怎么也不止2MB/s。希望知道原因的同仁们告知。USB的问题就到这,后面分享SDRAM和LTDC的使用心得

标签:

Copyright © E网新时代 保留所有权利.   Theme  Ality站点地图
查询次数: 23
粤ICP备14073293号-1

用户登录

分享到: