X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fdrv%2Fsd.c;h=02ec965329646b549729b6ff4aa69b254b76935d;hb=55574912ce4d7364597388a112805147a9618351;hp=a16e729957df79e61dcd8f500848656a2af5df91;hpb=5579f0a02cd782e3df7849e2f84640bd1160e232;p=bertos.git diff --git a/bertos/drv/sd.c b/bertos/drv/sd.c index a16e7299..02ec9653 100644 --- a/bertos/drv/sd.c +++ b/bertos/drv/sd.c @@ -1090,9 +1090,40 @@ int sd_readSingleBlock(Sd *sd, size_t index, uint32_t *buf, size_t words) } +int sd_writeSingleBlock(Sd *sd, size_t index, uint32_t *buf, size_t words) +{ + ASSERT(sd); + ASSERT(buf); + + hsmci_prgTxDMA(buf, words, sd->csd.blk_len); + + if (hsmci_sendCmd(24, index * sd->csd.blk_len, HSMCI_CMDR_RSPTYP_48_BIT | + HSMCI_CMDR_TRCMD_START_DATA | HSMCI_CMDR_TRTYP_SINGLE)) + { + LOG_ERR("SIGLE_BLK_WRITE: %lx\n", HSMCI_SR); + return -1; + } + hsmci_readResp(&(sd->status), 1); + + LOG_INFOB(dump("SIGLE_BLK_WR", &(sd->status), 1);); + LOG_INFO("State[%d]\n", SD_GET_STATE(sd->status)); + + if (sd->status & SD_STATUS_READY) + { + hsmci_waitTransfer(); + LOG_INFOB(dump("BLK", buf, words);); + + return words; + } + + return -1; +} + + void sd_setHightSpeed(Sd *sd) { + (void)sd; hsmci_setSpeed(2100000, true); }