29 #if (HAL_USE_SDC == TRUE) || defined(__DOXYGEN__)
39 MMC_SWITCH_COMMAND_SET = 0,
40 MMC_SWITCH_SET_BITS = 1,
41 MMC_SWITCH_CLEAR_BITS = 2,
42 MMC_SWITCH_WRITE_BYTE = 3
57 SD_SWITCH_FUNCTION_SPEED = 0,
58 SD_SWITCH_FUNCTION_CMD_SYSTEM = 1,
59 SD_SWITCH_FUNCTION_DRIVER_STRENGTH = 2,
60 SD_SWITCH_FUNCTION_CURRENT_LIMIT = 3
76 (
bool (*)(
void *))sdc_lld_is_card_inserted,
77 (bool (*)(
void *))sdc_lld_is_write_protected,
80 (bool (*)(
void *, uint32_t, uint8_t *, uint32_t))
sdcRead,
81 (bool (*)(
void *, uint32_t,
const uint8_t *, uint32_t))
sdcWrite,
106 sdcp->
cardmode = SDC_MODE_CARDTYPE_SDV20;
108 if (((resp[0] >> 8U) & 0xFU) != 1U) {
120 sdcp->
cardmode = SDC_MODE_CARDTYPE_MMC;
123 sdcp->
cardmode = SDC_MODE_CARDTYPE_SDV11;
155 if ((resp[0] & 0x80000000U) != 0U) {
156 if ((resp[0] & 0x40000000U) != 0U) {
157 sdcp->
cardmode |= SDC_MODE_HIGH_CAPACITY;
186 if ((sdcp->
cardmode & SDC_MODE_CARDTYPE_MASK) == SDC_MODE_CARDTYPE_SDV20) {
202 if ((resp[0] & 0x80000000U) != 0U) {
203 if ((resp[0] & 0x40000000U) != 0U) {
204 sdcp->
cardmode |= SDC_MODE_HIGH_CAPACITY;
230 uint32_t value, uint32_t cmd_set) {
235 return ((uint32_t)access << 24U) | (idx << 16U) | (value << 8U) | cmd_set;
252 uint32_t ret = 0xFFFFFF;
256 ret &= ~((uint32_t)0xFU << ((uint32_t)
function * 4U));
257 ret |= value << ((uint32_t)
function * 4U);
258 return ret | ((uint32_t)mode << 31U);
272 const uint8_t *buf) {
274 unsigned start = 12U - ((unsigned)
function * 2U);
276 return ((uint16_t)buf[start] << 8U) | (uint16_t)buf[start + 1U];
292 const uint8_t *buf) {
297 tmp = ((uint32_t)buf[14] << 16U) |
298 ((uint32_t)buf[15] << 8U) |
300 status = (tmp >> ((uint32_t)
function * 4U)) & 0xFU;
301 if (0xFU != status) {
325 *clk = SDC_CLK_25MHz;
330 *clk = SDC_CLK_25MHz;
335 if (sdc_lld_read_special(sdcp, tmp, N, MMCSD_CMD_SWITCH, 0)) {
345 if (sdc_lld_read_special(sdcp, tmp, N, MMCSD_CMD_SWITCH, cmdarg)) {
351 *clk = SDC_CLK_50MHz;
354 *clk = SDC_CLK_25MHz;
378 *clk = SDC_CLK_25MHz;
383 *clk = SDC_CLK_50MHz;
403 if (SDC_MODE_CARDTYPE_MMC == (sdcp->
cardmode & SDC_MODE_CARDTYPE_MASK)) {
513 #if SDC_NICE_WAITING == TRUE
552 sdcp->
errors = SDC_NO_ERROR;
640 if ((sdcp->
cardmode & SDC_MODE_CARDTYPE_MASK) == SDC_MODE_CARDTYPE_MMC) {
664 sdcp->
rca, sdcp->csd)) {
681 if (SDC_MODE_CARDTYPE_MMC == (sdcp->
cardmode & SDC_MODE_CARDTYPE_MASK)) {
685 uint8_t *ext_csd = sdcp->
buf;
687 if (sdc_lld_read_special(sdcp, ext_csd, 512, MMCSD_CMD_SEND_EXT_CSD, 0)) {
712 switch (sdcp->
cardmode & SDC_MODE_CARDTYPE_MASK) {
713 case SDC_MODE_CARDTYPE_SDV11:
714 case SDC_MODE_CARDTYPE_SDV20:
719 case SDC_MODE_CARDTYPE_MMC:
797 osalDbgCheck((sdcp != NULL) && (buf != NULL) && (n > 0U));
800 if ((startblk + n - 1U) > sdcp->capacity) {
801 sdcp->
errors |= SDC_OVERFLOW_ERROR;
832 const uint8_t *buf, uint32_t n) {
835 osalDbgCheck((sdcp != NULL) && (buf != NULL) && (n > 0U));
838 if ((startblk + n - 1U) > sdcp->capacity) {
839 sdcp->
errors |= SDC_OVERFLOW_ERROR;
869 sdcp->
errors = SDC_NO_ERROR;
924 bdip->
blk_num = sdcp->capacity;
953 if ((sdcp->
cardmode & SDC_MODE_HIGH_CAPACITY) != 0U) {