티스토리 뷰

프로젝트/microSD

SD memory card - CSD

Just4Fun 2017. 7. 25. 21:09

이번 글은 SD 메모리 카드 내부에 있는 레지스터 중 CSD(Card Specific Data) 레지스터의 값을 읽어보는 방법에 대해서 설명하도록 하겠다.

주의할 점은 메모리 카드 용량이 standard 인지 아니면 SDHC나 SDXC에 따라 다른 CSD 레지스터 구조를 가진다는 것이다.

CSD 레지스터를 읽어 오기 위한 command는 CMD9이다. CMD_SEND_CSD 명령어에 해당된다.

CSD 레지스터는 CID 레지스터와 마찬가지로 128비트로 이루어져 있다.

다음과 같은 코드를 이용하여 CSD 레지스터의 값을 읽어 오면 된다.

SD 메모리 카드 규격 문서에서 CSD 레지스터를 설명한 부분을 찾아 보면 다음과 같은 내용을 볼 수 있다.

128비트 레지스터 값중에서 최상위 2비트에 해당되는 127:126의 값이 CSD_STRUCTURE 필드 값이다.

 CSD_STRUCTURE 값이 0이면 CSD Version1.0이고, 이 값이 1이면 CSD Version 2.0이 된다.

위의 코드에서 24번줄이 CSD_STRUCTURE 필드값을 뽑아 내는 동작을 하는 것이다.

먼저, Version 1.0에 해당 되는 내용은 다음과 같다.

위의 표를 참조하여 필요한 필드를 분리하는 코드는 다음과 같다.

위의 코드가 적용된 SD 메모리카드에서 CSD 레지스터 값을 읽어 보면 다음과 같은 결과 화면을 볼 수 있다.

CSD Version 2.0의 구조를 갖는 SD 메모리 카드에서는 다음과 같은 CSD 구조를 가진다.

그리고, 위의 표를 참조하여 CSD Version2.0 데이터를 분리하는 코드는 다음과 같이 만들어 볼 수 있겠다.

위의 코드를 이용하여 SDHC 메모리 카드에서 읽어 본 CSD 레지스터 값은 다음과 같이 출력되었다.

위의 결과 화면들을 보면 알 수 있겠지만, CSD 레지스터를 읽으면 전체 메모리 용량이 얼마인지 계산해서 확인해 볼 수 있다.



cmd_csd.c


'프로젝트 > microSD' 카테고리의 다른 글

SD memory card - Write  (3) 2017.07.29
SD memory card - Read  (0) 2017.07.26
SD memory card - CID  (0) 2017.07.17
SD memory card - 초기화  (16) 2017.07.14
SD memory card - 준비  (0) 2017.07.14
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함