SDIO 에 대한 개략적인 구조와 방식에 대해 설명한다.
우리가 흔히 말하는 SDIO 슬롯에는 SD 카드 뿐만 아니라, MMC, 어댑터를 사용하면, Micro SD 카드까지 사용이 가능하다.

회로 관점에서 본 SDIO

SDIO 의 경우, 총 9개의 핀으로 구성되어 있는데, 이들은 다음과 같다. 총 4 개의 데이터 라인으로 통신한다.

SD_DATA0
SD_DATA1
SD_DATA2
SD_DATA3
GND
GND
SD_CLK
SD_VCC
SD_CMD

커널에서 동작 확인

커널 빌드 시, SDIO Debug 옵션을 켰다면(enable), 부팅 시에 아래와 같은 메세지가 지속적으로 출력될 것이다.
참고로 아래는 SDIO 2개의 포트를 가진 타겟이며, 0 번 포트에는 아무런 디바이스도 꼽혀있지 않고, 1 번 포트에는 WiFi 모듈이 꼽혀있는 상태이다.

처음 부팅 시, 보드의 SDIO 포트를 초기화하고, 디바이스가 Plugin 되기 전까지 디바이스가 꼽혀있는지 지속적으로 체크한다. SDIO 디바이스 마다 서로 다른 클럭 속도로 동작하기 때문에 커널에서는 클럭 속도를 달리하면서 검색을 시도한다.

[    1.790266] mmc1: mmc_rescan: trying to init card at 400000 Hz
[    1.796215] , rootpath=
[    1.799450] yaffs: dev is 32505863 name is "mtdblock7" rw
[    1.804863] yaffs: passed flags ""
[    1.866219] mmc1: queuing unknown CIS tuple 0x80 (2 bytes)
[    1.877383] mmc1: queuing unknown CIS tuple 0x80 (3 bytes)
[    1.890874] mmc1: queuing unknown CIS tuple 0x80 (3 bytes)
[    1.907011] mmc1: queuing unknown CIS tuple 0x80 (7 bytes)
[    1.923864] mmc1: queuing unknown CIS tuple 0x80 (10 bytes)
[    1.929884] PHY: 0:01 - Link is Up - 100/Full
[    1.986534] mmc1: new high speed SDIO card at address 0001

위의 로그를 보면, 1 번 포트에서 꼽혀있는 디바이스를 인식하고, CIS tuple 을 읽는다. 이 결과로 디바이스의 특징을 파악하고, high speed 로 동작하도록 설정한 것을 볼 수 있다.
아래 로그는 아무것도 꼽혀있지 않은 0 번 포트에서 지속적으로 디바이스 검색을 과정이다.

[   28.757613] mmc0: mmc_rescan: trying to init card at 400000 Hz
[   28.834663] mmc0: mmc_rescan: trying to init card at 312500 Hz

참고 자료

  • computer/itx/sdio_핵심가이드.txt
  • Last modified: 3 years ago
  • by likewind