리눅스에서 제로부트를 위해 빠르게 디바이스들을 살리는 작업을 하고 있다.

그중 MMC, SD 를  살리느라 본의 아니게 이것들에 대해 공부를 많이 하게 된다.


우선 MMC, SD 는 무엇이 틀린것인가?

MMC, SD 에 무조건 있는 신호선들은 CMD, CLK, DAT(1~8) 이다.

위의 신호선중 DAT 버스에 비밀이 있다,.


우선 MMC 가 먼저 출시 되었으며 1-bit 버스를 사용하였다.

그 이후 sandisk 에서 SD 카드가 나왔다.. 4-bit 버스를 사용한다.  (물론 security 기능이 추가 되었지만)

그런 이후 요즘들어 HS MMC 라고 하는 것들이 나오는데 무려 8-bit 버스를 지원한다.  ㅅ

SD 의 경우 클럭이 52MHz 까지 지원하며 초기 MMC 는 22MHz 로 알고 있다.

각 카드들은 하위 호완성이 있어 아래쪽 버스비트를 지원한다.


eMMC, iNAND 라고 하는 칩들이 있는데 카드가 아닌 IC 부품으로 실장되는 MMC 이며 8-bit 버스들을 지원한다.

즉 속도가 무자게 빠르다.  이것들 때문에 OneNAND 라고 하는 칩이 단종된것 같다.

MMC 에는 부트모드라고 하는 모드가 있는데 전원이 들어 온 이후 아주 간단하게 데이타를 읽을 수 있는 모드이다.(자세히는 모르겟다.. 필요한경우만 공부한다 ㅎㅎ)


MMC, SD 카드또는 IC 들은 (통칭해서 MMC)는 두가지 상태가 존재한다. 

제어모드(임의로 붙였다)와 전송모드이다. 초기에 제어모드이며 데이타를 읽고 쓰기 위해 전송모드로 진입하여야 한다.

제로부트에서는 전송모드로 진입시키면 된다. 이후에는 커널코드에서 카드를 잘 사용할 것이기 때문에..


SDIO 는  SD 이므로 4비트 버스이며 특별히 데이타 버스중 DAT(1) 비트를 인터럽트로 사용할 수 있다.

MCU 가 SDIO 를 지원한다는 것은 우선 이 인터럽트가 지원되면 되는 것이다

그리고는 소프트웨어의 몫이다


우리회사 ezboot 에서도 MMC 를 지원하려고 작성중에 있다.  헌데 MMC 를 살리면 무조건 FAT 도 해야 한다.

일이 마나 ㅜ,ㅜ