你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

SD卡CMD命令

[复制链接]
anger0925 发布时间:2015-9-15 08:59
1条CMD线,所有的命令和回应都是通过这条线一位一位的传输.不同模式或不同版本下,命令有不同含义.(SD(SD[0],SD[3:0]),SPI))
      1条时钟线,时钟源是来自APH总线时钟
      4条数据线,SPI模式下用了两条(一条输出,一条输入),SD的一位模式下一条(输出输入),也可以用完四条(输出输入,DATA[0]将分时复用).
SD卡是以块为单位,初始化时有配置,一般为512字节,一个扇区有4096个块.
2410_SDI控制器:
      封装了命令和数据的移位操作,支持SDI_1.0规范.有FIFO和DMA模式.当操作某些寄存器时,控制器会自动帮我们转换成48位的命令包通过移位控制器发给SD从机.
SD命令包格式
----------------------------------------------------------------------------
Bit 位置   47        46                  [45:40]        [39:08]    [07:01]     00
Bit 宽度   1          1                   6          32   7      1
值            0            1                     x         x    x      1
说明   Start Bit Transmission Bit      Command Index   Argument    CRC7    End Bit
----------------------------------------------------------------------------
在S3C2410中要发送CMD需要设置SDICARG,SDICCON两个寄存器.
SDICARG: SDI 命令参数寄存器:
SDICCON: SDI 命令控制寄存器:
这两个寄存器合起来构成SD协议规范中的CMD命令.其中:
      SDICARG[31:0] ===================== CMD[39:8]  命令的参数(根据命令所需的参数位格式设置)
      SDICCON[7:0]  ===================== CMD[47:40] 包含Start Bit,Transmission Bit,Command Index.
ACMD命令:
      ACMD是特殊命令.虽然发送方法也是用SDICARG和SDICCON来发.但是,在发送特殊命令前,
要先发送一条普通的不带参数的CMD55命令,表示下一条所发送的命令是特殊命令.
例如:CMD52 SDICARG:
----------------------------------------------------------------------------
Bit 位置  31       [30:28]           27        26    [25:9]             8     [7:0]
Bit 宽度  1         3                1         1      17                1      8  
说明     R/W flag  Function Number  RAW flag  Stuff  Register Address  Stuff  Write Data or Stuff Bits
----------------------------------------------------------------------------
SCR 该寄存器保存的SD的特殊性信息(例如支持的总线位宽,SD卡的版本),MMC卡没有此寄存器,获取该寄存器的数据需要从数据线读的.
CSD 该寄存器保存着SD卡的详细信息,如块大小,SD卡的容量大小,文件系统等信息.
RCA SD的相对地址(SD卡已经保存在芯片内部)
OCR 该寄存器保存着SD的可供电范围,并且区别是否为HC卡(根据返回的ORC回应第30位是否置1).
CIA (Card I/O Area)
CID SD卡的唯一ID号
CIS (Card Information Structure)跟Linux内核的参数TagList的存放方式很相似,都是以标识号和长度加后续内容表示一个节点.
SD模式的命令说明:
CMD0 GO_IDLE_STATE  Mandatory Mandatory  Used to change from SD to SPI mode
CMD2 ALL_SEND_CID Mandatory  CID not supported by SDIO
CMD3 SEND_RELATIVE_ADDR  Mandatory Mandatory  
CMD4 SET_DSR  Optional    DSR not supported by SDIO
CMD5 IO_SEND_OP_COND    Mandatory  
CMD6 SWITCH_FUNC  Mandatory1 Mandatory1 Added in Part 1 v1.10
CMD7 SELECT/DESELECT_CARD Mandatory Mandatory  
CMD9 SEND_CSD  Mandatory    CSD not supported by SDIO
CMD10 SEND_CID  Mandatory   CID not supported by SDIO
CMD12 STOP_TRANSMISSION  Mandatory
CMD13 SEND_STATUS  Mandatory    Card Status includes only SDMEM information
CMD15 GO_INACTIVE_STATE  Mandatory Mandatory  
CMD16 SET_BLOCKLEN  Mandatory
CMD17 READ_SINGLE_BLOCK  Mandatory
CMD18 READ_MULTIPLE_BLOCK Mandatory
CMD24 WRITE_BLOCK   Mandatory   
CMD25 WRITE_MULTIPLE_BLOCK Mandatory   
CMD27 PROGRAM_CSD  Mandatory    CSD not supported by SDIO
CMD28 SET_WRITE_PROT  Optional   
CMD29 CLR_WRITE_PROT  Optional   
CMD30 SEND_WRITE_PROT  Optional   
CMD32 ERASE_WR_BLK_START  Mandatory   
CMD33 ERASE_WR_BLK_END  Mandatory   
CMD38 ERASE  Mandatory   
CMD42 LOCK_UNLOCK  Optional   
CMD52 IO_RW_DIRECT    Mandatory  
CMD53 IO_RW_EXTENDED    Mandatory  Block mode is optional
CMD55 APP_CMD Mandatory  
CMD56 GEN_CMD  Mandatory   
ACMD6 SET_BUS_WIDTH  Mandatory  
ACMD13 SD_STATUS  Mandatory   
ACMD22 SEND_NUM_WR_BLOCKS  Mandatory   
ACMD23 SET_WR_BLK_ERASE_COUNT Mandatory     
ACMD41 SD_APP_OP_COND  Mandatory
ACMD42 SET_CLR_CARD_DETECT  Mandatory   
ACMD51 SEND_SCR  Mandatory    SCR not supported by SDIO
     
2410 SDI控制寄存器:
SDICON 0x5A000000    R/W SDI control register            
SDIPRE 0x5A000004    R/W SDI baud rate prescaler register
SDICARG 0x5A000008   R/W SDI command argument register   
SDICCON 0x5A00000C   R/W SDI command control register   
SDICSTA 0x5A000010   R/(W) SDI command status register   
SDIRSP0 0x5A000014   R SDI response register 0            
SDIRSP1 0x5A000018   R SDI response register 1
SDIRSP2 0x5A00001C   R SDI response register 2
SDIRSP3 0x5A000020   R SDI response register 3
SDIDTIMER 0x5A000024 R/W SDI data / busy timer register  
SDIBSIZE 0x5A000028  R/W SDI block size register         
SDIDCON 0x5A00002C   R/W SDI data control register        
SDIDCNT 0x5A000030   R SDI data remain counter register  
SDIDSTA 0x5A000034   R/(W) SDI data status register      
SDIFSTA 0x5A000038   R SDI FIFO status register         
SDIDAT 0x5A00003C    (Li/W,Li/B, Bi/W) 0x5A00003F(Bi/B) R/W SDI data register
SDIIMSK 0x5A000040   R/W SDI interrupt mask register      
SD/MMC 初始化流程
步骤是:1)配置时钟,慢速一般为400K,设置工作模式
        2)发送CMD0,进入空闲态,该指令没有反馈
      3)发送CMD8,如果有反应,CRC值与发送的值相同,说明该卡兼容SD2.0协议。
        4)发送CMD55+ACMD41,判断SD卡的上电是否正确,短反馈成功说明该卡为SD卡(短反馈第31位置1为HC卡),否则发送CMD0,有反应说明是MMC卡
        5)发送CMD2,验证SD卡是否接入,长反馈(CID)
        6)发送CMD3,读取SD卡的RCA(地址),短反馈
      7)发送CMD9,读取CSD寄存器获取卡的相关信息
        8)发送CMD7,使能SD卡
        9)配置高速时钟,准备数据传输,一般20M~25M
      10)发送CMD55+ACMD51读取SCR寄存器,SD卡可以通过该值获得位宽,如果是MMC卡则需要使用主线测试来确定卡的位宽。
      11)SD卡发送CMD55+ACMD6配置为4bit数据传输模式(根据SCR读出来的值确定),MMC卡发送CMD6来设置位宽
      12)发送CMD7,使能SD卡,使其进入传输状态),接着发送CMD16设置块大小(根据前面读取的CSD信息确定)。
      13) 把命令参数设置为0,再次发送CMD7,取消选中所有卡。
SD 读操作(注意:标准卡和HC卡最大区别在于单块或者多块读写时命令的起始地址参数对齐,标准卡是以字节计算为起始地址的,而HC则按块地址作为起始地址.例如,一般情况下从CSD获取的卡信息中,块长度都为512字节大小,那么要访问第一个512字节时,对于标准卡,命令的参数直接写512,而HC卡则写1.另外,标准卡所使用的SD协议有可能是1.0也有可能是2.0,但是HC的卡就一定是2.0的,大部分的SD卡都是2.0的,而最新的XC卡则使用3.0的协议.)
步骤是:1)发送CMD7,以卡的相对地址为参数,选中该卡,并使其进入Tran状态
        2)发送CMD17/CMD18,命令的参数需要根据初始化时所判断的卡类型填写,按字节或按块.
      3)循环读取数据
        4)发送CMD12,强制停止所有传输.
        5)发送CMD7,以0作为命令参数,取消所有选中.

4 R. c% m; J/ R" a5 g/ i
收藏 评论2 发布时间:2015-9-15 08:59

举报

2个回答
yanhaijian 回答时间:2015-9-16 12:58:40
科普贴。
anger0925 回答时间:2015-9-16 17:00:34
yanhaijian 发表于 2015-9-16 12:58  @6 {- u5 o# I8 F
科普贴。
+ E+ Z0 s1 B6 v
基础                        

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版