All checks were successful
Build RPi Pico firmware image / Build-Firmware (push) Successful in 3m18s
Check code formatting / Check-C-Format (push) Successful in 7s
Check code formatting / Check-Python-Flake8 (push) Successful in 9s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 4s
Run unit tests on host / Run-Unit-Tests (push) Successful in 7s
Run pytests / Check-Pytest (push) Successful in 10s
- Old SDSC cards could have a native blocksize != 512 bytes, but they should support the SET_BLOCKLEN command to set the blocksize to 512. Use that so we can just assume 512 everywhere else. - SDSC cards used byte addresses, not sector numbers, for the argument of READ_BLOCK and WRITE_BLOCK. Check the card type and multiply the sector number with 512 if necessary. Tested with a noname chinese 128 MiB-ish card. Signed-off-by: Matthias Blankertz <matthias@blankertz.org>
27 lines
812 B
C
27 lines
812 B
C
#pragma once
|
|
|
|
#include <stdbool.h>
|
|
#include <stddef.h>
|
|
#include <stdint.h>
|
|
|
|
#define SD_SECTOR_SIZE 512
|
|
|
|
struct sd_context {
|
|
size_t blocks;
|
|
size_t blocksize;
|
|
bool initialized;
|
|
bool old_card;
|
|
bool sdhc_sdxc;
|
|
};
|
|
|
|
bool sd_init(struct sd_context *context, int mosi, int miso, int sck, int ss, int rate);
|
|
bool sd_deinit(struct sd_context *sd_context);
|
|
|
|
bool sd_readblock(struct sd_context *context, size_t sector_num, uint8_t buffer[static SD_SECTOR_SIZE]);
|
|
|
|
bool sd_readblock_start(struct sd_context *context, size_t sector_num, uint8_t buffer[static SD_SECTOR_SIZE]);
|
|
bool sd_readblock_complete(struct sd_context *context);
|
|
bool sd_readblock_is_complete(struct sd_context *context);
|
|
|
|
bool sd_writeblock(struct sd_context *context, size_t sector_num, uint8_t buffer[const static SD_SECTOR_SIZE]);
|