概述
文章目录
- 一、SDIO+DMA方案
- 1.1、目标与初衷
- 1.2、过程与成果
- 1.2.1、平台测试
- 二、SPI+FIFO方案
- 2.1、目标和初衷
- 2.2、过程与成果
- 2.2.1、测试平台
- 参考
一、SDIO+DMA方案
1.1、目标与初衷
最初的设计追求最大化传输速度的SD卡控制器,保证能够在读取SD卡上的高码率视频数据实现流畅的传输。
- 阻塞的SDIO的读写速度远远慢于AHB总线的传输速度,不能发挥AHB的传输优势
- 在FreeRTOS上进行长时间的阻塞的数据等待并不合适,对于低速的IO操作可以配合中断的方式,实现异步的IO任务调度:SD卡控制器使用DMA+中断,在传输完成时使用使用中断通知FreeRTOS的任务,能够有效提升CPU效率和系统实时性。
- 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、平台测试
-
ZYNQ 7020
使用Vivado创建ip封装,框图连结AXI4 to AHB3-Lite Bridge,AHB3-Lite to AXI4 Bridge,AXI4 Interconnect,将ARM核心连接到SD卡控制器Slave接口,SD卡控制器Master连接到HP接口访问DDR内存。编写初始化和读写测试代码,可以实现SD卡的读写操作,并在串口打印输出。
-
Cyclone IV EP4CE10
使用Qsys创建NIOS II,编写Avalone to AHB Bridge,双口RAM,将NIOS II软核连接到SD卡控制器Slave接口和双口RAM,SD卡控制器Master连接到双口RAM。可以实现SD卡的数据读取和写入,并有串口打印。
-
Pango
综合完成后,在实现阶段存在无法布通线路的情况。修改实现参数以后,存在一定概率CPU无法启动的情况,或者启动过程中死机。于是最终放弃该方案。
二、SPI+FIFO方案
2.1、目标和初衷
- SDIO + DMA方案消耗资源过多,板上剩余资源不多,导致可以综合但无法实现。于是选择使用最简单的SPI方案,软件实现SD卡读写的逻辑,从而完成SD卡的读写功能。所有的读写操作会被存储在FIFO中,所有的读写操作完成时会产生一个中断信号。读取的数据会被存储在FIFO中,发送的数据从FIFO全部发送出去。
- 使用FIFO缓冲和中断的方式,避免AHB总线长时间阻塞等待SPI的数据的读写过程。去除DMA模块,降低资源消耗。
2.2、过程与成果
使用Testbench方式通过了测试,能够从进行基本的SPI数据读写。由于缺少SPI接口的SD卡模型的,所以直接选择上机测试。
2.2.1、测试平台
-
ZYNQ7020
同第一个方案,在ARM核对SPI控制器进行读写时,可以在对应的端口上使用示波器检测到SPI信号。
-
Cyclone IV EP4CE10
同第一个方案,在NIOS II核对SPI控制器进行读写时,可以在对应的端口上使用示波器检测到SPI信号。
-
Pango
SPI控制器在连接到Cortex m1核心上时发生了两种情况:
- 可以读取寄存器的值,与默认值相等。但是在写入操作时会直接导致系统司机。
- 在调整AHB读写的寄存器的相关Verilog代码和时序后,可以写入数据到寄存器并且不会死机,但是读取的寄存器值永远为0。最终没能解决SPI控制器的挂载问题。
参考
- 【重要通知】第五届集创赛西南分赛区决赛参赛通知
- 【参赛团队必读】第五届集创赛分赛区决赛参赛相关问题答疑
最后
以上就是想人陪鞋子为你收集整理的【第五届集创赛备赛】九、SD卡控制器开发总结一、SDIO+DMA方案二、SPI+FIFO方案参考的全部内容,希望文章能够帮你解决【第五届集创赛备赛】九、SD卡控制器开发总结一、SDIO+DMA方案二、SPI+FIFO方案参考所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复