ZYNQ裸机实现 USB MASS STORAGE (usb+sd卡 实现U盘功能)

之所以写裸机,也就是没有操作系统的实现方法是因为linux系统下的实现方法网上已经有很多了,之前使用的STM32实现的USB MASS STORAGE的例子已经有很多,而且实现过程几乎不用写代码,使用官方工具便可实现,ZYNQ器件的例子网上却没有找到,自己实现后分享给大家,废话少说,开始吧!

一、先从原理开始吧,使用到了USB那就先介绍下USB吧,USB首先分为HOST(主设备)和Device(从设备)两大类,我们常常开发的小设备一般是属于Device类型的,Device设备可以实现很多不同的应用如下图所示:

具体细节可以在网站:Universal Serial Bus - Device Classes (liquisearch.com)查看,我们今天用到的便是Mass stroage,也就是大容量存储设备协议,详细内容可以看Universal Serial Bus Mass Storage Class,或者看下USB Mass Storage大容量存储的基本知识 - 程序员大本营 (pianshen.com)这篇大佬的博客,因为xilinx官方相关历程已经实现好了相关的协议解析和处理,这里不在赘述。

二、知道了大概的思路后我们就可以开始搭建硬件环境了,我们在Vivado中先实现zynq的配置,配置如下图所示:

这里给出了最重要的配置页面,我们要根据自己的硬件电路完成最基本的硬件配置,包括 QSPI FLASH USB SD UART完成基本的配置后,综合整个项目,生成BIT流,最后导出硬件完成硬件设计 ,这里对其他配置不做详细介绍,毕竟重点在软件部分(Vitis环境下),如有疑问欢迎交流。

三、完成了硬件导出后,如果不出意外,便可以创建Vitis项目,点击“platform.spr”文件,显示板级支持包界面后,点击“Peripheral Drivers”选项展开驱动历程列表,如下图所示:

在显示出来的列表中选择USB对用的历程生成Demo,如下图所示:

点击“import examples”生成Demo项目后,项目主要文件如下图所示:

这个历程已经实现了MASS STORAGE相关的协议,是用DDR模拟了一块存储卡,将该项目编译下载到硬件连接USB接口到电脑,便可以显示一个模拟U盘设备,这里的U盘容量是可以在代码中修改的,修改宏在xusbps_class_storage.h中的VFLASH_SIZE,在硬件不断电情况下可以实现U盘的基本操作,这里主要需要关注的内容是xusbps_class_storage.h 和xusbps_class_storage.c两个文件,因为USB MASS STORAGE协议解析和相关的存储器读写操作需要在这里实现。

四、从上面步骤来看,实际上我们已经实现了USB虚拟U盘的功能,只是现在的存储设备不是SD卡,最后一部就比较简单了,我们将DDR的读写操作该为SD的读写操作即可,当然在此之前不要忘记初始化SD卡的初始化操作,这里有一个关于速度的问题需要指出,最新版本的官方SD库文件是支持DMA的,最终实现的U盘速度会比较快,之前2019板Vitis的SD库还没有实现相关操作,可能需要自己修改,速度上会有一些影响。这里主要修改的代码在xusbps_class_storage.h 和xusbps_class_storage.c两个文件,相关代码我附在历程文件中,此处不再赘述,如有疑问,欢迎交流!

微信公众号:超级攻城狮

ZYNQ裸机实现 USB MASS STORAGE (usb+sd卡 实现U盘功能)相关推荐

  1. 如何实现Linux下的U盘(USB Mass Storage)驱动

    如何实现Linux下的U盘(USB Mass Storage)驱动 版本:v0.7 How to Write LinuxUSB MSC (Mass Storage Class) Driver Crif ...

  2. Linux下大容量存储,第 2 章 USB Mass Storage大容量存储的基本知识

    第 2 章 USB Mass Storage大容量存储的基本知识 摘要 USB Mass Storage所对应的层次和要实现哪些东西: 图 2.1. USB Mass Storage Framewor ...

  3. USB Mass Storage大容量存储 The Thirteen Class章节的理解

    http://blog.csdn.net/xgbing/article/details/7002558 USB Mass Storage 6.7 The Thirteen Class章节的理解 Cas ...

  4. 基于OHCI的USB主机 —— UFI命令 USB Mass Storage Class Bulk-Only Transport协议介绍

    USB Mass Storage Class Bulk-Only Transport Microsoft公司至Windows98后,USB主机 都支持Bulk-Only标准,所以现在的大容量存储类设备 ...

  5. USB Mass Storage协议

    简介 USB Mass storage Device协议即海量存储设备协议适用于硬盘,U盘等大容量存储设备.协议使用的接口端点有BulkIn.BulkOut和Interrupt端点.该设备类又包含6个 ...

  6. usb mass storage设备枚举过程

    8月份从PC开发岗位换到底层嵌入式驱动开发来了.接到的第二个活,是在高通8650平台上实现驻留支持SCSI指令.8650平台是高通推出的EVDO RevB的双核平台,和之前6085相比性能更强,软件结 ...

  7. 2. STM32F4 USB协议研究 - SD卡模拟U盘

    有用的函数 串口打印 #include "stdarg.h"int USART1Printf(const char* format, ...) {static char sendB ...

  8. STM32CubeMX学习笔记(49)——USB接口使用(MSC基于SD卡模拟U盘)

    一.USB简介 USB(Universal Serial BUS)通用串行总线,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯.是应用在 PC 领域的接口技术.USB 接口支持设备的即插即用和 ...

  9. Android区分SD卡和U盘

    写过这个功能的童鞋应该很理解我,当初找了大量的资料也只能做到在两者都插入时分辨出哪个是哪个,只插入其中一方,则一脸无奈,当初我甚至在界面上写"检测U盘或SD卡插入,总容量为xx,可用容量为x ...

最新文章

  1. Angular1.x的自定义指令directive参数配置详细说明
  2. WCF学习笔记(基于REST规则方式)
  3. 《Linux总线、设备与驱动》USB设备发现机制
  4. [C++]VisualAssistX中文注释提示错误 解决办法
  5. MVC 事物同时保存,更新数据库
  6. 宏观相似性与惯性质量
  7. python进阶教程day_python从零进阶之路——day4
  8. 【数学题】男女的比例
  9. 【script】python使用pymssql模块访问SQL Server(Mssql)
  10. 贵州省NPP净初级生产力数据/NDVI数据
  11. 命名实体识别NER:LSTM-CRF模型
  12. frp内网穿透并实现开机自启动
  13. 简单的安卓网络音乐视频播放器app
  14. 安装了两种oracle数据库怎么卸载,oracle数据库卸载步骤
  15. Android----banner使用详解
  16. js汉字转拼音包——pinyin-pro
  17. 冬天到了,女朋友想让我的网站也下雪,我立马打开电脑撸代码…
  18. 特征图谱字典_空间数据图谱为特征
  19. SpringBoot基于websocket的网页聊天
  20. 看Salesforce的“云计算”平台

热门文章

  1. 第25章 认识更多Spring MVC家族成员(一)
  2. 国内权益标收益率的“尖峰厚尾”现象研究
  3. c语言编程斐波那契前n项,c语言:写一个函数,输入n,求斐波拉契数列的第n项(5种方法,层层优化)...
  4. 2021校招京东物流新锐之星校招笔试面试总结
  5. 2021年秋季PAT乙级题解(C语言)
  6. 面经九2023.2.3上午笔试和群面
  7. 很有仙气超有创意的单网页视差效果直接可以使用id1091
  8. 一幅长文细学华为MRS大数据开发(二)——HDFS分布式文件系统和ZooKeeper
  9. 苹果手机微信语音没声音怎么回事_iphonexs没声音,iphonexs扬声器没声怎么回事?...
  10. GPU内存分明没人占用但是分配不了内存的解决办法