2014-09-14 3 views
5

저는 Arduino가있는 프로젝트에서 작업 중이므로 일부 데이터를 영구 저장하고 싶습니다. 저는 이미 MicroSD 리더기가있는 이더넷 실드를 사용하고 있습니다.Arduino를 사용하여 SD에서 이진 데이터 읽기/쓰기

저장하는 데이터는 엄청나게 작습니다. 지금은 한 번에 3 바이트를 절약 할 것입니다. 내가 정말로 원하는 것은 바이트 x에서 시작하여 쓰기를 위해 SD 카드를 열고 나서 y 바이트의 데이터를 쓰는 것입니다. 다시 읽으려는 경우 x에서 시작하는 y 바이트를 읽습니다.

그러나 필자가 보았던 모든 코드는 불필요한 오버 헤드처럼 보이는 파일 시스템으로 작업하는 것을 포함합니다. 이 데이터를 다른 시스템에서 읽을 필요가 없으며 저장 공간에 문제가 없으며 걱정할 카드에 다른 데이터가 없습니다. 바이너리 데이터를 SD 카드에 직접 기록하는 방법이 있습니까?

+0

체크 아웃 http://www.roland-riegel.de/sd-reader/ 원시 SD 카드 읽기/쓰기 루틴. FAQ 섹션에서는 Arduino에 몇 가지 변경 사항을 적용하여 사용할 수 있다고 말합니다. – kums

답변

5

원시 이진 데이터를 SD 카드에 쓸 수 있습니다. 대부분의 사람들은 SD 카드가 지원하는 4 핀 SPI 인터페이스를 사용하여이를 수행합니다. 불행히도 데이터는 바이트 주소가 지정되지 않고 블록 주소가 지정됩니다 (블록 크기는 일반적으로 512 바이트).

즉, 바이트 516에서 4 바이트를 쓰고 싶다면 블록 0x00000001 (두 번째 블록)을 읽은 다음 오프셋을 계산하고 데이터를 쓰고 전체 블록을 다시 써야합니다. (나는이 제한이 더 많은 핀을 사용하는 SD 인터페이스에 적용된다고 말할 수 없다. 경험이 없다.)

많은 사람들이 "불필요한 오버 헤드"가 포함 된 라이브러리를 사용하는 이유가 여기에있다.

정전에 직면했을 때 데이터를 로깅하는 방법이 필요했기 때문에 나는 이것을 해내 야했다.

http://elm-chan.org/docs/mmc/mmc_e.html

당신은 아마 쉽게 당신의 작은이 메모리 버퍼에 기록하게 찾을 수 있습니다, 당신은 데이터의 충분한 양이있을 때 SD 카드에 덤프 : 나는 매우 도움이 다음과 같은 자원을 발견 보람있는 것.

주위를 둘러 보시면 SD SPI 인터페이스를 다루는 많은 오픈 소스 코드를 직접 확인할 수 있으며 직접 시스템을 구현하기위한 참고 자료로 사용할 수 있습니다.

+0

안녕하세요, SD 카드에서 사용할 수있는 블록의 총 수를 찾는 방법을 알려주시겠습니까? – Sagar

+0

CSD 레지스터에서 해당 값을 얻을 수 있습니다. – user373884

관련 문제