X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;ds=sidebyside;f=bertos%2Fdrv%2Fsd.c;fp=bertos%2Fdrv%2Fsd.c;h=2b462b7b4734ba8a800010c7ee005f841ba5ef73;hb=9c7e10e5ff169a3ffb854b8023b103c9ef886ab8;hp=9880dfe15cabde7e7c35b11d1b09f27349e3f088;hpb=dbc93a323bf913a9f5422b93ac59b828819a97db;p=bertos.git diff --git a/bertos/drv/sd.c b/bertos/drv/sd.c index 9880dfe1..2b462b7b 100644 --- a/bertos/drv/sd.c +++ b/bertos/drv/sd.c @@ -243,10 +243,14 @@ static size_t sd_readDirect(struct KBlock *b, block_idx_t idx, void *buf, size_t Sd *sd = SD_CAST(b); LOG_INFO("reading from block %ld, offset %d, size %d\n", idx, offset, size); - if ((sd->r1 = sd_setBlockLen(sd, size))) + if (sd->tranfer_len != size) { - LOG_ERR("setBlockLen failed: %04X\n", sd->r1); - return 0; + if ((sd->r1 = sd_setBlockLen(sd, size))) + { + LOG_ERR("setBlockLen failed: %04X\n", sd->r1); + return 0; + } + sd->tranfer_len = size; } SD_SELECT(sd); @@ -280,10 +284,14 @@ static int sd_writeBlock(KBlock *b, block_idx_t idx, const void *buf) KFile *fd = sd->ch; LOG_INFO("writing block %ld\n", idx); - if ((sd->r1 = sd_setBlockLen(sd, SD_DEFAULT_BLOCKLEN))) + if (sd->tranfer_len != SD_DEFAULT_BLOCKLEN) { - LOG_ERR("setBlockLen failed: %04X\n", sd->r1); - return sd->r1; + if ((sd->r1 = sd_setBlockLen(sd, SD_DEFAULT_BLOCKLEN))) + { + LOG_ERR("setBlockLen failed: %04X\n", sd->r1); + return sd->r1; + } + sd->tranfer_len = SD_DEFAULT_BLOCKLEN; } SD_SELECT(sd); @@ -461,6 +469,7 @@ static bool sd_blockInit(Sd *sd, KFile *ch) } sd->r1 = sd_setBlockLen(sd, SD_DEFAULT_BLOCKLEN); + sd->tranfer_len = SD_DEFAULT_BLOCKLEN; if (sd->r1) {