文章目录

  • 一、SDIO+DMA方案
    • 1.1、目标与初衷
    • 1.2、过程与成果
      • 1.2.1、平台测试
  • 二、SPI+FIFO方案
    • 2.1、目标和初衷
    • 2.2、过程与成果
      • 2.2.1、测试平台
  • 参考

一、SDIO+DMA方案

1.1、目标与初衷

最初的设计追求最大化传输速度的SD卡控制器,保证能够在读取SD卡上的高码率视频数据实现流畅的传输。

  1. 阻塞的SDIO的读写速度远远慢于AHB总线的传输速度,不能发挥AHB的传输优势
  2. 在FreeRTOS上进行长时间的阻塞的数据等待并不合适,对于低速的IO操作可以配合中断的方式,实现异步的IO任务调度:SD卡控制器使用DMA+中断,在传输完成时使用使用中断通知FreeRTOS的任务,能够有效提升CPU效率和系统实时性。
  3. SDIO速度快于SPI传输,带宽更大,需要自接额外的SDIO模块。

由于AHB3-Lite缺少Arbiter,一个AHB总线上不支持多个AHB Master(主机)和AHB Matrix矩阵的方式,只能通过一个双口RAM来实现DMA的方式传输数据。好在pango的DDR提供了一个额外的AHB接口用于操作内存,所以这种方式是可行的。

  • 初始化

将CMD命令、CMD参数写入到SD-Card Controller寄存器,在操作完成后会产生一个中断信号给CPU,可以在结果寄存器中读取SD对CMD命令相应的结果。使用初始化的命令序列,就可以初始化SD卡,并获取SD卡的相关信息。

  • 读取数据

只需要将要读取的SD卡块的CMD命令、块地址、数据目标地址写入到SD-Card Controller寄存器中,控制器便开始读取SD卡数据,并将数据自动写入内存之中。读取数据完成后,向CPU产生一个中断信号。

  • 写入数据

只需要将要写入的SD卡块的CMD命令、块地址、数据目标地址写入到SD-Card Controller寄存器中,控制器便开始读取内存数据,并将数据自动写入SD卡之中。读取数据完成后,向CPU产生一个中断信号。

1.2、过程与成果

使用Testbench方式通过了测试,能够从SD卡模块中读取数据,并将数据写入到RAM中,实现SD卡数据的读取,也可以将RAM中的数据写入到SD卡的指定块中。在Modelsim、iVerilog验证测试中达到了设计目标,上机设计中的由于pango综合时间过长,需要30分钟以上,就优先使用Xilinx和Altera平台进行了验证。

1.2.1、平台测试

  1. ZYNQ 7020

    使用Vivado创建ip封装,框图连结AXI4 to AHB3-Lite Bridge,AHB3-Lite to AXI4 Bridge,AXI4 Interconnect,将ARM核心连接到SD卡控制器Slave接口,SD卡控制器Master连接到HP接口访问DDR内存。编写初始化和读写测试代码,可以实现SD卡的读写操作,并在串口打印输出。

  2. Cyclone IV EP4CE10

    使用Qsys创建NIOS II,编写Avalone to AHB Bridge,双口RAM,将NIOS II软核连接到SD卡控制器Slave接口和双口RAM,SD卡控制器Master连接到双口RAM。可以实现SD卡的数据读取和写入,并有串口打印。

  3. Pango

    综合完成后,在实现阶段存在无法布通线路的情况。修改实现参数以后,存在一定概率CPU无法启动的情况,或者启动过程中死机。于是最终放弃该方案。

二、SPI+FIFO方案

2.1、目标和初衷

  1. SDIO + DMA方案消耗资源过多,板上剩余资源不多,导致可以综合但无法实现。于是选择使用最简单的SPI方案,软件实现SD卡读写的逻辑,从而完成SD卡的读写功能。所有的读写操作会被存储在FIFO中,所有的读写操作完成时会产生一个中断信号。读取的数据会被存储在FIFO中,发送的数据从FIFO全部发送出去。
  2. 使用FIFO缓冲和中断的方式,避免AHB总线长时间阻塞等待SPI的数据的读写过程。去除DMA模块,降低资源消耗。

2.2、过程与成果

使用Testbench方式通过了测试,能够从进行基本的SPI数据读写。由于缺少SPI接口的SD卡模型的,所以直接选择上机测试。

2.2.1、测试平台

  1. ZYNQ7020

    同第一个方案,在ARM核对SPI控制器进行读写时,可以在对应的端口上使用示波器检测到SPI信号。

  2. Cyclone IV EP4CE10

    同第一个方案,在NIOS II核对SPI控制器进行读写时,可以在对应的端口上使用示波器检测到SPI信号。

  3. Pango

    SPI控制器在连接到Cortex m1核心上时发生了两种情况:

    1. 可以读取寄存器的值,与默认值相等。但是在写入操作时会直接导致系统司机。
    2. 在调整AHB读写的寄存器的相关Verilog代码和时序后,可以写入数据到寄存器并且不会死机,但是读取的寄存器值永远为0。最终没能解决SPI控制器的挂载问题。

参考

  • 【重要通知】第五届集创赛西南分赛区决赛参赛通知
  • 【参赛团队必读】第五届集创赛分赛区决赛参赛相关问题答疑

【第五届集创赛备赛】九、SD卡控制器开发总结相关推荐

  1. 【第五届集创赛备赛】一、黄乐天老师赛事宣讲及各个赛题分析

    赛题地址:第五届集创赛--紫光同创杯 0.工作安排 工作安排(2021年3月7日): 1.完成报名选题相关事宜,初步定为紫光同创杯.(3月10号之前确定选题并报名) 2.完成紫光同创开发环境的搭建(P ...

  2. 聚焦第五届集创赛 海云捷迅助力人才培养

    凭借其高度的灵活性,FPGA越来越受追捧,在通信.数据中心.工业.人工智能.消费电子等领域均得到广泛应用.第五届集创赛海云捷迅杯赛题中 "基于FPGA C5Soc的MobileNetV1 S ...

  3. Linux SD卡驱动开发(五) —— SD 卡驱动分析Core补充篇

    Core层中有两个重要函数 mmc_alloc_host 用于构造host,前面已经学习过,这里不再阐述:另一个就是 mmc_add_host,用于注册host 前面探测函数s3cmci_probe, ...

  4. CE下基于Zylonite硬件平台的SD卡驱动开发

    摘要:本文结合实际项目(一款以WINCE为操作系统内核的GSM/PHS双模智能手机)对嵌入式系统Windows CE5.0的底层驱动(SD卡)的架构进行了分析和研究,以MARVELL公司提供的基于IN ...

  5. 【SD卡】关于DJYOS下SD卡驱动开发详解

    关于DJYOS下SD卡驱动开发详解 王建忠 2011/6/21 1      开发环境及说明 硬件平台:tq2440(CPU: s3c2440) 操作系统:DJYOS1.0.0 1.1    说明 T ...

  6. Linux SD卡驱动开发(四) —— SD 控制器之真正的硬件操作

    前面对SD卡控制器有了一个基本的介绍.其实SD控制器层更过的意义是为core层提供一种操作SD卡硬件的一种方法,当然不同的控制器对硬件控制的方法不尽相同,但是他们最终都能像core层提交一个统一的封装 ...

  7. Linux SD卡驱动开发(二) —— SD 卡驱动分析HOST篇

    回顾一下前面的知识,MMC 子系统范围三个部分: HOST 部分是针对不同主机的驱动程序,这一部是驱动程序工程师需要根据自己的特点平台来完成的. CORE 部分: 这是整个MMC 的核心存,这部分完成 ...

  8. linux sd卡驱动教程,Linux SD卡驱动开发(四) —— SD 控制器之真正的硬件操作

    前面对SD卡控制器有了一个基本的介绍.其实SD控制器层更过的意义是为core层提供一种操作SD卡硬件的一种方法,当然不同的控制器对硬件控制的方法不尽相同,但是他们最终都能像core层提交一个统一的封装 ...

  9. 2021年第五届集创赛Arm杯报名/提问/培训视频/历年获奖资料汇总

    2021年集创赛赛题已正式发布,目前已经开始报名,报名截止日期为3月15日.本届集创赛"Arm杯"赛题为基于Arm处理器核的信号处理SoC设计,属于数字与SoCs设计赛道!感兴趣的 ...

最新文章

  1. win10 安装字体且不占用系统盘资源
  2. idea连接mysql
  3. python进阶-面向对象编程四:包装授权和自定制列表某些方法
  4. nginx汇总(z)
  5. c语言中把各位上为奇数的数取出,下列给定程序中函数fun()的功能是:将长整型数中每一位上为奇数的数依次取出,构成一个新数放在冲。 - 赏学吧...
  6. 同步与异步以及线程与进程
  7. web前端(3)—— html标签及web页面结构
  8. 《延世大学韩国语教程2》第十九课 生病(下)
  9. 常见的三种Content-Type
  10. 5e的训练模式全是英文_四块GPU即可训练BigGAN:「官方版」PyTorch实现出炉
  11. Can not find the tag library descriptor for http://java.sun.com/jsp/jst1/core
  12. 计算机vfp系统,计算机等级考试VFP教程:第一章数据库系统
  13. 程序员人生:技术人员的职业发展规划
  14. Git 团队协作常用术语 WIP PTAL CC LGTM
  15. JS window的若干属性和方法
  16. SpringSecurity整合Redis实现单点登录及认证返回json数据
  17. 《2018区块链技术应用白皮书》完整版查看
  18. i9500 android8,八核神器 三星Galaxy S4 I9500拆解
  19. 实战——幂等性+海量数据处理
  20. 联想服务器td340安装精简版win10

热门文章

  1. 1700. 无法吃午餐的学生数量(难度:简单)
  2. 什么是电子秤称重模块?它具有哪些功能?
  3. Spark使用Log4j将日志发送到Kafka
  4. fme扫描件处理终章,深度学习和fme的极致结合,自动分户,分类,并提取宗地代码作为户档案文件名
  5. select标签回显
  6. 几何光学(一):对于费马原理的一些简单理解
  7. 第3题:设计一个模拟电信计费程序
  8. Ocelot的使用(负载均衡实现)
  9. cors数据类型_南方测绘CORS介绍
  10. 从零开始用snakemake搭建完整的甲基化生信分析流程(第一章)基础篇