TI中文支持网
TI专业的中文技术问题咨询交流网站

FatFs在AM335x上的移植

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版本的,此版本读取没有任何问题,但是版本比较老,故想移植一个比较新版本的,望帮忙能给点思路。

Jian Zhou:

我们不推荐客户移植其他的文件系统版本,目前老的文件系统是有什么问题么?

Paul Schaw:

回复 Jian Zhou:

你好,zhou

    感谢您的答复,AM335X_StarterWare_02_00_01_01此版本的demo是基于R0.04的,年代很久远,所以想找一个最近版本的FatFs来做我们的项目。并且我也发现在am335x_sysbios_ind_sdk_01.01.03.03此SDK包中,牵涉到文件系统部分的Demo,比如Bootloader、hs_mmcsd等例程也全都是基于R0.08版本的FatFs,结果发现对于SD卡的支持f_read函数都是存在相同的问题。所以就拿出来想和你们讨论一下,除了底层的几个接口函数还需要修改什么地方,f_read函数中调用底层的disk_read函数为何使用FIL结构体中的文件缓存来读取文件的时候就存在读取异常的情况,虽然f_read读取返回结果为OK。万分感谢!

赞(0)
未经允许不得转载:TI中文支持网 » FatFs在AM335x上的移植
分享到: 更多 (0)