* To support SD 2.0 cards, we must always invoke SD_SEND_IF_COND * before SD_APP_OP_COND. This command will harmlessly fail for * SD 1.0 cards. */
| 485 | * SD 1.0 cards. |
| 486 | */ |
| 487 | rt_err_t mmcsd_send_if_cond(struct rt_mmcsd_host *host, rt_uint32_t ocr) |
| 488 | { |
| 489 | struct rt_mmcsd_cmd cmd; |
| 490 | rt_err_t err; |
| 491 | rt_uint8_t pattern; |
| 492 | |
| 493 | cmd.cmd_code = SD_SEND_IF_COND; |
| 494 | cmd.arg = ((ocr & 0xFF8000) != 0) << 8 | 0xAA; |
| 495 | cmd.flags = RESP_SPI_R7 | RESP_R7 | CMD_BCR; |
| 496 | |
| 497 | err = mmcsd_send_cmd(host, &cmd, 0); |
| 498 | if (err) |
| 499 | return err; |
| 500 | |
| 501 | if (controller_is_spi(host)) |
| 502 | pattern = cmd.resp[1] & 0xFF; |
| 503 | else |
| 504 | pattern = cmd.resp[0] & 0xFF; |
| 505 | |
| 506 | if (pattern != 0xAA) |
| 507 | return -RT_ERROR; |
| 508 | |
| 509 | return RT_EOK; |
| 510 | } |
| 511 | |
| 512 | rt_err_t mmcsd_get_card_addr(struct rt_mmcsd_host *host, rt_uint32_t *rca) |
| 513 | { |
no test coverage detected