1. SPI vs. I2C SD Card Module
라즈베리파이 피코보드에서 다량의 자료를 파일을 기록하는 경우를 대비해, SD Card 모듈을 사용하고자 시도해 보았다.
매우 당연하게도 배선이 간단한 I2C 연결 제품을 찾아보았다. I2C는 전원선을 제외하면 단지 2가닥으로 배선이 이루어지므로, 배선이 간결한 장점이 있기 때문이었다.
그런데, 인터넷 조사 결과 다음과 같은 제품이 있다는 사실은 확인이 되지만, 현실적으로 구할 수가 없었다.
인터넷에서 구입하려 했는데, 국내에서 구입할 수 있는 SD Card Module들은 SPI 연결형 제품뿐이었다.
국내에서 구입할 수 있는 SD Card Module들은 크기와 형태에는 조금씩 차이가 있었지만, 모두 다음과 같은 SPI 연결형 제품뿐이었다.
결국 다음과 같은 형태의 SPI형 SD Card 모듈을 구입해서 연결을 시도해 보았다.
2. 배선
이 제품의 단자는 다음과 같이 표기되어 있다.
이들 핀들을 다음과 같이 배선했다.
cs = machine.Pin(1)
sck=machine.Pin(2)
mosi=machine.Pin(3)
miso=machine.Pin(4)
배선한 결과는 다음과 같다.
참고로, SPI 채널은 피코보드의 SPI 0번 채널을 이용했고, 다음 핀맵을 참조하여 배선했다.
특기할 것은 제품의 동작전압이다.
SD Card 모듈의 동작전압은 제품에 따라 차이가 있어서, 3.3V에서 동작하는 제품도 있지만, 정확히 5V를 제공하지 않으면 오류가 나기도 한다. 반면 3.3V 동작 제품을 5V에 배선하는 것은 제품 손상을 가져올 수도 있다.
내가 구입했던 아래 제품은 3.3V에 Vcc를 연결하는 경우 프로그램 동작이 정상적이지 않고, 오류가 발생하였다. 이 제품의 경우, 동작전압이 4.5~5V였기 때문에, Vcc는 5V가 나오는 물리 번호 40번에 연결했다.
3. SD Card Formating
SD 카드는 미리 PC에서 FAT32 형식으로 다음과 같이 포맷해 주었다.
4. SD Card Library
SD 카드를 마이크로 파이썬에서 사용하려면 SDCard.py 라이브러리가 필요한데, 이상하게도 Github에서 적절한 파일을 찾기가 매우 어려웠다. 또한 간혹 찾아서 설치한 라이브러리 파일 역시 제대로 동작하지 않는 문제도 있었다. 한참을 헤맨 끝에 다음 라이브러리 파일을 찾았고 정상 동작하는 것을 확인할 수 있었다.
다음 Code를 다운로드해 sdcard.py로 저장해 사용하면 된다. 다만, 이 파일의 직접적인 Github Link는 찾을 수가 없었다.
04b23d78-e38d-49ed-a7b5-3c9fb4cc8c9c”c95cd566762b2df1dc33526c5eb1cab11241ba5ee1/EFsQbrdDxL7O9d1RLuoSggWaFwbSq-l_Y1wGJTkPkAQhGo-4VH0j6_e5CO8p9CVQ_hSdQU68TcIeRQLERtkGMTsF7yM1/sdcard.py
5. 에제 Code
다음과 같이 간단한 에제 Code를 만들어보았다.
import machine
import sdcard
import utime
import uos
cs = machine.Pin(1, machine.Pin.OUT) # CS Pin allocation
spi = machine.SPI(0,
baudrate=1000000,
polarity=0, phase=0, bits=8,
firstbit=machine.SPI.MSB,
sck=machine.Pin(2),
mosi=machine.Pin(3),
miso=machine.Pin(4))
sd = sdcard.SDCard(spi, cs) # Initialize SD card
vfs = uos.VfsFat(sd) # Mount filesystem
uos.mount(vfs, "/sd")
with open("/sd/Mytestfile.txt", "w") as file:
print("SD 카드에 다음 내용을 기록합니다.rn")
print(" Hello! This is SD Card test via SPI connection.")
print(" 이것은 SPI 통신을 이용하는 SD카드 test입니다.")
file.write("Hello! This is SD Card test via SPI connection.rn")
file.write("이것은 SPI 통신을 이용하는 SD카드 test입니다.rn")
utime.sleep(1)
# Open the file we just created and read from it
with open("/sd/Mytestfile.txt", "r") as file:
print(" ")
print("SD 카드에서 내용을 읽어 표시합니다. rn")
data = file.read()
print(data)
이 Code의 동작 결과는 다음과 같다.
SD Card에 기록하고, 다시 기록된 파일을 읽어서 표시하는 동작을 해준다.

동작 후, 해당 SD Card를 PC로 옮겨 열어본 결과, 다음과 같이 Mytestfile.txt 파일을 확인할 수 있었고,
이 파일을 열어본 결과, 위의 예제 Code에서 의도한 대로 해당 파일이 잘 기록되어 있음을 확인할 수 있었다.

