2009년 6월 4일 목요일

SD와 SHDC, 그리고 SDIO (SD vs SDHC, and SDIO)

인터넷에 상당히 자주 올라오는 질문이기도 하고 잘못된 정보가 상당히 널리 퍼져있는 질문이기도 하다.

SD는 마츠시타, 토시바, San Disk등이 휴대용 장비에서 사용하기 위해 개발한 메모리 카드 포맷이다.
일반적으로 10~20MB/s 정도의 전송속도를 가지고 추후 MiniSD, MicroSD(또는 Transflash라고도 불린다) 타입이 발표되었다.

각각의 크기는 위의 그림과 같다. SD는 최대 4G까지 지원하고 파일 시스템으로 FAT16 또는 FAT32를 사용할 수 있다.
SD카드에는 3가지 전송모드(1-bit SD, 4-bit SD, SPI mode)가 있고 각 카드는 3가지 전송방식을 모두 지원한다. (단 MicroSD인 경우 SPI모드는 옵션이다.) 일반적인 경우 25MHz 클럭까지 지원해야 하고 High speed인 경우 50MHz 클럭을 지원해줘야 한다.

각각의 pinout은 다음과 같다.

먼저 SD카드의 pinout이다.

MiniSD카드의 pinout이다.

MicroSD카드의 pinout이다.

물리적인 pin 갯수는 달라도 비교해보면 실제 신호선은 동일하고 나머지는 사용하지 않는다.

SDHC(SD 2.0)는 SD의 용량 제한을 해결하기 위해 나온 표준이다. SD(SD 1.x)와 물리적, 전기적 form factor는 동일하다. 가장 큰 차이는 어드레싱 범위를 확장하기 위해 SD에서 사용하던 byte addressing 대신 sector addressing을 사용하는 것이다. 이를 통해 이론상 최대 2T까지 addressing이 가능하지만 현재 SDHC 스펙(SD 2.0)으로는 32GB가 최대고 새로 나올 리비젼 (SD 2.x)에서는 더 확장될 예정이다.
SDHC는 SD에 대해 backward compatibility를 가지고 있기 때문에 SDHC리더기에서 SD를 그대로 사용할 수 있다. 이전의 SD장비들은 SDHC의 sector addressing을 지원하지 않기 때문에 SDHC를 사용할 수 없다. 다만 일부 장비들은 SD 컨트롤러의 펌웨어 업그레이드를 통해 SDHC를 지원하도록 할 수 있는 경우도 있다.

SDHC는 일반적으로 FAT32로 포맷하지만 UFS2/ext2 또는 exFAT같은 파일 시스템도 사용할 수 있다.

또하나의 표준은 SDIO(Secure Digital I/O)이다. 이 역시 물리적 form factor는 SD와 동일하다. SD는 메모리를 위한 표준인데 비해 SDIO는 그 이외 다른 주변기기들을 연결하는데 사용한다.

아주 널리 사용되지는 않지만 무선랜카드, 블루투스, GPS수신기, 카메라, 바코드리더 등등 다양한 종류의 제품이 나와 있고 몇년 전에 주로 PDA에서 많이 사용되었었다.

SDIO와 SD의 가장 큰 차이는 SPI모드에 IRQ(인터럽트) 신호가 추가된 것이다. 그렇기 때문에 SDIO 카드는 SD슬롯이 SDIO도 지원하는 장비가 아니면 사용할 수가 없다.

--
인터넷에 가장 널리 퍼져있는 잘못된 정보로는 'SD에 비해 SDHC는 핀이 하나 추가되기 때문에 SD에서 SDHC를 사용할 수 없다.'는 것이다. 위에도 써 놓은것처럼 SD와 SDHC의 물리적, 전기적 form factor는 동일하다. 차이는 SD컨트롤러가 SDHC에 추가된 sector addressing을 할 수 있는가 여부이기 때문에 일부 장비의 경우는 펌웨어 업그레이드를 통해 SDHC를 지원하게 만들어 줄 수 있는 경우도 있다. 아마 저 헛소문의 근원은 SDHC와 SDIO를 잘못 알고 있는게 아닌가 싶다. (SDIO는 IRQ 신호가 추가된다.)
 
파일시스템도 SD의 경우 일반적으로 FAT16을 사용하고 SDHC는 일반적으로 FAT32를 사용하는것 뿐 꼭 그렇게 해야 한다는 법은 없다. SD나 SDHC 모두 FAT16, FAT32 뿐 아니고 UFS2/ext2 또는 exFAT같은 파일시스템을 사용할 수 있다. (다만 SDHC는 용량문제때문에 FAT16을 사용하는 경우 전체 용량을 다 사용할 수 없게 되기 때문에 FAT16을 사용하는 경우는 거의 없다.)

* 심지어 인터넷 기자라는 사람의 기사에 "SD카드와 SDHC카드의 가장 큰 차이점은 파일시스템이다. SD카드는 구식인 FAT16 파일시스템을 사용하고, SDHC카드는 신식인 FAT32 파일 시스템을 사용한다."까지 이런 소리를 써 놓고 있다. 잘 모르는 사람들이야 그렇다고 쳐도 기술담당 기자라면 자기가 쓰는 기사 내용에 대해서 최소한의 공부는 해서 잘못된 정보를 퍼트리지는 말아야 하는데 이건 오히려 앞장서서 혼란을 일으키고 있으니.... -_-;;;

* 마이크로SD를 아뒤노에 연결시키기 (MicroSD interface for Arduino)

--
리플에 의해 추가된 부분

원래 SD1.0에서는 128bit의 CSD(Card Specific Data) register를 가지고 있는데 이 중 12비트(C_SIZE[73:62])가 메모리 클러스터 갯수(1~4096)를 나타내고 3비트(C_SIZE_MULT[49:47])가 클러스터 내의 블럭 갯수(000부터 111까지가 각각 4,8,16,32,64,128,256,512을 나타냄)를 나타낸다. 표준 블럭 크기는 512바이트라 초기 SD에서는 최대 4096*512*512 = 1GB까지 가능하다.
그 후 4비트(READ_BL_LEN[83:80], WRITE_BL_LEN[25:22])를 통해 블럭사이즈를 1024, 2048 바이트로 할 수 있게 되어 2G, 4G (4096*512*1024, 4096*512*2048)도 가능하게 되었다. (원래는 이 값이 일반적으로 512로 고정되어 있었음)

다만 오래된 장비들은 이 부분이 스펙에 추가되었어도 2G, 4G를 인식하지 못하는 경우도 있다. SD Association의 스펙에 보면 다음의 문구가 들어있다.
"2G짜리 카드를 만들기 위해서는 Maximum Block Length(READ_BL_LEN, WRITE_BL_LEN)을 1024로 만들어 줘야 한다. 하지만 CMD16에 의해 설정되는 Block Length는 최대 512 byte Block length를 가진 카드와 일관성을 유지하기 위해 최대 512까지만 사용할 수 있다."

댓글 4개:

  1. SD가 4GB까지 지원하는 줄 알았는데 SD Association에서는 2GB 까지라고 되어있는 걸 봤습니다. SD로도 4GB 제품이 있었던 것 같은데 저기선 2GB가 최대라고 하니 헷갈리네요.



    http://www.sdcard.org/developers/tech/sdcard/

    답글삭제
  2. 전문적인 지식을 알기쉽게 풀어주셔서 감사합니다. 저도 'SD에 비해 SDHC는 핀이 하나 추가되기 때문에 SD에서 SDHC를 사용할 수 없다.'

    이런씩으로 알고 있었는데 별다른 차이가 없네요^^

    답글삭제
  3. @xa - 2009/06/04 14:19
    저게 좀 혼동이 많이 되는 부분이죠.

    내용이 길어져서 본문에 추가하겠습니다.

    답글삭제
  4. @JaeHo Choi - 2009/06/04 14:28
    저도 저 SDHC가 핀이 하나 추가되었다는 말을 얼마나 자주 봤는지 볼때마다 거슬려 이 글을 쓰게 되었습니다. :)

    답글삭제