본문 바로가기

Raspberry Pi Pico에서 MicroSD 사용하기

by rudals.kim 2022. 4. 19. 댓글 개
반응형
Adafruit CircuitPython 7.2.5 / Raspberry Pi Pico with rp2040 에서 테스트 되었습니다.

 

라즈베리파이 피코용 확장 보드를 사용하여 MicroSD 카드 테스트를 해 보았습니다.

 

Raspberry Pi Pico (W5100S-EVB-Pico) 확장 보드 제작

Raspberry Pi Pico 보드를 사용하여 여러 가지 테스트를 해 보았습니다. 테스트했던 디바이스들과 추가적으로 필요했던 기능들을 모아 Raspberry Pi Pico(W5100S-EVB-Pico)용 확장 보드를 제작해 보았습니다.

rudalskim.tistory.com

제가 가지고 있던 MicroSD 카드 소켓은 아래와 이미지처럼 고정쇠를 연 후 그 안에 MicroSD 카드를 넣고 뚜껑을 닫는 형태입니다.

아래와 같은 식으로 MicroSD 카드를 넣습니다.

간혹 MicroSD 카드의 읽기/쓰기 테스트를 하다 보면 코드 오류 또는 에러에 의해 MicroSD 카드가 깨지는 경우를 몇 번 경험하여 이번 테스트에도 역시나 제가 테스트용으로 사용하는 SanDisk MicroSD 256MB를 사용하여 테스트해 보았습니다.

고정쇠를 닫은 후 앞쪽으로 당겨서 닫아 주면 고정쇠 부분이 걸려서 더 이상 열리지 않습니다.

adafruit circuitpython에서 제공되는 라이브러리 중 adafruit_sdcard.py를 라즈베리파이의 lib 디렉터리에 복사해 넣습니다. 그런 후 아래 소스를 사용하여 MicroSD 카드 테스트를 하였습니다. 소스 내용은 디렉터리 리스트를 보여준 후 테스트 파일을 쓰고 읽기를 한 후 다시 디렉터리 리스트를 보여주는 소스코드입니다.

import os
import busio
import board
import digitalio
import storage
import adafruit_sdcard

def print_directory(path, tabs=0):
    for file in os.listdir(path):
        stats = os.stat(path + "/" + file)
        filesize = stats[6]
        isdir = stats[0] & 0x4000

        if filesize < 1000:
            sizestr = str(filesize) + " bytes"
        elif filesize < 1000000:
            sizestr = "%0.1f KB" % (filesize / 1000)
        else:
            sizestr = "%0.1f MB" % (filesize / 1000000)

        prettyprintname = ""
        for _ in range(tabs):
            prettyprintname += "   "
        prettyprintname += file
        if isdir:
            prettyprintname += "/"
        print("{0:<40} Size: {1:>10}".format(prettyprintname, sizestr))

        # recursively print directory contents
        if isdir:
            print_directory(path + "/" + file, tabs + 1)
            
SD_CS = board.GP13    

# Connect to the card and mount the filesystem.
#sck, mosi, miso
spi = busio.SPI(board.GP10, board.GP11, board.GP12)
cs = digitalio.DigitalInOut(SD_CS)
sdcard = adafruit_sdcard.SDCard(spi, cs)
vfs = storage.VfsFat(sdcard)
storage.mount(vfs, "/sd")

print("Files on filesystem:")
print("====================")
print_directory("/sd")

with open("/sd/test01.txt", "w") as file:
    file.write("Hello, SD World!\r\n")
    file.write("This is a test\r\n")
    file.write("한글 출력 테스트\r\n")

print("====================")
with open("/sd/test01.txt", "r") as file:
    data = file.read()
    print(data)
    
print("====================")
print_directory("/sd")

 

위 소스코드를 실행해 보면 Thonny의 Shell 창에 MicroSD 카드의 파일 리스트와 쓰고 읽은 파일 내용을 보여줍니다.

테스트로 영어와 한글을 Write 해 보았는데 두 개의 언어 모두 정상적으로 잘 읽히고 파일 리스트를 읽어보면 새로 저장된 test01.txt 파일이 추가된 것을 확인할 수 있었습니다.

라즈베리파이 피코에서 MicroSD 카드를 분리하여 윈도우10 PC에서 확인해 보았습니다.

파이선을 사용해서인지 Write한 내용이 UTF-8 형식의 파일로 잘 저장되어 있습니다.

라즈베리파이 피코를 사용하여 기본적인 파일의 read/write 테스트를 해 보았습니다.

파일에서 데이터를 읽어오거나 아니면 주기적으로 로깅 데이터 등을 저장 시 사용하면 좋을 것 같습니다.

반응형

댓글