MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / mmcsd_read_sd_status

Function mmcsd_read_sd_status

components/drivers/sdio/dev_sd.c:580–630  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

578}
579
580static rt_err_t mmcsd_read_sd_status(struct rt_mmcsd_card *card, rt_uint32_t *sd_status)
581{
582 rt_int32_t err;
583 struct rt_mmcsd_req req;
584 struct rt_mmcsd_cmd cmd;
585 struct rt_mmcsd_data data;
586
587 err = mmcsd_app_cmd(card->host, card);
588 if (err)
589 return err;
590
591 rt_memset(&req, 0, sizeof(struct rt_mmcsd_req));
592 rt_memset(&cmd, 0, sizeof(struct rt_mmcsd_cmd));
593 rt_memset(&data, 0, sizeof(struct rt_mmcsd_data));
594
595 req.cmd = &cmd;
596 req.data = &data;
597
598 cmd.cmd_code = SEND_STATUS;
599 cmd.arg = 0;
600 cmd.flags = RESP_SPI_R1 | RESP_R1 | CMD_ADTC;
601
602 data.blksize = 64;
603 data.blks = 1;
604 data.flags = DATA_DIR_READ;
605 data.buf = sd_status;
606
607 mmcsd_set_data_timeout(&data, card);
608
609 mmcsd_send_request(card->host, &req);
610
611 if (cmd.err)
612 return cmd.err;
613 if (data.err)
614 return data.err;
615
616 /* Convert endian */
617 for (uint32_t i=0; i < 8; i++)
618 {
619 uint32_t tmp = sd_status[i];
620 sd_status[i] = sd_status[15 - i];
621 sd_status[15 - i] = tmp;
622 }
623 for (uint32_t i=0; i < 16; i++)
624 {
625 sd_status[i] = be32_to_cpu(sd_status[i]);
626 }
627
628
629 return 0;
630}
631
632static rt_err_t sd_switch_voltage(struct rt_mmcsd_host *host)
633{

Callers 1

mmcsd_sd_init_cardFunction · 0.85

Calls 4

mmcsd_app_cmdFunction · 0.85
rt_memsetFunction · 0.85
mmcsd_set_data_timeoutFunction · 0.85
mmcsd_send_requestFunction · 0.85

Tested by

no test coverage detected