查看: 1494|回复: 0

STM32F746 DISCOVERY试用-USB存储

[复制链接]
  • TA的每日心情
    开心
    2020-11-27 08:26
  • 签到天数: 9 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2016-11-21 10:07:51 | 显示全部楼层 |阅读模式
    分享到:

    拿到板子一周了,终于有时间来整理一周来的学习情况。刚看到板子丰富的资源时,激动不已,那么就来细细研究吧。先来USB存储设备。
    准备CUBEMX(神器,开发STM32简直不要太方便,当然也支持其他芯片厂商的器件)、Keil MDK5。F746搭载了全速和高速两个USB接口,而且高速口外接了PHY,所以当然要试试高速了。打开CUBEMX,选择好器件。
    配置时钟。首先使能外部高速时钟源。

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

    打开USB_OTG_HS选择外部PHY Device Only,(注意根据电路原理图上的IO口管脚配置实际的IO口)

    在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的使用心得
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-11-19 14:43 , Processed in 0.137574 second(s), 18 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.