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

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)

--
추가된 부분 - SD카드 최대용량에 관한 내용

원래 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까지만 사용할 수 있다."
Posted by nautes

일명 Poorman's version으로 구현해 본 아뒤노를 위한 마이크로SD(Transflash) 인터페이스이다.

마이크로SD 소켓을 구입하기도 힘들고 구한다 해도 SMD 타입의 좁은 피치를 가지고 있기 때문에 PCB를 만들지 않으면 신호선을 연결하기가 힘들다.
그래서 찾아낸 방법이 마이크로SD를 구입할 때 같이 껴 주는 MicroSD to SD adapter를 소켓 대용으로 이용하는 것이다.
SD의 경우 9개의 핀이 있지만 SPI모드로 동작하는 경우는 7개 핀만 사용한다. 각 핀의 배치는 다음과 같다. 이 7개의 동박면에 직접 신호선을 땜질하는 것이다.

여기서 주의할 점은 SD는 3.3V 디바이스라는 점이다. Vdd뿐 아니고 다른 핀들도 3.3V레벨의 신호를
사용해야 한다.

MicroSD(Transflash)의 핀 배치는 다음과 같다.


Arduino호환보드중에 전원으로 3.3V를 사용하는 경우는 각 핀을 Arduino SPI에 직접 연결시켜 주면 된다. 하지만 대부분의 Arduino 보드들은 5V를 사용하기 때문에 신호 레벨을 바꿔 줘야만 한다.

위 의 회로를 사용해서 Arduino와 연결해주면 된다. 단 위의 회로에서 왼쪽에 uSD to SD adapter는 라이브러리를 따로 그리기 귀찮아서 그냥 MicroSD 소켓을 사용해 버려서 핀 번호가 좀 다르다. 위의 사진을 보고 같은 이름의 핀을 연결시켜 주면 된다. ^^;;;

회로 부분만 만능기판에 만들어 본 것이다.

최종적으로 MicroSD adapter의 핀에 납땜질을 해서 신호선을 뽑아내어 만능기판 회로에 연결하고 아답터를 접착제나 실리콘을 사용하여 기판의 아래쪽에 붙여주면 된다.

이 렇게 구성하여 arduino에 연결하면 MicroSD를 FAT16으로 포맷하여 파일시스템으로 사용할 수 있게 된다. MicroSD가격이 많이 저렴해 졌기 때문에 아주 적은 비용으로 대용량의 파일시스템을 추가할 수 있기 때문에 장시간의 데이터 로그가 필요한 경우에 매우 유용하게 사용할 수 있다.

Posted by nautes

이전버튼 1 이전버튼