详解sd协议以及裸机和u-boot中的sd卡驱动(1)

本文深入探讨SD卡的使用场景,从无文件系统直接读写扇区到有文件系统下的挂载操作。解析SD卡与开发板或PC交互的背后原理,详细介绍SD控制器与SD卡之间的信号交换机制,以及CPU如何控制SD控制器。文章还提供了SD协议的全面解读,包括物理层面的引脚定义、寄存器作用、信号格式,以及通信流程中的工作模式和状态转换。

1. 引入

1.1 使用场景

对于sd卡的使用,相信大家都已经很是熟悉:

  1. 无文件系统

    首先调用初始化函数,然后便可以调用读写函数进行读写扇区的操作,但是更多的使用场景是在文件系统之上。

  2. 有文件系统

  • pc端,以windows为例:

    将sd卡(或通过usb读卡器)插在电脑的插槽里面,然后出现一个sd卡的盘符,点进去便可以访问里面的文件;

  • 开发板:

    将sd卡插在开发板的插槽里面,进入linux根文件系统的shell,执行mount命令挂载在某个目录下,然后进入该目录,便可以访问里面的文件;

1.2 背后原理

那么上述使用过程背后的实现原理是什么呢?为了更形象的讲解,我画了如下的一幅图:
在这里插入图片描述
以在开发板中使用为例(不使用DMA):

  • 当我们插上sd卡后,sd卡便通过导线与s3c2440芯片引出的对应管脚相连,而这些引出的管脚最终会接到芯片内部的sd控制器上,

  • 当我们需要读sd卡时,

    1. cpu读写sd控制器内部的寄存器,以此来控制其发出各种信号,主要包括读取的地址、大小等;

    2. sd控制器发出的信号通过导线传输到sd卡内部;

    3. sd卡接收到信号,从中解析出要读取的地址以及大小等,并以此读取其内部存储单元,接着将读取到的数据通过相同的路径传回到cpu内部的寄存器;

    4. cpu将获取到的数据通过sdram控制器写入到sdram中,完成此次读操作。

  • 当我们需要写sd卡时,

    1. cpu通过sdram控制器读取sdram中存储的需要写入到sd卡中的数据;
    2. cpu读写sd控制器内部的寄存器,以此来控制其发出各种信号,主要包括写入的地址、数据等;
    3. sd控制器发出的信号通过导线传输到sd卡内部;
    4. sd卡接收到信号,从中解析出要写入的地址以及数据等,并将数据写入该地址对应的内部存储单元。

1.3 提出问题

针对上述过程,我们重点关注以下几个问题:

  1. sd控制器与sd卡之间如何通过信号来进行数据交换?
  2. cpu如何控制sd控制器来发出各种信号?

1.4 回答

1. 对于上述问题1的回答,便是sd协议所规定的内容,具体在第2章进行说明。

2. 对于上述问题2的回答,便是sd驱动的内容,具体在第3章进行说明。

2. sd协议

注:本章关于协议的内容,主要参考自sd协议书以及网络,在此感谢这些不知名的分享者(_)

现在我们来回答问题1:sd控制器与sd卡之间如何通过信号来进行数据交换?

答案就是:sd协议

  1. 首先,通信的第一步需要有源、目的以及媒介,所以,sd协议规定了:

    • sd控制器与sd卡之间相连接的物理线路

    • sd卡的引脚

    • sd卡内部的寄存器,用来保存sd卡本身的一些信息

  2. 接着,我们知道,物理线路上传输的肯定是一串二进制的比特流,而要想利用这些比特流进行通信,就必须要对这些比特流进行一定的组织,并且通信双方都应该遵守,为此,sd协议

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值