이번 글은 SD 메모리 카드 내부에 있는 레지스터 중 CSD(Card Specific Data) 레지스터의 값을 읽어보는 방법에 대해서 설명하도록 하겠다.주의할 점은 메모리 카드 용량이 standard 인지 아니면 SDHC나 SDXC에 따라 다른 CSD 레지스터 구조를 가진다는 것이다.CSD 레지스터를 읽어 오기 위한 command는 CMD9이다. CMD_SEND_CSD 명령어에 해당된다.CSD 레지스터는 CID 레지스터와 마찬가지로 128비트로 이루어져 있다.다음과 같은 코드를 이용하여 CSD 레지스터의 값을 읽어 오면 된다.static void read_csd(int argc, char **argv) { struct sd_cmd cmd; uint32_t csd_structure; printf("\n\..
위의 그림은 SD memory card의 내부 구조를 간단히 보여주고 있는 것이다. SD 메모리 안에는 8개의 레지스터가 있는데, OCR은 이미 앞의 글에서 읽어 보았고, 이번 글에서는 CID 레지스터를 읽어 보는 방법에 대해서 설명하도록 하겠다.다음 글에서는 CSD 레지스터를 읽어 보아서 어떤 내용이 들어 있는지 알아볼 예정이다.CID 레지스터는 위의 그림과 같이 128비트의 정보를 가지고 있다. 위의 그림을 보면 알겠지만 SD 메모리 카드 자체를 구별하기 위한 정보를 제공하고 있다. 제조할 당시에 들어가는 내용들이 많이 있음을 알 수 있다.CID 레지스터를 읽기 위해서는 CMD10(SD_CMD_SEND_CID) 명령을 이용하면 된다.User Interface - CLI2에서 설명한 방법을 이용하여 U..
MCU와 SD 메모리 카드가 제대로 연결되었는지 확인하는 차원에서 메모리 초기화 과정부터 진행해 보도록 하겠다.메모리 카드에 전원이 들어간 이후에 수행하여야 할 절차에 대한 설명을 볼 수 있다.중요한 것은 첫번째 command를 받기 전에 74 clock이 필요하다는 것과, 초록색 박스에 보이는 것처럼 초기화에 필요한 command와 그 순서를 알아야 한다.모든 동작은 Host에서 SD 메모리 카드로 command를 이용하여 이루어진다. 메모리 카드에서 command를 받으면 반드시 command 종류에 따른 몇가지 response 데이터를 보내주도록 되어 있다.Command는 48비트(6바이트) 크기를 가진다. 처음 2비트 값은 반드시 '01'로 시작 되어야 한다. 그 다음 6비트가 어떤 동작을 할 것..