概述
本文主要是使用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
|