SD Card Driver介绍

SD Card Driver介绍

 

 

部分资料来源于SD spec

1.  SD basics

标准卡: 最大容量2 GB

大容量卡: Version2.0中支持2-32GB

Sector size: 512B

 

大容量卡工作电压范围: 2.7-3.6 V

 

时钟/传输速率:  

Default: 0 - 25 MHz, 最大 12.5 MB/sec 4线SD bus

高速:0 - 50 MHz, 最大 25 MB/sec 4线SD bus

 

SD bus:

CMD, DATA[0…3], CLK, VDD, VSS

SPI bus:

DataInDataOut,  CS, CLK, VDD, VSs

 

2.  Registers

CID 128bit Card ID

 

RCA 16bit 卡相对地址,主机与卡通信时使用

 

DSR 16bit  Driver 状态寄存器

可选的,default: 0x404

 

CSD 128bit 跟卡相关的特殊数据寄存器

Bit 0-1 支持的spec version 1表示支持version2.0高容量卡

CCC card command classes卡命令类别(一共11种)

READ_BL_LEN, WRITE_BL_LEN  支持的最大读/写块长度,从5122048B

SECTOR_SIZE擦除的扇区数0表示1个扇区,1表示两个扇区

C_SIZE计算卡容量

C_SIZE_MULT计算卡容量的因子

 

SCR 64bit 卡配置寄存器

在工厂出厂时设置,只读

SD_BUS_WIDTHS 支持的数据宽度 0101

SD_SPEC 2表示version2.0

 

OCR 32bit 操作条件寄存器

Bit15-23 VDD 电压

bit 30 Card Capacity Status 1 高容量卡 0 标准卡 bit 31 = 1才有效)

bit 31 Card power up status bit 1 上电结束 0 上电没有结束

 

CSR 32bit 卡状态寄存器

执行一条命令后返回的错误和状态信息

 

SSR 512bit 卡状态寄存器

CSR类似,扩展给一些新应用使用

 

3. Command

四种方式:

Broadcast commands, no response

Broadcast commands with response

Addressed(point to point) commands, no data transfer

Addressed(point to point) commands with data transfer on DAT lines

 

格式

Bit position

47

46

45-40

39-8

7-1

0

描述

Start bit(0)

Transmission bit(1)

Command index

Argument

CRC7

End bit(1)

 

CMD0  Reset cards to idle state

CMD2  查询CID寄存器

CMD3  请求卡发布一个新的RCA

CMD7  切换状态(Standby<->Transfer 或者 Programming <-> Disconnect)

CMD8  查询OCR寄存器(工作电压,Powerup status, 容量)

CMD12 强制卡停止传输

CMD13 发送状态寄存器到Host

CMD15 置卡于Inactive state

CMD16 设置卡的Block长度

CMD17 设置读一个Block Length

CMD18 设置读多个Block Length

CMD24设置写一个Block Length

CMD25设置写多个Block Length

CMD27 编程CSD

CMD55 表示后面的一个命令是Application specific

 


 4.  SW Architecture 

 

 

 

 

 

 

 

 

 

 

5. Driver

以下使用SD bus方式

    WriteCommand:

    output32(COMMAND_ARG_ADDR, argument)

   output32(COMMAND_ADDR, command)

 

ReadResponse:

Input32(RESPONSE_ADDR+Offset)

 

ReadRegister

WriteCommand, then ReadResponse

 

Card detection

可以使用一个GPIO来检测Card 的插入和拔出

注意需要有debounce的功能

 

Power On

给电源上电,

设置时钟频率

设置中断,FIFO

Reset card to idle state(CMD0)

Read register CID/OCR/RCA…

 

Power Off

Reset SD controller

Disable clock

断电

 

ReadBloc Data(Sector, TotalSectorNum)

设置 Data Length

设置一次读的扇区数长度

设置DataDir

准备传输接收

FIFO数据

停止传输接收

 

WriteBlockData(Sector, TotalSectorNum, buf)

设置Data Length

设置一次写的扇区数

设置DataDir

准备传输接收

FIFO写数据

停止传输接收

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值