From a484a93b290806d01850e58905d65bc798b4cd91 Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Fri, 29 Nov 2019 08:15:29 -0600 Subject: nRF: disk_read must be 4-byte aligned .. a requirement that oofatfs needs to be taught to respect. This problem can be demonstrated with the following snippet, except that the related file ("test.bin") must also be contiguous on the filesystem. You can ensure this by reformatting your device's filesystem before testing, then copying any single file bigger than 4kB to test.bin. f = open("test.bin", "rb") f.seek(2048) b = bytearray(2048) v = memoryview(b) f.readinto(v[909:]) Closes: #2332 --- lib/oofatfs/ff.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'lib/oofatfs/ff.c') diff --git a/lib/oofatfs/ff.c b/lib/oofatfs/ff.c index b0984756b..71bd19702 100644 --- a/lib/oofatfs/ff.c +++ b/lib/oofatfs/ff.c @@ -3382,7 +3382,11 @@ FRESULT f_read ( if (!sect) ABORT(fs, FR_INT_ERR); sect += csect; cc = btr / SS(fs); /* When remaining bytes >= sector size, */ - if (cc) { /* Read maximum contiguous sectors directly */ + if (cc +#if _FS_DISK_READ_ALIGNED + && (((int)rbuff & 3) == 0) +#endif + ) {/* Read maximum contiguous sectors directly */ if (csect + cc > fs->csize) { /* Clip at cluster boundary */ cc = fs->csize - csect; } -- cgit v1.2.3