17#define SD_CMD0_GO_IDLE 0U
18#define SD_CMD8_SEND_IF_COND 8U
19#define SD_CMD10_SEND_CID 10U
20#define SD_CMD55_APP_CMD 55U
21#define SD_CMD58_READ_OCR 58U
22#define SD_ACMD41_SD_SEND_OP_COND 41U
24#define SD_CMD8_ARG 0x000001AAU
25#define SD_ACMD41_HCS 0x40000000U
27#define SD_R1_IDLE 0x01U
28#define SD_R1_ILLEGAL_COMMAND 0x04U
29#define SD_DATA_TOKEN 0xFEU
30#define SD_OCR_CCS 0x40000000U
33uint8_t
sd_crc7(
const uint8_t* data, uint8_t len);
40 return (
byte & 0x80U) == 0U;
bool sd_r7_ok(const uint8_t r7[4])
void sd_command_frame(uint8_t out[6], uint8_t index, uint32_t argument)
static bool sd_is_r1(uint8_t byte)
uint8_t sd_crc7(const uint8_t *data, uint8_t len)
bool sd_cid_ok(const uint8_t cid[16])