sdcardio – Interface to an SD card via the SPI bus

class sdcardio.SDCard(bus: busio.SPI, cs: microcontroller.Pin, baudrate: int = 8000000)

SD Card Block Interface

Controls an SD card over SPI. This built-in module has higher read performance than the library adafruit_sdcard, but it is only compatible with busio.SPI, not bitbangio.SPI. Usually an SDCard object is used with storage.VfsFat to allow file I/O to an SD card.

Construct an SPI SD Card object with the given properties

  • spi (busio.SPI) – The SPI bus

  • cs (microcontroller.Pin) – The chip select connected to the card

  • baudrate (int) – The SPI data rate to use after card setup

Note that during detection and configuration, a hard-coded low baudrate is used. Data transfers use the specified baurate (rounded down to one that is supported by the microcontroller)


If the same SPI bus is shared with other peripherals, it is important that the SD card be initialized before accessing any other peripheral on the bus. Failure to do so can prevent the SD card from being recognized until it is powered off or re-inserted.

Example usage:

import os

import board
import sdcardio
import storage

sd = sdcardio.SDCard(board.SPI(), board.SD_CS)
vfs = storage.VfsFat(sd)
storage.mount(vfs, '/sd')

Returns the total number of sectors

Due to technical limitations, this is a function and not a property.


The number of 512-byte blocks, as a number


Disable permanently.



readblocks(self, start_block: int, buf: _typing.WriteableBuffer)None

Read one or more blocks from the card

  • start_block (int) – The block to start reading from

  • buf (WriteableBuffer) – The buffer to write into. Length must be multiple of 512.



writeblocks(self, start_block: int, buf: _typing.ReadableBuffer)None

Write one or more blocks to the card

  • start_block (int) – The block to start writing from

  • buf (ReadableBuffer) – The buffer to read from. Length must be multiple of 512.