S3C2440读写sd卡的一些总结

2023-11-04

整理硬盘的时候发现这个文档,以前写2440操作sd卡程序的时候总结的。

 

1.我的2440 sdi对sd卡发送ACMD41时总是反馈crc fail,但是可以得到正确的response,sd卡可以正常使用。

2 sd卡可以没有mbr,在物理的 0 block上面直接开始dbr。我的山寨kingston 1g mini sd在板子自带的测试程序读写后,0 block被覆盖,插到电脑上之后提示未格式化,用Windows格式化之后,用winhex查看physical sector no.和logical sector no.相同,dbr在第0 block,可以正常读写数据,不过系统识别sd卡的速度很慢。

3 sd卡的sector有两个含义,在spec part1中,sector是erase的基本单位,一个sector包含多个block,具体数值在csd中有(我手上的两个卡都是128blocks/sector);在spec part2 文件系统的介绍中,sector和block含义一样。

4 read/write/erase命令的参数是字节地址。

5 sd卡执行erase之后的状态由厂商决定,在SCR寄存器中可以查询到。

6 sd卡r/w操作的基本单位是block,但是可以读取最小一个byte的数据,如果csd寄存器的WRITE_BLK_PARTIAL位为1,可以写入最少一个字节的数据。一个r/w命令是否可以跨block读写,由csd寄存器的WRITE_BLK_MISALIG和READ_BLK_MISALIGN决定,如果该位为1,则允许。(spec上面的规定,我没有验证)

7 write命令之后进入prg状态,在此状态下,如果向sd卡发送read/write/erase命令会timeout,所有如果上一个命令是write,需要用cmd13查询状态的READY_FOR_DATA,到此位置1才能进行后续的read/write/erase。

8 发命令的时候一定要用一些机制来做超时,因为硬件不一定就是正常工作的。有时候发完命令之后命令状态寄存器SDI Command Status Register一直不会变化(可能是硬件的问题),如果光靠读取命令状态寄存器的值决定程序的行为很可能会进入死循环。(所有的针对硬件控制并需要硬件响应的程序都应该加个额外的超时机制)

9 fatfs的移植问题

我手上的代码是r0.06的,从九九兄的那个帖子上直接下载的http://www.ourdev.cn/bbs/bbs_content_all.jsp?bbs_sn=3210864

对于arm来说,_MCU_ENDIAN应该设置为2,按byte访问FAT structure。

fatfs的readme上说:

When the target device corresponds to either or both of following cases, it must always be set 2.

  - Muti-byte integers (short, long) are stored in Big-Endian.

  - Address miss-aligned memory access results in an incorrect behavior.

ARM的32bit和16bit内存访问是要求地址对齐的,所以如果把_MCU_ENDIAN设置为1的话,会出现data abort exception。

FatFs Module Application Note的Memory Usage中fatfs的作者在测试ARM7时_MCU_ENDIAN = 2

网上转的比较多的《转一篇比较详细介绍FatFs文件系统移植的文章》里面把_MCU_ENDIAN设置为1,然后用函数的形式实现了LD_WORD/LD_DWORD宏的按byte访问,这并不是正确的处理方法。

九九兄的代码也是将_MCU_ENDIAN设置为2,一直奇怪为什么他的代码不会出现data abort exception,也没见到有人说代码报错——后来在这个讨论结构体占用内存的帖子中http://www.ourdev.cn/bbs/bbs_content_all.jsp?bbs_sn=1672225看到四楼的兄弟说STM32的内存可以不对齐访问。不知道是不是这个原因?

现在fatfs已经r0.08a了,增加了很多功能,代码看起来比以前好多了,_MCU_ENDIAN也已经改为_WORD_ACCESS了。

10 如果想用winhex查看mbr,需要在open disk时选择physical media。

11 DMA模式下何时开启DMA

在CSDN上看到这样一个问题:

有的sd卡命令是要传输数据的,那应该什么时候进行dma呢?

比如:下面两种顺序哪个更好?

顺序1. 先发送命令;再接收response;最后启动dma传输。

顺序2. 先启动dma传输;再发送命令;最后接收response

我觉得“顺序1”肯定没问题。请问“顺序2”可以吗?

http://topic.csdn.net/u/20100301/18/868de0f6-3370-411c-b1c5-4907d1418a7f.html

在sdi模式下data和cmd是在不同的线上传输的,在sd spec 1.0 p57上的给出的读数据的时序图中可以看到response还没有发送完成的时候,数据已经可以发送到data线上了,所以我认为应该先开DMA,然后发命令。

当然由于fifo这个缓存器的存在,先开DMA和后开DMA实际上可能没什么影响。

在写数据的情况下,需要确认SD卡的状态,所以不存在response未接收完就可以发数据的问题。

 

http://www.voidcn.com/article/p-qwikeksg-bbp.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

S3C2440读写sd卡的一些总结 的相关文章

  • 芯片的SD/MMC控制器以及SD卡介绍

    1 MMC SD卡 eMMC介绍 1 1 三者关联 1 最早出现的是MMC卡 卡片式结构 按照MMC协议设计 相较于NandFlash芯片来说 MMC卡有2个优势 第一是卡片化 便于拆装 第二是统一了协议接口 兼容性好 2 后来出现SD卡
  • SPI协议读写SD卡介绍

    前言 在前面的文章中 我们主要介绍了如何利用SDIO协议对SD卡进行读写操作的流程及注意事项 虽然SDIO协议读写SD卡的效率很高 但是 操作却比较麻烦 另外 还需要使用的芯片具有SDIO外设 这对于不具备SDIO外设的芯片而言 绝对是一个
  • 基于SD卡的FatFs文件系统(FatFs移植到STM32)

    平台 STM32ZET6 核心板 ST LINK V2 SD卡 USB串口线 一 移植 工程介绍 主要文件在USER组中 bsp sdio sdcard c bsp sdio sdcard h和main c 另外FatFs是用来后面移植文件
  • FATFS文件系统详解

    FATFS文件系统详解 文章目录 FATFS文件系统详解 1 简介 2 基础概念 3 FAT文件系统组成介绍 4 FAT文件系统分析 4 1 采用FAT格式格式化SD nand sd卡 4 2 引导扇区分析 4 3 分区偏移及大小计算 4
  • FATFS 0.13 f_mount(&fs,““,1)挂载失败的原因

    这两天学着用了一下FATS文件系统 虽然工作中没用到 但是对个人的经验积累还是有用的 看了一下 代码并不多 但是精简啊 指针跳来跳去的一不小心就晕了 所以也遇到了不少问题啊 这里就讲一下我遇到的第一步就懵逼的问题 那就是 FRESULT f
  • STM32的简单的SD卡读写

    导读 SD卡一般支持两种读写模式 SPI和SDIO模式 SD卡的引脚排序如下图所示 SPI模式下有几个重要的操作命令 分别是 SD卡R1回应的格式如下SPI模式下的典型初始化过程如下 1 初始化硬件配置 SPI配置 IO配置等 SD卡一般支
  • S3C2440读写sd卡的一些总结

    整理硬盘的时候发现这个文档 以前写2440操作sd卡程序的时候总结的 1 我的2440 sdi对sd卡发送ACMD41时总是反馈crc fail 但是可以得到正确的response sd卡可以正常使用 2 sd卡可以没有mbr 在物理的 0
  • STM32+FATFS文件系统连续在同一个txt文件里写入内容

    移植好fatfs文件系统之后 我们经常要在一个txt文件下写入数据 但是这些数据可能需要多次写入 那怎么办呢 通过这几天的学习 有以下函数可以帮助我们进行多次写入数据 1 打开文件 f open filescr2 0 201711022 t
  • SD卡/TF卡简记

    文章目录 MicroSD卡与SD卡关系与区别 对比NM卡 XQD卡 CFexpress卡 SD规格标识 FAQ 拍摄1080p或2k视频需要什么速度的sd卡 拍摄4k视频需要什么速度的sd卡 拍摄8k视频需要什么速度的sd卡 MicroSD
  • STM32 SPI方式读写SD卡

    前段时间在51上模拟SPI实现了对SD卡的读取 效果还算不错 最近将其移植到STM32上 不过使用硬件SPI和使用软件SPI还是有差别的 代码如下 void User SPIInit void GPIO InitTypeDef GPIO I
  • fatfs移植和使用(在SPI_FLASH上建立文件系统)

    文件系统对于嵌入式系统的重要性是不言而喻的 有了文件系统管理数据和外设变得方便许多 同时简化了应用的开发 今天我们来以在SPI FLASH上建立文件系统为例 看看FATFS文件系统怎么移植和使用 需要准备的材料有 1 FATFS文件系统源码
  • MMC、SD、TF、SDIO、SDMMC简介

    MMC 概念 MMC的全称是 MultiMediaCard 所以也通常被叫做 多媒体卡 是一种小巧大容量的快闪存储卡 特别应用于移动电话和数字影像及其他移动终端中 外形及接口定义 如上图所示 MMC存贮卡只有7pin 可以支持MMC和SPI
  • 发布一个在读写sd卡时,此时sd卡拔出造成死机的处理方法

    发布一个在读写sd卡时 此时sd卡拔出造成死机的处理方法 同时也在此记录一下 以备后用及有需要人们参考 stm32f4xx hal sd c 红色的代码是增加上去的 函数名称 static HAL SD ErrorTypedef SD Cm
  • STM32F407移植FATFS文件系统(版本 R0.09b)支持长文件名和中文名称

    FatFs文件系统 默认是不支持长文件名和中文名称的 要想支持长文件名和中文名称 需要打开ffconf h文件进行配置 一 支持长文件名 FatFs文件系统 默认是不支持长文件名的 要想支持长文件名 需要打开ffconf h文件进行配置 找
  • SD卡、TF卡读写速率测试

    请注意 可以在未经过博主同意下转载 但必须注明出处 谢谢 1 运行HDBENCH软件 点击确定 2 弹出如下图所示界面 配置选项并测试 选择待测TF卡 Removable可移动存储设备 图示所插入的TF卡是 I 盘 请根据实际情况选择 选择
  • SD卡 FATFS CSV 文件中的 逗号和换行

    RFC 4180 Common Format and MIME Type for Comma Separated Values CSV Files 要点有 1 CSV的换行符号要使用CRLF 即 回车符 换行符 的形式 2 文字可以使用双引
  • FATFS实现数据追加功能(原文不覆盖)

    在对FATFS的应用中我们经常需要把采集的数据存入的文件中 用作保存 也许我们的系统是一个长期的运行过程 但是我们的数据可能不是持续采集的 所以我们这样写代码 注册一个工作区域 f mount 0 fs 打开创建一个新文件 res f op
  • SD卡初始化以及命令详解

    SD卡是嵌入式设备中很常用的一种存储设备 体积小 容量大 通讯简单 电路简单所以受到很多设备厂商的欢迎 主要用来记录设备运行过程中的各种信息 以及程序的各种配置信息 很是方便 有这样几点是需要知道的 SD 卡是基于 flash 的存储卡 S
  • 关于如何修复烧写镜像文件失败的SD卡

    前言 使用某些软件 比如 win32 Disk Imager 向SD卡烧写镜像文件时 很有可能出现烧写失败的情况 通常如果烧写失败 系统会弹出请求格式化SD卡的提示框 此时不要点格式化 点了可能会造成不可挽救的结果 也可能不会 而是进行以下
  • 【正点原子探索者STM32F407开发板例程连载+教学】第30章 SPI通信实验

    第三十章 SPI 实验 mw shl code c true 1 硬件平台 正点原子探索者STM32F407开发板 2 软件平台 MDK5 1 3 固件库版本 V1 4 0 mw shl code 本章我们将向大家介绍STM32F4的SPI

随机推荐

  • ICCV 2023

    本文转载自知乎 mywt 已获得作者授权 文章链接 https arxiv org abs 2211 14710 代码链接 3DPPE on petrv1 v2 https github com drilistbox 3DPPE 3DPPE
  • win10环境Vscode快速配置编译运行C文件

    一 安装并正常运行vscode 下载vscode插件 安装C C 插件和code run插件 二 下载MinGW w64 1 下载地址 https sourceforge net projects mingw w64 2 根据电脑配置选择合
  • SetupDiGetDeviceInterfaceDetail

    SetupDiGetDeviceInterfaceDetail 该函数返回设备接口的详细信息 BOOL SetupDiGetDeviceInterfaceDetail In HDEVINFO DeviceInfoSet In PSP DEV
  • STM32定时器系列 - STM32常规定时器时基与时钟源

    常规定时器包括 基本定时器 通用定时器和高级定时器 基本定时器 没有任何对外输入 输出 主要用作时基计数 定时 通用定时器 除了基本定时器的时基功能外 还可对外做输入捕捉 输出比较以及连接其它传感器接口 编码器和霍尔传感器 高级定时器 此类
  • C语言深入理解指针(非常详细)(一)

    目录 内存和地址 内存 编址的理解 指针变量和地址 取地址操作符 指针变量和解引用操作符 指针变量 如何拆解指针类型 解引用操作符 指针变量的大小 指针变量类型的意义 指针的解引用 指针 整数 const修饰指针 const修饰变量 con
  • 【Mybatis】Mybatis插入中文乱码问题

    1 首先看数据库中和idea中是否都是utf 8编码 1 数据库 新建查询 gt 输入 SHOW FULL COLUMNS FROM 数据库名 表名 查看所有字段编码 2 IDEA 点击File Settings Editor File E
  • 后端开发学习Vue(一)

    Vue的介绍 官网 https cn vuejs org Vue是一个简单容易上手前端框架 例如 下面的代码可以快速构建一个表格
  • rpy2库

    在数据分析中 Python和R各有千秋 虽然Python或R都能在数据分析打通关 从采集 清洗 预处理 分析 可视化 但是在不同的环节 不同的语言易用程度不同 Python胜在干脏活累活 诸如数据采集 数据清洗 机器学习等 而R语言胜在统计
  • 【机器学习】聚类【Ⅰ】基础知识与距离度量

    主要来自周志华 机器学习 一书 数学推导主要来自简书博主 形式运算 的原创博客 包含自己的理解 有任何的书写错误 排版错误 概念错误等 希望大家包含指正 由于字数限制 分成五篇博客 机器学习 聚类 基础知识与距离度量 机器学习 聚类 原型聚
  • 用c语言打印九九乘法表

    分析 这是一个典型的使用循环嵌套的题目 把题目分成两部分 被乘数和乘数 被乘数的变化是从1变化到9 乘数的变化是根据被乘数而来 这样就决定了被乘数的变化做为外循环 乘数的变化作为内循环 1 1 1 2 1 2 2 2 4 3 1 3 3 2
  • 路径遍历(目录遍历)

    一 简介 路径遍历攻击也称为目录遍历 旨在 访问存储在web根文件夹之外的文件和目录 通过操纵带有 点 斜线 序列及其变化的文件或使用绝对路径来引用文件的变量 来访问存储在文件系统上的任意文件和目录 包括应用程序源代码 配置和关键系统文件
  • 中国移动光猫无线路由一体机如何再接另外一个无线路由器

    将无线路由器连接光猫 用一条网线一端接入光猫网口1或网口3或网口4 另一端接入无线路由器WAN接口 将无线路由器连接电脑 用一条网线一端接入无线路器LAN接口 另一端插入电脑 光猫的默认地址为192 168 1 1 所以无线路由器的LAN口
  • 日期加年,返回年份

    日期加年 返回字符串 param date str yyyy mm dd 必须是这个格式 param year 加的年 return string 年份 static function dateAddYear date str year i
  • 数据库连接异常:create connection error, url: jdbc:mysql://ip/数据库名, errorCode 0, state 08S01问题处理

    今天项目中新增了一部分接口 本地测试好之后打包部署到测试环境 数据库竟然连接失败 报错信息如下 create connection error url jdbc mysql ip 数据库名 errorCode 0 state 08S01 这
  • solidworks齿轮编辑_如何应用solidworks进行齿轮工程图绘制

    引言 齿轮是一种常用的传动零件 也是机械设计过程中经常需要设计的一种零件 由于齿轮的工程图绘制与一般零件有较大区别 在利用一般的三维软件设计出三维图形后并不能马上得到准确的二维图形 这种情况会大大降低工程技术人员的设计速度 增加设计成本 S
  • 安卓数据线ssh连树莓派(超简单)

    无需联网 无需无限网卡 树莓派 sudo vim etc network interfaces 添加或修改这句iface usb0 inet dhcp 然后手机数据线插上树莓派 开启usb网络共享 用better terminal或者ter
  • 记录一个std::future和std::async的demo

    Demo和代码简述 子线程函数 参数a传进去模拟遇到的带参数问题 函数的返回值可以是处理完的任意值 若有返回值则get 到的就是返回值 比如这个demo里get到的就是3 int TestNoClass int a int main int
  • LFSR

    c语言中实现LFSR define CRT SECURE NO WARNINGS include
  • 同步式SPWM两电平正弦脉宽调制逆变器(全波三角波)——正弦波为调制波(双重傅里叶分析)

    SPWM正弦脉宽调制介绍 SPWM是调制波为正弦波 载波为三角波或锯齿波的一种脉宽调制法 特点 原理简单 通用性强 控制和调节性能好 具有先出谐波 调节和稳定输出电压的多种作用 是一种比较好的波形改善法 分类 分为两阶式和三阶式两种 阶 指
  • S3C2440读写sd卡的一些总结

    整理硬盘的时候发现这个文档 以前写2440操作sd卡程序的时候总结的 1 我的2440 sdi对sd卡发送ACMD41时总是反馈crc fail 但是可以得到正确的response sd卡可以正常使用 2 sd卡可以没有mbr 在物理的 0