云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 在STM32中移植FATFS文件系统

在STM32中移植FATFS文件系统

  • 62 次阅读
  • 3 次下载
  • 2025/5/2 14:49:28

33. } 34. case 1:

35. if(count==1) /* 1个sector的读操作 */ 36. {

37. return RES_OK;

38. }

39. else /* 多个sector的读操作 */ 40. {

41. return RES_OK; 42. } 43.

44. default:

45. return RES_ERROR; 46. } 47. }

MSD0_ReadSingleBlock()和MSD0_ReadMultiBlock()函数都是SD卡操作的底层函数,我们在SPI_MSD0_Driver.c文件中实现。 6、实现disk_write()函数

该函数主要实现对SD卡进行写数据操作,和读数据操作一样也分单块写和多块写,建议实现多块写的方式,这样可以提高写数据速度。 实现后的程序如下:

1. DRESULT disk_write (

2. BYTE drv, /* Physical drive nmuber (0..) */ 3. const BYTE *buff, /* Data to be written */ 4. DWORD sector, /* Sector address (LBA) */ 5. BYTE count /* Number of sectors to write (1..255) */ 6. ) 7. {

8. int Status; 9. if( !count ) 10. {

11. return RES_PARERR; /* count不能等于0,否则返回参数错误 */ 12. }

13. switch (drv) 14. {

15. case 0:

16. if(count==1) /* 1个sector的写操作 */ 17. {

18. Status = MSD0_WriteSingleBlock( sector , (uint8_t *)(&buff[0]) ); 19. if(Status == 0){ 20. return RES_OK; 21. }else{

22. return RES_ERROR;

23. }

24. } 25. else /* 多个sector的写操作 */ 26. {

27. Status = MSD0_WriteMultiBlock( sector , (uint8_t *)(&buff[0]) , count ); 28. if(Status == 0){ 29. return RES_OK; 30. }else{

31. return RES_ERROR; 32. }

33. } 34. case 1:

35. if(count==1) /* 1个sector的写操作 */ 36. {

37. return RES_OK;

38. } 39. else /* 多个sector的写操作 */ 40. {

41. return RES_OK;

42. } 43.

44. default:return RES_ERROR; 45. } 46. }

MSD0_WriteSingleBlock()和MSD0_WriteMultiBlock()函数都是SD卡操作的底层函数,我们在SPI_MSD0_Driver.c文件中实现。 7、实现disk_ioctl()函数

该函数在磁盘格式化、获取文件系统信息等操作时会被调用。 实现后的程序如下:

1. DRESULT disk_ioctl (

2. BYTE drv, /* Physical drive nmuber (0..) */ 3. BYTE ctrl, /* Control code */

4. void *buff /* Buffer to send/receive control data */ 5. ) 6. {

7. if (drv==0) 8. {

9. MSD0_GetCardInfo(&SD0_CardInfo); 10. switch (ctrl) 11. {

12. case CTRL_SYNC : 13. return RES_OK; 14. case GET_SECTOR_COUNT :

15. *(DWORD*)buff = SD0_CardInfo.Capacity/SD0_CardInfo.BlockSize; 16. return RES_OK;

17. case GET_BLOCK_SIZE :

18. *(WORD*)buff = SD0_CardInfo.BlockSize; 19. return RES_OK; 20. case CTRL_POWER : 21. break; 22. case CTRL_LOCK : 23. break; 24. case CTRL_EJECT : 25. break; 26. /* MMC/SDC command */ 27. case MMC_GET_TYPE : 28. break;

29. case MMC_GET_CSD : 30. break;

31. case MMC_GET_CID : 32. break;

33. case MMC_GET_OCR : 34. break;

35. case MMC_GET_SDSTAT : 36. break; 37. } 38. }else if(drv==1){ 39. switch (ctrl) 40. {

41. case CTRL_SYNC : 42. return RES_OK; 43. case GET_SECTOR_COUNT : 44. return RES_OK;

45. case GET_SECTOR_SIZE : 46. return RES_OK; 47. case GET_BLOCK_SIZE : 48. return RES_OK; 49. case CTRL_POWER : 50. break; 51. case CTRL_LOCK : 52. break; 53. case CTRL_EJECT : 54. break; 55. /* MMC/SDC command */ 56. case MMC_GET_TYPE : 57. break;

58. case MMC_GET_CSD :

59. break;

60. case MMC_GET_CID : 61. break;

62. case MMC_GET_OCR : 63. break;

64. case MMC_GET_SDSTAT : 65. break; 66. } 67. }

68. else{ 69. return RES_PARERR; 70. }

71. return RES_PARERR; 72. }

复制代码

MSD0_GetCardInfo()函数也在SPI_MSD0_Driver.c文件中实现,其中SD0_CardInfo为PMSD_CARDINFO类型的全局变量,它在SPI_MSD0_Driver.h文件中被定义。

8、到此diskio.c这个文件中的所有函数就已经实现,下一步就是实现SPI_MSD0_Driver.c文件中的相关函数,SPI_MSD0_Driver.c文件可以在网上下载,参考的程序比较多,本工程使用的这个文件也是在网上下载并进行一定的修改过的。本文件中函数的实现方式可以参考源代码。

五、文件系统测试 1、测试写文件 测试代码如下:

1. //写文件测试

2. printf(\

3. res = f_open(&fdst, \4. if(res != FR_OK){

5. printf(\6. }else{

7. res=f_write(&fdst,textFileBuffer,sizeof(textFileBuffer),&bw);

/* Write it to the dst file */ 8. if(res == FR_OK){

9. printf(\10. }else{

11. printf(\12. }

13. /*close file */ 14. f_close(&fdst); 15. }

搜索更多关于: 在STM32中移植FATFS文件系统 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

33. } 34. case 1: 35. if(count==1) /* 1个sector的读操作 */ 36. { 37. return RES_OK; 38. }

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com