打印
[AT32A403A]

AT32F403A基于V2库 usb msc 虚拟磁盘

[复制链接]
431|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2023-10-17 14:27 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
概述
         本文主要是使用AT32F403A开发板,基于V2库实现实现usb msc虚拟磁盘功能,并把sd卡、内部存储、spi flash作为存储。

         串口工具使用的Atlink-ez自带的串口功能。

         工程建立、调试工具配置在前面章节有详细介绍。

硬件
         硬件方面使用的是参考官方AT32F437 SURF板子而设计的一个AT32F403A开发板,板子上的芯片是AT32F403AVGT7的型号,开发板上面还板载了一个atlink-ez的仿真器,atlink-ez除了可以在线仿真和下载之外还有一个串口的功能,硬件上是通过跳线帽接到了MCU的串口1,pa9/10上面。

        如下图是开发板pcb图,以及硬件资源。(左边上角的就是atlink-ez,用usb线接到pc即可):



         如下为实物图:



         本章是usb msc虚拟磁盘的测试,使用sd卡、spi flash、内部flash作为存储,实现虚拟三个磁盘。Sd卡、spi flash使用前面的篇章的驱动和硬件设计。

软件
        本文是使用usb实现的虚拟磁盘的功能,使用sd卡、spi flash、内部flash作为存储,这三个的驱动和硬件直接使用的前面的篇章,需要的可以去找对应文章。然后usb虚拟磁盘部分则是使用的bsp里面的msc的demo,然后基于这个demo来修改,实现虚拟出是三个磁盘。

         这里我们就不需要去修改class文件以及设备描述符这些的了,我们最主要的修改是添加底层的读写到磁盘的读写里面。最主要的就是必须先保证sd卡、spi flash、内部flash的读写都是正常的,不然添加到磁盘的底层读写后,也不能正常工作,这个我们在前面都测试过了都是正常的。

建立新工程:
      新建立一个工程,添加usb 核心库源码和把msc 中的desc和class源码以及msc_bot_scsi.c/.h,msc_diskio.c/.h复制到项目文件中,再都添加到keil工程里面,并把main中的相关函数复制到新工程的main里面,同时把sd卡、spi flash、内部flash的驱动文件都添加到工程里面,最后添加所需要的外设的库文件。(对应文件都可以在bsp里面获取)

        如下图:



时钟注意点   
        USBFS 48M 时钟有两种配置来源:一种是使用内部的48M高速时钟,一种是使用ppl的分频,当使用ppl的分频的时候,系统的时钟一定是48M的整数倍,这样才能分出48M给usb使用,所以使用usb并且ppl提供usb时钟的时候,系统时钟最高是192M的主频。通过void usb_clock48m_select(usb_clk48_s clk_s)来设置即可。

        本文使用内部his提供usb时钟,系统主频跑240M。

设定磁盘个数:
         #define MSC_SUPPORT_MAX_LUN              3

设定磁盘序号、内部flash存储起始地址:
        起始地址为0x0800c800,也就是0xc800/1024=50,也就是50k地址往后都用来存储数据。



修改msc_diskio:
        磁盘读函数


        磁盘写函数


        磁盘容量函数


测试
        测试代码
        程序,先初始化spi flash和sd卡,通过log来看是否成功。最后对usb进行初始化,当usb连接没断开,则翻转LED_G。



        测试结果
        在我的电脑里面可以看到磁盘,并且测试可以进行读写,开发板LED亮绿光并翻转。测试通过。




————————————————
版权声明:本文为CSDN博主「qi_feng_le」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qi_feng_le/article/details/132170715

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1374

主题

14048

帖子

8

粉丝