이번 글에서는 SD 메모리 카드와 관련된 마지막 기능으로 SD 메모리 쓰기 동작에 대하여 설명하도록 하겠다.쓰기 동작은 앞에서 설명한 읽기 동작의 정 반대로 구현 하면 된다.SD 메모리 카드 규격 문서에는 위와 같은 표에 대한 설명이 들어 있다. 하나의 메모리 블럭 쓰기 동작을 위해서는 CMD24를 사용하면 되고, 여러 블럭에 대하여 연속 쓰기를 위해서는 CMD25를 사용하면 된다. UART 콘솔 창에서의 명령으로 특정 SD 메모리 블럭에 대한 쓰기 동작을 위한 코드는 다음과 같이 만들 수 있다.static void write_mem(int argc, char **argv) { uint32_t num_blk = 0; uint32_t blk_count = 1; if (argc>1) num_blk = str..
이번 글에서는 SD 메모리 카드 안에 저장 되어 있는 데이터를 읽어 오는 방법에 대해서 설명하도록 하겠다.SD 메모리 카드에서 데이터를 읽어 올때는 block 단위로 읽어 올 수 있는데, 한번에 하나의 블럭을 읽어 오는 방법과 하나의 명령으로 여러 블럭의 데이터를 읽어 오는 방법이 있다.위의 표에서 볼 수 있듯이, 하나의 블럭단위로 읽어 오기 위한 명령어는 CMD17이고, 여러 블럭을 한꺼번에 읽어 오기 위한 명령은 CMD18이다.명령어를 수행할 때에는 데이터를 어디에서 읽어 올지 그 주소를 알려주어야 하는데, 메모리 용량에 따라 주소의 의미가 달라진다. 위의 그림에서 보는것처럼 SDHC나 SDXC type의 메모리의 경우 block address를 의미하는것이지만, SDSC의 경우에는 byte addr..
이번 글은 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비트가 어떤 동작을 할 것..
이번에 만들어 볼 프로젝트는 임베디드 시스템에서 저장 장치로 널리 사용되고 있는 SD memory card를 제어해 보는 것이다.SD memory card는 위의 그림과 같이 세가지 모양으로 만들어진다. 크기는 모두 다르지만 동작은 동일하다. 이 프로젝트를 진행 하기 위해서는 "SD Specifications Part 1 Physical Layer Simplified Specification"라는 긴 이름의 문서를 참고하여야 한다.SD 메모리 카드는 임베디드 뿐만 아니라 스마트 단말기등 거의 대부분의 분야에서 워낙 널리 쓰이기 때문에 많은 SoC에 SD 메모리 카드를 지원하기 위한 하드웨어 블럭이 내장되어 있다. 위에 소개한 문서에도 자세히 설명되어 있지만, SD 메모리 카드는 기본적으로 SD mode로..