SpiSD¶
This module handles operations on Standard Capacity and High Capacity SD Cards (SDSC, SDHC) through Spi protocol. The following operations are allowed:
- read/write single block, with block address specified through SDSC or SDHC convention;
- read/write multiple blocks, with block address specified through SDSC or SDHC convention;
- generic read/write data, with block address specified through SDHC convention for both SDCS and SDHC cards;
- read cid register.
Block size is set by default to 512 bytes.
Address conventions:
- SDSC convention allows to select a block through its first byte location in byte address (example: for a block size of 512 bytes, second block will be addressed 0x200);
- SDHC convention allows to select a block through its block address (example: 2nd block address (starting from 0th block) is simply 0x2)
SpiSD class¶
-
class
SpiSD
(drvname, cs, clock=1000000)¶ Initialize an SD card specifying its:
- MCU SPI circuitry drvname (one of SPI0, SPI1, ... check pinmap for details);
- chip select pin cs;
- clock clock, default at 1MHz
The instance attribute hc is set to 1 if the card is recognized as an SDHC, to 0 otherwise.
-
single_block_read
(addr)¶ Read a single block at address addr, following SDSC or SDHC address convention depending on used card.
-
multiple_blocks_read
(addr, n)¶ Read n blocks starting from address addr, following SDSC or SDHC address convention depending on used card.
-
read_data
(addr, n)¶ Read n blocks starting from address addr, SDHC address convention is used.
-
single_block_write
(addr, data)¶ Write a single block at address addr, following SDSC or SDHC address convention depending on used card. data must be a 512-byte long bytearray.
-
multiple_blocks_write
(addr, data)¶ Write data starting from address addr, following SDSC or SDHC address convention depending on used card.
Two formats allowed for data:
bytearray with a len multiple of 512 bytes.
list of 512-byte long bytearrays, where each bytearray inside data list contains data for a single block:
block_1 = bytearray(0x200) block_2 = bytearray(0x200) ... [ block_1 , block_2 , ... ]
-
write_data
(addr, data)¶ Write data starting from address addr, SDHC address convention is used.
data format is defined as in
multiple_blocks_write()
.
-
read_cid
()¶ Read 16-byte long cid register value.