FPGA之SPI SD卡读操作
这几天在FPGA调试与SD通信,读SD卡里的图片,之前接触32时没有去研究过SD卡,不太熟悉操作流程,在网上找了很多资料,也看了几个32开发板的资料,但大多数都讲得不是特别清楚,只能瞎操作了一番,在别人的代码做了修改,能初始化成功,但是读数据一直有问题,加上用Arria 10在Quartus下编译比较慢,下载验证也比较慢,调了好几天才调好,在此总结一下,读操作按照SD协议来,读单块发送CMD17,加扇区地址,加一字节FF如下:

发送读操作指令后,SD会有一字节00应答,这一点很重要,我在找资料过程中没有人特别说明这点,所以有段时间卡在这,没法确定发送的指令SD是否接收辨识到。
发送读操作指令且有应答后,就一直给SD卡提供时钟,通常是一直发送0xFF,此时发送的数据无关紧要,只要紧紧关注SD的回应,当SD回应0xFE时就说明SD在传数据给你了,这一点也非常重要,我找资料时有网友提到这,但是没有特别提醒,所以也纠结在这,不知道什么时候数据有效,再次强调,发送CMD17和扇区地址后,一直提供时钟,并检测SD回应,当SD卡回应0xFE时指示接下来的数据为有效数据,如下截图:

如果已经到以上步骤了,那说明已经快接近成功了,接下来是非常关键的,也是让我折腾了几天没弄出来的,其实就是没有理解给的扇区地址的问题,网上找了好多资料,大多数都会提到SD卡的逻辑地址和物理地址,但是就没谁点一下,不使用FAT文件系统,直接读SD卡,应该读逻辑地址还是物理地址,自己折腾了几天,在此总结一下:
当你使用SPI或SDIO方式直接读SD卡时,应该直接读你用WinHex看到的物理扇区地址!!!直接读你用WinHex看到的物理扇区地址!!!直接读它,我就是因为不知道该读哪个,一直读看到的逻辑扇区地址,数据一直对不上,然后一直以为是通信时序问题,浪费了好多时间。下面是我实际操作的截图,简单说明一下,供参考。
我实验时先读0扇区的数据,看看对不对(因为0扇区一定有数据,SD保留区域),通过WinHex查看0扇区的物理扇区地址如下:
FPGA读到后送到RAM查看得到数据如下:
对比两张截图,可以清晰的得到结论,直接读SD的数据时,地址选物理扇区地址,才能正确读出来对应的数据。
以下是我在SD卡存了图片,读出来的数据对比:
先是WinHex查看到的图片的物理扇区地址:46144

FPGA读该地址并送到RAM中查看得到数据如下:
两张图片对比都一致。
FPGA之SPI SD卡读操作的更多相关文章
- Android入门开发之SD卡读写操作(转)
SD卡的读写是我们在开发android 应用程序过程中最常见的操作.下面介绍SD卡的读写操作方式: 1. 获取SD卡的根目录 String sdCardRoot = Environment.getE ...
- 关于2440的裸跑程序中SD卡读后不能成功写入问题的讨论
问题描述: TQ2440的官方裸跑程序中,对SD卡先进行读操作,然后再写,发现不能程序卡死.倘若对SD卡先写后读,程序可以正常运行,奇哉怪哉? 写数据的关键代码--> while(i < ...
- [SD卡] FPGA笔记之SD卡
1.数据怎么存进去的? 其中的sd_miso就是接收的1位数据,n个时钟下就收到n个数据,比如n=21. 2.如何做到先发送高位?
- SPI模式下MCU对SD卡的控制及操作命令
一.前言 SD 卡有两个可选的通讯协议:SD 模式和 SPI模式 SD 模式是SD 卡标准的读写方式,但是在选用SD 模式时,往往需要选择带有SD 卡控制器接口的 MCU,或者必须加入额外的SD卡控制 ...
- SPI模式下MCU对SD卡的控制及操作命令(转)
源:SPI模式下MCU对SD卡的控制及操作命令 一.前言 SD 卡有两个可选的通讯协议:SD 模式和 SPI模式 SD 模式是SD 卡标准的读写方式,但是在选用SD 模式时,往往需要选择带有SD 卡控 ...
- SD卡 模拟SPI总线控制流程
SD卡为移动设备提供了安全的,大容量存储解决方法.它本身可以通过两种总线模式和MCU进行数据传输,一种是称为SD BUS的4位串行数据模式,另一种就是大家熟知的4线SPI Bus模式.一些廉价,低端的 ...
- [FatFs 学习] SD卡总结-SPI模式
SD卡为移动设备提供了安全的,大容量存储解决方法.它本身可以通过两种总线模式和MCU进行数据传输,一种是称为SD BUS的4位串行数据模式,另一种就是大家熟知的4线SPI Bus模式.一些廉价,低端的 ...
- Android 常见SD卡操作
目录 Android 常见SD卡操作 Android 常见SD卡操作 参考 https://blog.csdn.net/mad1989/article/details/37568667. [0.] E ...
- STM32之SD卡
目录 一.SD卡概述 1.定义 2.容量等级 3.SD卡框图 4.SD卡与TF卡的区别 二. SD卡内部结构 1. SD卡内部结构简图 2. 存储阵列结构图 3.Buffer 4.“存储阵列Block ...
随机推荐
- Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像
前文传送门: 「Python 图像处理 OpenCV (1):入门」 普通操作 1. 读取像素 读取像素可以通过行坐标和列坐标来进行访问,灰度图像直接返回灰度值,彩色图像则返回B.G.R三个分量. 需 ...
- RobotFramework Selenium2Library 关键字详解
*** Settings *** Library Selenium2Library *** Keywords *** Checkbox应该不被选择 [Arguments] ${locator} Che ...
- SpringBoot +Vue 前后端分离实例
今天下了Vue,想试一试前后端分离的实现,没想到坑还不少,这里就记录一下我遇到的坑和我的代码: 一.Vue的下载安装:从网上找就好了,没什么问题,除了下载以后,要把镜像库改成淘宝的,要不然太慢了. 二 ...
- 走向统一的 .NET 旅程
这是微软第一次完全线上举办的Build大会,也是第一次完全属于开发者的大会.几乎所有的新产品都是属于开发者,开发者成为了唯一的主角. 现在的微软比以往任何时候都贴近开发者,重视开发者的作用,为他们打造 ...
- EOS基础全家桶(十二)智能合约IDE-VSCode
简介 上一篇我们介绍了EOS的专用IDE工具EOS Studio,该工具的优势是简单,易上手,但是灵活性低,且对系统资源开销大,依赖多,容易出现功能异常.那么我们开发人员最容易使用的,可能还是深度定制 ...
- .NET 合并程序集(将 dll 合并到 exe 中)
------------恢复内容开始------------ ------------恢复内容开始------------ 背景:我们的应用程序通常都是由多个程序集组成,例如一个 exe 程序依赖于多 ...
- poj3177 无向连通图加多少条边变成边双连通图
Redundant Paths Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 15752 Accepted: 6609 ...
- SA-N26接口和EPS fallback
SA-N26接口和EPS fallback 1 什么是N26接口 如下图,N26(23.501)接口为4G核心网和5G核心网之间的接口,即MME和AMF的接口,用于4G和5G的互操作 2 SA(5GC ...
- 百度地图结合ECharts实现复杂覆盖物(Overlay)
先来看效果图 一 前置知识 官方Overlay-覆盖物的抽象基类 方法 返回值 描述 initialize(map: Map) HTMLElement 抽象方法,用于初始化覆盖物,当调用map.add ...
- 读Pyqt4教程,带你入门Pyqt4 _003
编程中的一个重要事情是布局管理,布局管理是如何在窗体上摆放窗口组件.可以有两种方式进行管理:绝对定位或使用布局类. 绝对定位 程序员用像素指定每个控件的位置和尺寸.使用绝对定位时,你必须理解几件事情. ...