diff --git a/src/ff.c b/src/ff.c index bcd68c1..819b33c 100644 --- a/src/ff.c +++ b/src/ff.c @@ -2639,8 +2639,16 @@ FRESULT f_lseek ( fp->flag &= ~FA__DIRTY; } #endif - if (disk_read(fp->fs->drv, fp->buf, dsc, 1) != RES_OK) - ABORT(fp->fs, FR_DISK_ERR); + if(!ff_sd_offload) { + sd_offload_partial=0; + if (disk_read(fp->fs->drv, fp->buf, dsc, 1) != RES_OK) + ABORT(fp->fs, FR_DISK_ERR); + } else { + sd_offload_partial=1; + sd_offload_partial_start = fp->fptr % SS(fp->fs); + } +// if (disk_read(fp->fs->drv, fp->buf, dsc, 1) != RES_OK) +// ABORT(fp->fs, FR_DISK_ERR); #endif fp->dsect = dsc; } diff --git a/src/sdnative.c b/src/sdnative.c index b7725a9..21adbab 100644 --- a/src/sdnative.c +++ b/src/sdnative.c @@ -800,10 +800,10 @@ void read_block(uint32_t address, uint8_t *buf) { && last_block == address && last_offset == sd_offload_partial_start && sd_offload_partial) { - stream_datablock(buf); - last_offset = sd_offload_partial_end & 0x1ff; sd_offload_partial_start |= 0x8000; + stream_datablock(buf); during_blocktrans = TRANS_READ; + last_offset = sd_offload_partial_end & 0x1ff; sd_offload_partial = 0; } else { if(during_blocktrans) { @@ -812,6 +812,7 @@ void read_block(uint32_t address, uint8_t *buf) { /* send STOP_TRANSMISSION to end an open READ/WRITE_MULTIPLE_BLOCK */ cmd_fast(STOP_TRANSMISSION, 0, 0x61, NULL, rsp); } + during_blocktrans = TRANS_READ; last_block = address; if(!ccs) { address <<= 9; @@ -825,7 +826,6 @@ void read_block(uint32_t address, uint8_t *buf) { cmd_fast(READ_MULTIPLE_BLOCK, address, 0, buf, rsp); #endif sd_offload_partial = 0; - during_blocktrans = TRANS_READ; } // printf("trans state = %d\n", during_blocktrans); }