아두이노 SD 카드 완벽 가이드: 설정, 연결, 사용법
수많은 아두이노 프로젝트를 실행하시나요? 그리고 중요한 정보와 로그 데이터를 대량으로 저장해야 하나요? 해결책은 아두이노 SD 카드 사용입니다. 어떻게 작동할까요?
이 글에서는 장치가 무엇인지, 어떻게 연결하는지, 어떻게 사용하는지 등 알아야 할 모든 것을 안내합니다.
계속 읽어보시면 필요한 모든 것을 알게 될 것입니다.
아두이노에서 SD란 무엇인가?

아두이노 SD 카드
이미지 출처: Pixlr
SD 카드 또는 마이크로 SD 카드는 두 가지 주요 구성 요소를 가진 장치입니다. 이 구성 요소들은 데이터 로깅을 아두이노 프로젝트에 쉽게 포함할 수 있게 도와줍니다. 대부분의 마이크로 SD 카드 작동 전압은 3.3V입니다.
결과적으로 5V 로직 회로에 직접 연결하는 것은 불가능합니다. 요약하자면 3.6V 이상의 전압으로 작업하면 SD 카드가 손상됩니다.
그래서 모듈에 레귤레이터(온보드 초저압 강하)가 있어 3.3~6V 전류 전압을 약 3.3V로 변경합니다.
또한 모듈의 칩(74LVC125A)은 연결 로직을 3.3~5V에서 3.3V로 변경합니다. 이 과정을 '로직 레벨 시프팅'이라 부르며, 보드가 3.3V와 5V 두 마이크로컨트롤러(아두이노)와 연결될 수 있음을 의미합니다.

마이크로컨트롤러 구성 요소
표준 SD 카드를 아두이노와 어떻게 인터페이스하나요? 두 가지 방법이 있습니다: SDIO 모드와 SPI 모드.
대부분 SD 카드 모듈은 SPI 모드 기반(오버헤드 적음 & 낮은 속도)입니다. 대부분의 마이크로컨트롤러가 사용하기 쉬운 모드입니다.

메모리 카드 모듈
반면 더 빠른 모드는 SDIO이며 휴대폰, 카메라 등 다양한 장치에 적용됩니다. 하지만 이 모드는 기밀 문서 서명이 필요해 더 복잡합니다.
아두이노 SD 카드 모듈의 핀아웃
SD 카드 모듈은 어댑터에 6개의 핀을 가지며 다음과 같습니다:
- MOSI - SPI 입력
- CS - 라인 활성화/비활성화용 칩 셀렉트 신호 핀
- GND - 그라운드 핀
- MISO - SPI 출력
- VCC - +5V 전원 공급
- SCK - 데이터 동기화를 위한 클록 임펄스 수신
마이크로 SD 카드 준비 방법
먼저 SD 카드 모듈을 구해 마이크로 SD 카드를 삽입하세요. 그런 다음 모듈을 아두이노에 장착해 카드를 올바르게 포맷하세요.
아두이노 라이브러리 기준으로 카드를 포맷해야 합니다. 즉, 메모리 카드를 FAT32 또는 FAT16으로 포맷해야 합니다.
새 SD 카드로 작업하는 경우 제조업체가 FAT 파일 시스템으로 사전 포맷했을 수 있습니다. 하지만 카드 포맷에 문제가 발생할 수 있습니다. 따라서 새 카드든 오래된 카드든 다시 포맷하는 것이 원칙입니다.
SD 카드를 아두이노에 연결하는 방법

아두이노 카드와 SD 카드 연결
이미지 출처: Wikimedia Commons
SD 카드 준비가 끝났으면 SD 브레이크아웃 보드에 연결할 수 있습니다.
마이크로 SD 카드 모듈을 브레드보드에 장착하는 것으로 시작하세요. 모듈의 VCC 핀을 아두이노의 5V에 연결합니다. GND 핀을 그라운드에 연결합니다. 남은 것은 SPI 통신용 핀들입니다.
일반적으로 마이크로 SD 카드는 많은 데이터 전송이 필요합니다. 하지만 마이크로컨트롤러의 하드웨어 SPI 핀에 카드를 연결하면 더 잘 작동합니다. SPI 핀이 '비트뱅잉'으로 다른 핀 세트로 인터페이스 코드를 구현하는 것보다 빠르기 때문입니다.
아두이노 보드마다 다양한 SPI 핀이 있어 이에 맞게 연결해야 합니다. 예를 들어 아두이노 나노는 11번(MOSI), 12번(MISO), 13번(SCK) 핀을 가집니다. 또한 네 번째 핀인 SS 라인 '칩 셀렉트'가 필요합니다.
10번 핀을 SS 핀으로 사용하거나 선호하는 핀을 사용할 수 있습니다. 하지만 아두이노 메가의 경우 핀이 다릅니다. 53번(SS), 50번(MISO), 51번(MOSI), 52번(SCK)을 사용해야 합니다. 다른 아두이노 보드를 사용하는 경우 공식 문서를 참조하세요. 그러면 데이터 로깅 준비가 완료됩니다.
CardInfo로 SD 카드 모듈 테스트하는 아두이노 코드 사용법
SD 카드와 통신하는 것은 번거로울 수 있습니다. 하지만 좋은 점은 아두이노 IDE에 'SD'라는 훌륭한 라이브러리가 있어 SD 카드 읽기/쓰기 과정을 쉽게 만들어줍니다.
스케치를 실행하고 File→Examples→SD→card info를 클릭하세요. 스케치가 SD 카드를 인식하면 데이터를 표시합니다. 스케치로 돌아가 'chip Select'가 올바른 디지털 핀을 사용하는지 확인하세요. 그렇지 않으면 핀을 10으로 변경하세요.
모든 것이 좋아 보이면 SD 카드를 모듈에 장착하고 스케치를 업로드하세요. 시리얼 모니터를 열면 즉시 프롬프트가 나타납니다. 프롬프트는 볼륨 유형 FAT32, 크기, 카드 유형 SDHC(SD 고용량)를 표시해야 합니다.

아두이노 스케치 스크린샷
하지만 복제품이나 불량 SD 카드인 경우 카드 유형이 SD1로 표시되고 제품 및 제조업체 ID가 없을 수 있습니다. 이때 카드를 재포맷해보세요. 같은 결과가 나오면 카드를 폐기하세요.

아두이노 스케치 스크린샷
마지막으로 SD 카드 없이 스케치를 다시 실행하세요. 스케치가 SD 카드를 초기화하지 않습니다. 카드가 손상되었거나 배선 오류가 있어도 이 프롬프트가 나타날 수 있습니다.

아두이노 스케치 스크린샷
SD 카드가 올바르게 포맷되고 배선이 정확하다면? 프롬프트는 'wiring is correct, and a card is present.'라고 표시됩니다.
아두이노 SD 카드로 데이터 읽기 및 쓰기
SD 카드가 성공적으로 초기화되면 다음 단계로 진행할 수 있습니다. 먼저 스케치의 코드를 업로드하세요. 모든 것이 좋으면 'initialization done' 표시가 나타납니다.
'writing to test done'도 표시됩니다. 따라서 아두이노를 리셋하고 스케치를 다시 실행하면 이전 데이터가 덮어쓰이지 않습니다. 대신 새 데이터가 이전 데이터에 추가됩니다.
코드 의미
1부
스케치에는 SPI 라이브러리와 내장 SD 라이브러리가 있습니다. 결과적으로 SD 카드를 사용해 SPI 인터페이스에 쉽게 연락할 수 있습니다.

CS가 모듈 핀에 연결될 아두이노 핀을 선택해야 합니다. CS 핀이 고정되어 있지 않기 때문입니다. 또한 하드웨어 SPI 라이브러리를 사용하므로 핀을 명시할 필요가 없습니다. 고정되어 있기 때문입니다.
myFile 객체를 생성해 SD 카드에 정보를 저장합니다.

setup() 섹션으로 이동해 시리얼 통신을 시작해 시리얼 모니터에 결과를 표시합니다.
SD.begin() 함수로 카드를 초기화합니다. 카드 초기화가 성공하면 'if' 문이 참이 되어 'initialization done' 문자열이 시리얼 모니터에 나타납니다. 그렇지 않으면 'else 문자열': 'initialization failed'가 나타나고 프로그램이 종료됩니다.

SD.open() 함수로 'test.txt' 파일을 엽니다. 이 파일이 없으면 생성해야 합니다. 결과적으로 FILE_WRITE 기능이 읽기-쓰기 모드로 열립니다.

파일이 열리면 시리얼 모니터에 'Writing to test.txt..' 메시지가 표시됩니다. myFile.println() 함수에서 'testing 1, 2, 3'을 볼 수 있습니다. 이후 close() 함수로 파일에 쓴 데이터를 저장합니다.
2부
이제 파일을 확인해 쓰기 작업이 성공했는지 확인해야 합니다. SD.open() 기능을 'test.txt'로 사용해 할 수 있습니다. 나중에 myFile.read() 기능으로 파일에서 읽어 시리얼 모니터에 표시합니다.
'while' 루프와 myFile.available() 기능으로 파일 문자를 읽습니다. read() 기능이 한 번에 한 문자씩 읽기 때문입니다. 그런 다음 파일을 닫습니다.

이것은 데모 스케치이므로 코드를 여러 번 실행할 필요 없습니다. 모든 코드가 한 번 실행되는 setup() 기능에 있습니다.

중요 사항
1. 파일 이름에 대소문자 구분이 없습니다. WriteLog.Txt = writelog.txt = WRITELOG.TXT
2. 디렉토리에서 파일을 열 수 있습니다.
3. println()과 print() 함수로 변수, 문자열 등을 쓸 수 있습니다.
4. Read() 기능은 전체 숫자나 줄을 읽지 않습니다. 대신 한 번에 한 문자씩 반환합니다.
5. 파일 이름을 짧게 유지하는 것이 중요합니다. SD 카드 라이브러리가 '긴 파일 이름'을 지원하지 않기 때문입니다.
자주 묻는 질문 (FAQs)
아두이노 SD 카드 최대 크기는?
최대 SD 카드는 2GB입니다.
아두이노 SD 카드가 손상될 수 있나요?
네, 가능합니다. 물리적 손상, 부적절한 사용, 제조 결함, 멀웨어 등이 원인일 수 있습니다.
결론
아두이노 SD 카드는 데이터 로깅에 사용할 수 있는 실용적인 저장 장치입니다. 배선만 정확하면 설정도 꽤 쉽습니다. 또한 이 장치로 편리하게 데이터를 읽고 쓸 수 있습니다.
프로젝트에 가장 적합한 아두이노 SD 카드 선택에 도움이 필요하신가요? 언제든 문의해 주세요.