티스토리 뷰

프로젝트/microSD

SD memory card - Write

Just4Fun 2017. 7. 29. 13:02

이번 글에서는 SD 메모리 카드와 관련된 마지막 기능으로 SD 메모리 쓰기 동작에 대하여 설명하도록 하겠다.

쓰기 동작은 앞에서 설명한 읽기 동작의 정 반대로 구현 하면 된다.

SD 메모리 카드 규격 문서에는 위와 같은 표에 대한 설명이 들어 있다.  하나의 메모리 블럭 쓰기 동작을 위해서는 CMD24를 사용하면 되고, 여러 블럭에 대하여 연속 쓰기를 위해서는 CMD25를 사용하면 된다.

UART 콘솔 창에서의 명령으로 특정 SD 메모리 블럭에 대한 쓰기 동작을 위한 코드는 다음과 같이 만들 수 있다.

이미 앞에서 설명한 읽기를 위한 코드와 동일하므로 따로 설명이 필요하지는 않을것이다.

하나의 블럭에 대한 쓰기 동작을 위한 write_mem_single() 코드도 읽기 동작에서 사용했던 코드와 거의 유사하다.

다른 점이 있다면, 쓰기 동작을 확인하기 위하여 쓰고자 하는 데이터를 미리 특정 값으로 채우기 위한 fill_mem() 코드가 추가되었다는 것과, 쓰기 동작을 위한 CMD를 지정하였고 17번줄을 보면 읽기 동작에서는 dst가 사용되었는데 쓰기 동작에서는 src를 사용하였다.

여러개 블럭을 한번의 명령으로 쓰기 위한 write_mem_multi()은 위와 같이 만들 수 있다.  역시 read_mem_multi()와 동일한 구조를 가지며 몇개의 코드만 write에 해당 되는 내용으로 수정한 것을 볼 수 있다.

쓰기 동작을 확인하기 위한 특정 패턴으로 데이터를 만들기 위한 fill_mem()은 위와 같다.

2바이트 값의 일련 번호를 만드는 코드이다.  이 값으로 제대로 읽히는지 확인해 보면 쓰기 동작이 제대로 동작 되었는지 확인해 볼 수 있을 것이다.

Single write 명령을 수행한 결과 화면을 볼 수 있다.

Write 하기 전에는 모두 0으로 채워져 있던 블럭이 write 동작 후 빨간 박스로 표시되어 있는 부분처럼 2바이트 단위로 1씩 증가 되는 값이 쓰여져 있음을 확인할 수 있다.

쓰기 동작을 확인한 결과는 위와 같다.  512바이트 크기의 데이터가 제대로 쓰여져 있음을 확인할 수 있다.

Multi block 쓰기 동작에 대한 결과 화면은 위와 같다.  1~4번 블럭에 대한 읽기 동작을 수행하여 전체 영역이 0으로 채워져 있음을 확인한 후, 쓰기 동작후 일련 번호로 바뀌어 진것을 확인하였다.

4개의 블럭에 대한 연속 쓰기 동작의 전체 결과는 위와 같이 확인 되었다. 전 영역에 대한 쓰기 동작이 제대로 수행되었음을 확인하였다.


microSD.zip


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

SD memory card - Read  (0) 2017.07.26
SD memory card - CSD  (0) 2017.07.25
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/12   »
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
글 보관함