hi,
最近参照AM335X_StarterWare_02_00_01_01里面的hs_mmcsd Demo重新移植了一个FatFs R0.13版本的文件系统,准备在此基础上挂载NAND,SD card和USB U盘,文件系统的移植也就是几个底层函数
disk_initialize_MMCSD(); disk_status_MMCSD(); disk_read_MMCSD(); disk_write_MMCSD(); disk_ioctl_MMCSD();
这几个底层函数也是参照Demo上的例程,移植结束后,发现U盘的操作没有问题,但是在SD卡的操作时,f_read函数在读取一个文件(大小为270Bytes),因为大小小于512字节,故调用底层函数
if (disk_read(fs->pdrv, fp->buf, sect, 1) != RES_OK) ABORT(fs, FR_DISK_ERR);
结果跟踪进去发现在读取文件到文件的缓存fp->buf里面时,buf的前面24个字节始终为0,而不是文件的内容,后面的buf部分是文件的内容。根据调试发现,在调用
if (disk_read(fs->pdrv, rbuff, sect, cc) != RES_OK) ABORT(fs, FR_DISK_ERR);
时读取,rbuff里面读取到的内容是正确的。也就是说在文件大于512字节时,文件的大小对于512取整的包是读取在rbuff里面的都正确,在最后一包小于512字节的调用文件的缓存读取时,就读取有问题,故文件的读取不完整。
如果将文件系统配置为FF_FS_TINY格式的,则都可以,但是读取速度会变慢。并且我换过几个版本的fatfs文件系统,在操作sd卡时都会出现读的问题。
官方的demo例程是R0.04版本的,此版本读取没有任何问题,但是版本比较老,故想移植一个比较新版本的,望帮忙能给点思路。