在STM32中移植FATFS文件系统之欧阳理创编Word格式文档下载.docx

上传人:b****8 文档编号:22757778 上传时间:2023-02-05 格式:DOCX 页数:24 大小:404.61KB
下载 相关 举报
在STM32中移植FATFS文件系统之欧阳理创编Word格式文档下载.docx_第1页
第1页 / 共24页
在STM32中移植FATFS文件系统之欧阳理创编Word格式文档下载.docx_第2页
第2页 / 共24页
在STM32中移植FATFS文件系统之欧阳理创编Word格式文档下载.docx_第3页
第3页 / 共24页
在STM32中移植FATFS文件系统之欧阳理创编Word格式文档下载.docx_第4页
第4页 / 共24页
在STM32中移植FATFS文件系统之欧阳理创编Word格式文档下载.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

在STM32中移植FATFS文件系统之欧阳理创编Word格式文档下载.docx

《在STM32中移植FATFS文件系统之欧阳理创编Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《在STM32中移植FATFS文件系统之欧阳理创编Word格式文档下载.docx(24页珍藏版)》请在冰豆网上搜索。

在STM32中移植FATFS文件系统之欧阳理创编Word格式文档下载.docx

2、解压文件会得到两个文件夹,一个是doc文件夹,这里是FATFS的一些使用文档和说明,以后在文件编程的时候可以查看该文档。

另一个是src文件夹,里面就是我们所要的源文件。

3、建立一个STM32的工程,为方便调试,我们应重载printf()底层函数实现串口打印输出。

可以参考已经建立好的printf()打印输出工程:

...d=77&

extra=page%3D1四、开始移植

1、在已经建立好的工程目录User文件夹下新建两个文件夹,FATFS_V0.09和SPI_SD_Card,FATFS_V0.09用于存放FATFS源文件,SPI_SD_Card用于存放SPI的驱动文件。

2、如图1将ff.c添加到工程文件夹中,并新建diskio.c文件,在diskio.c文件中实现五个函数:

1.DSTATUSdisk_initialize(BYTE);

//SD卡的初始化

2. 

DSTATUSdisk_status(BYTE);

//获取SD卡的状态,这里可以不用管

3. 

DRESULTdisk_read(BYTE,BYTE*,DWORD,BYTE);

//从SD卡读取数据

4. 

DRESULTdisk_write(BYTE,constBYTE*,DWORD,BYTE);

//将数据写入SD卡,若该文件系统为只读文件系统则不用实现该函数

5. 

DRESULTdisk_ioctl(BYTE,BYTE,void*);

//获取SD卡文件系统相关信息

复制代码

<

IGNORE_JS_OP>

图1

3、初步实现以上五个函数

FATFS初始化函数:

1.DSTATUSdisk_initialize(

BYTEdrv 

/*Physicaldrivenmuber(0..)*/

{

switch(drv)

6. 

{

7. 

case0:

8. 

returnRES_OK;

9. 

case1:

10. 

11. 

case2:

12. 

13. 

case3:

14. 

15. 

default:

16. 

returnSTA_NOINIT;

17. 

}

18. 

}

FATFS状态获取函数:

1.DSTATUSdisk_status(

/*Physicaldrivenmuber(0..)*/

FATFS底层读数据函数:

1.DRESULTdisk_read(

BYTEdrv, 

BYTE*buff, 

/*Databuffertostorereaddata*/

DWORDsector, 

/*Sectoraddress(LBA)*/

BYTEcount 

/*Numberofsectorstoread(1..255)*/

if(!

count)

returnRES_PARERR;

/*count不能等于0,否则返回参数错误*/

case0:

if(count==1) 

/*1个sector的读操作*/ 

returnRES_OK;

19. 

else 

/*多个sector的读操作*/ 

20. 

21. 

22. 

23. 

case1:

24. 

25. 

26. 

27. 

28. 

29. 

30. 

31. 

32. 

33. 

returnRES_ERROR;

34. 

35. 

FATFS底层写数据函数:

1.DRESULTdisk_write(

constBYTE*buff, 

/*Datatobewritten*/

/*Sectoraddress(LBA)*/

/*Numberofsectorstowrite(1..255)*/

/*1个sector的写操作*/ 

/*多个sector的写操作*/ 

FATFS磁盘控制函数:

1.DRESULTdisk_ioctl(

BYTEctrl, 

/*Controlcode*/

void*buff 

/*Buffertosend/receivecontroldata*/

if(drv==0)

switch(ctrl)

caseCTRL_SYNC:

caseGET_SECTOR_COUNT:

caseGET_BLOCK_SIZE:

caseCTRL_POWER:

break;

caseCTRL_LOCK:

caseCTRL_EJECT:

/*MMC/SDCcommand*/

caseMMC_GET_TYPE:

caseMMC_GET_CSD:

caseMMC_GET_CID:

caseMMC_GET_OCR:

caseMMC_GET_SDSTAT:

}elseif(drv==1){

36. 

37. 

38. 

39. 

40. 

41. 

42. 

caseGET_SECTOR_SIZE:

43. 

44. 

45. 

46. 

47. 

48. 

49. 

50. 

51. 

52. 

53. 

54. 

55. 

56. 

57. 

58. 

59. 

60. 

61. 

62. 

63. 

64. 

65. 

else{ 

66. 

67. 

68. 

returnRES_PARERR;

69. 

以上函数都只是实现一个框架,并没有做实际的事情,下一步就需要把操作SD卡的程序填充在这个框架里面。

4、实现disk_initialize()函数

该函数在挂载文件系统的时候会被调用,主要是实现读写SD卡前对SD卡进行初始化,根据SD卡的传输协议,我们按照如下步骤初始化SD卡:

a、判断SD卡是否插入,可以通过检查SD卡卡座的CD脚电平进行判断,一般插入卡后该引脚会变成低电平。

b、稍微延时一段时间后发送至少74个时钟给SD卡。

c、发送CMD0命令给SD卡,直到SD卡返回0x01为止,这里可以循环多次发送。

程序如下:

1. 

/*StartsendCMD0tillreturn0x01meansinIDLEstate*/

for(retry=0;

retry<

0xFFF;

retry++)

r1=MSD0_send_

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 职业规划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1