Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1498611
  • 博文数量: 204
  • 博客积分: 4013
  • 博客等级: 中校
  • 技术积分: 4030
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-29 06:34
文章分类

全部博文(204)

文章存档

2012年(204)

分类: C/C++

2012-06-10 13:00:02

    SD存储卡的物理参数,引脚定义以及数据传输的协议兼容MMC卡。SD存储卡的通信是基于一个高级的九针接口(时钟线,命令线,四针数据线,三针电源线),这个接口可以工作在最大频率25MHz和低电压范围。 

    SD控制器集成于芯片内部,用以与SD卡进行通信,实现系统的SD功能扩展。

1CMD线,所有的命令和回应都是通过这条线一位一位的传输.不同模式或不同版本下,命令有不同含义.(SD(SD[0],SD[3:0]),SPI))

1条时钟线,时钟源是来自APH总线时钟

4条数据线,SPI模式下用了两条(一条输出,一条输入),SD的一位模式下一条(输出输入),也可以用完四条(输出输入,DATA[0]将分时复用).

SD卡是以块为单位,初始化时有配置,一般为512字节,一个扇区有4096个块.

SEP4020控制器:

封装了命令和数据的移位操作,支持SDI_1.0规范.FIFODMA模式.当操作某些寄存器时,控制器会自动帮我们转换成48位的命令包通过移位控制器发给SD从机.

SD命令包格式

---------------------------------------------------------------------------------------------------------

Bit 位置 [47]      [46]                 [45:40]          [39:08]      [07:01]        [0]

Bit 宽度  1         1                         6                      32           7            1

值           0         1                           x                x            x            1

说明  Start Bit Transmission Bit  Command Index  Argument     CRC7             End Bit

----------------------------------------------------------------------------------------------------------

ACMD命令:

ACMD是特殊命令.虽然发送方法也是用SDICARGSDICCON来发.但是,在发送特殊命令前,要先发送一条普通的不带参数的CMD55命令,表示下一条所发送的命令是特殊命令.

CID  SD卡的唯一ID

RCA  SD的相对地址(SD卡已经保存在芯片内部)

CSD  该寄存器保存着SD卡的详细信息,如块大小,SD卡的容量大小,文件系统等信息.

SCR  该寄存器保存的SD的特殊性信息(例如支持的总线位宽,SD卡的版本),MMC卡没有此寄存器,获取该寄存器的数据需要从数据线读的.

OCR  该寄存器保存着SD的可供电范围,并且区别是否为HC(根据返回的ORC回应第30位是否置1).

CIA (Card I/O Area)

CIS (Card Information Structure)Linux内核的参数TagList的存放方式很相似,都是以标识号和长度加后续内容表示一个节点.

SD模式的命令说明:

CMD0 GO_IDLE_STATE  Mandatory Mandatory  Used to change from SD to SPI mode /* 使SD卡进入Idle状态 */

CMD2 ALL_SEND_CID Mandatory  CID not supported by SDIO /* 广播获取卡的CID信息 */

CMD3 SEND_RELATIVE_ADDR  Mandatory Mandatory  /* 广播获取SD卡所分配的相对地址 */

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  /* 根据获取指定的RCA,选中SD,如果在选中一个卡的状态下,又选中其他的卡,那么之前的卡会自动取消选中,如果发送地址0,则表示取消选中全部卡 */

CMD9 SEND_CSD  Mandatory    CSD not supported by SDIO /* 获取SD相关的存储信息,如块大小,容量等. */

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 /* 设置SD卡的块大小,CSD寄存器有描述. */

CMD17 READ_SINGLE_BLOCK  Mandatory /* 使SD卡进入传输状态,读取单个块 */

CMD18 READ_MULTIPLE_BLOCK Mandatory /* 使SD卡进入传输状态,读取多个块,直到收到CMD12为止 */

CMD24 WRITE_BLOCK   Mandatory /* 使SD卡进入传输状态,写入单个块 */   

CMD25 WRITE_MULTIPLE_BLOCK Mandatory /* 使SD卡进入传输状态,写入多个块 */    

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 /*特殊指令前命令,在发送ACMD类指令前,需要发送此命令 */  

CMD56 GEN_CMD  Mandatory    

ACMD6 SET_BUS_WIDTH  Mandatory /*设置SD卡的总线位宽,这个需要读取SCR确定*/ 

ACMD13 SD_STATUS  Mandatory    

ACMD22 SEND_NUM_WR_BLOCKS  Mandatory    

ACMD23 SET_WR_BLK_ERASE_COUNT Mandatory     

ACMD41 SD_APP_OP_COND  Mandatory /* 获取SD电压值 */

ACMD42 SET_CLR_CARD_DETECT  Mandatory    

ACMD51 SEND_SCR  Mandatory    SCR not supported by SDIO /* 获取SD卡的SCR寄存器的值 */


阅读(2917) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~