9/12/2014

MMC/SD Interface 기본이해

1. SD Card Spec 관련내용  (ver 2.0)

SD Card Interface는 SD Card가 존재하며, SD Card를 읽고 쓰는 Reader가 존재한다.
Reader는 Host 기능을 하며, SD Card는 Device로 동작을 한다.
SD Card Spec는 지속적으로 업그레이드 되기때문에 관련내용은 아래의  사이트에서 찾아보자.

  https://www.sdcard.org

SD Host(SD Card Reader)는 SD Card 뿐만 아니라, SD IO를 이용하여 외부 Device와도 연결이 가능하다.
  1. SD Host (Card Reader)/ SD Card 
  2. SD Host / SD IO Device (e.g. WLAN)

  • SD Host  controller
  https://www.sdcard.org/developers/overview/host_controller/simple_spec/Simplified_SD_Host_Controller_Spec.pdf

  • SDIO
  https://www.sdcard.org/developers/overview/sdio/sdio_spec/Simplified_SDIO_Card_Spec.pdf

현재는 version 4.0도 있어, 이것으로는 이해

1.2. SD Card Pin 구조 

우선 SD Card의 Pin 구조 부터 알아보자.

  • SD Card의 구조 



  • SD Card Pin out 





  • Micro SD PinOut 







  • SD IO Pin out 







  • SDIO PIN 동작 

출처: http://www.smart-dv.com/vip/sdio.html

  • SD Card 및 IO 관련내용 
좀더 자세한 구조와 상세한 내용은 아래에서 파악해보자.

관련참고사항 사이트
  http://techblog.tistory.com/90


1.3 SD Card의 Speed 관련내용 

  • SD Card Bus Speed 
  https://www.sdcard.org/developers/overview/bus_speed/


2. MMC와 SD Card Bus Interface 

오래전에 Linux Kernel에서 SD Host Driver를 수정하고 이에 관련된 부분을 간단히 정리한다.
현재 SD Card가 많이 변했기 때문에 이부분은 추후 변경되어야 한다.

2.1 SD BUS 

SD Bus는 기본적으로 Command 방식으로 동작되어지며, Command는 CMD pin을 이용하고 Data는 DAT0 pin or DAT0,1,2,3 pin 으로 나누어 전송을 한다.

BUS라고 말한 것은 당연히 여러개의 Device를 지원을 하기때문에  말했을 것이라고 생각한다.
물론 나는 여러개의 Device를 연결해서 사용해본 적이 없다.


  • CMD와 DAT의 동작의 Flow

아래의 동작을 보면 쉽게 이해를 할수 있다.







2.2 Command 와 Response ( CMD Bus Pin) 

CMD Pin에서 사용되는 Command는 기본적으로 Command Token과 Response Token으로 구분되어지며,


  • Command Token  


  • Response Token 


2.3 Data Bus

SD Bus는 두가지 모드를 지원을 하고, Standard Bus(DAT0) 와 Wide Bus(DAT0,1,2,3) 그리고, Software적으로 Command에 따라
Data 전송 방식이 Usual Data (8Bit width)와 Wide Width Data(512Bit width)를 지원을 한다.
(8bit width와 512bit width는 Command에 의해 결정된다. 512 bit width ACMD13)


아래와 같이 간단히 PPT에서 정리해봤다.


SPI BUS는 생략

2.4 Hi Speed Mode

SD Card는 Default Mode 와 Hi speed Mode로 나누어지며, 아래와 같다.


  • Default Mode (Clock 25MHz)

Transfer Speed: 12.5MB/s (25MHz * 4 (Data Bus) / 8bit)


  • Hi Speed Mode (Clock 50MHz)

Transfer Speed: 25MB/s (50MHz * 4 (Data Bus) / 8bit)


이 속도는 SD Card Main Register인 CSD의 TRANS_SPEED의 값으로 알 수 있다.


2.5 Command 와 Response Tokens 정리 


  • Command Token (48bit with CRC) 



  • Response Token (48bit with CRC) : R1/R1b/R4/R5/R6/R7





  • Response Token (48bit with no CRC) : R3



  • Response Token (48bit with no CRC) : R3



2.6 SD Card 주요 Register




  • Main Register 
  1. OCR: Card의 Voltage 상태 및 High Capacity or Standard Capacity 인지를 나타낸다.
  2. CID: Card의 관련 제조사의 정보가 있다.
  3. CSD: Card의 핵심 레지스터 군들이 모두 이곳에 있다. (자세한 내용은 Spec)(Read &Write Block size, Transfer Speed , etc ) 
  4. SCR: Card의 Data bus width, SD Spec Version, Security 지원여부를 나타낸다.
  5. RCA: Card의 Relative Card Address. (Host가 설정.)
  6. SSR: Card의 Status (Card의 설정된 정보 Card Type, Speed Class, Data bus width)
  7. CSR: Card의 Status (Card의 Error Check & Card의 State)

  • SD Card State & Mode 



2.7  Initialize SD Card 


  • Identification Mode -> Data Transfer Mode



  1. 카드를 삽입하자마자, Card를 Reset을 해준다. (CMD0- GO_IDLE_STATE)
  2. Card의 OCR Register를 읽어온다. (Host의 Capacity 설정) (ACMD41-SD_SEND_OP_COND)
  3. Card의 CID Register를 읽어온다. (CMD2-ALL_SEND_CID)
  4. Card의 RCA Register를 처음에 읽어 올 때는 카드가 RCA 주소를 만든다. (CMD3-SEND_RELELATIVE_ADDRESS)
  5. Host가 RCA Register를 새로 설정해준다. (CMD3-SEND_RELELATIVE_ADDRESS)

*Operation Mode와 State를 혼동하지 말도록.

(자세한 내용은 Spec)


2.8 Data Transfer Mode


주요 Read & Write Command

  • CMD7-SELECT/DESELECT_CARD
  • CMD24-WRITE_BLOCK
  • CMD25-WRITE_MULTIPLE_BLOCK
  • CMD17-READ_SINGLE_BLOCK
  • CMD18-READ_MULTIPLE_BLOCK
  • CMD12-STOP_TRANSMISSION


자세한 Flow 및 부족한 정보들은 아래의 Spec 참조하도록하자.
상위내용들은 아래의 내용에 다 포함되어있다.


  • 참고자료

Physical Layer Simplified Specification Version 2.00