查看: 4043|回复: 0

[原创] stm32f769 寄存器配置SD卡---移植fatfs

[复制链接]
  • TA的每日心情
    奋斗
    2021-7-30 11:40
  • 签到天数: 1792 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2018-3-13 12:17:43 | 显示全部楼层 |阅读模式
    分享到:
    昨天开始在上周实现的SD卡读写基础上移植fatfs文件系统,开始不是很顺利,之前没有搞过,完全按照f767的例程移植的,但是在加载SD卡时一直是失败的,很郁闷,折腾了一天,结果还不理想,睡了个好觉,思路清晰了,参考的同时,也要加入自己的思想,果然很顺利的按我的思路实现了,太开心了,说明一下,本次移植的是最新的版本ff13a。需要的自己下载

    下面详细介绍
    按照f767的例程,把ffconf.h里面的宏定义的赋值进行修改

    1. #define FF_FS_READONLY        0
    2. /* This op<font color="#4298ba">ti</font>on switches read-only configuration. (0:Read/Write or 1:Read-only)
    3. /  Read-only configuration removes writing API functions, f_write(), f_sync(),
    4. /  f_unlink(), f_mkdir(), f_chmod(), f_rename(), f_truncate(), f_getfree()
    5. /  and optional writing functions as well. */


    6. #define FF_FS_MINIMIZE        0
    7. /* This option defines minimization level to remove some basic API functions.
    8. /
    9. /   0: Basic functions are fully enabled.
    10. /   1: f_stat(), f_getfree(), f_unlink(), f_mkdir(), f_truncate() and f_rename()
    11. /      are removed.
    12. /   2: f_opendir(), f_readdir() and f_closedir() are removed in addition to 1.
    13. /   3: f_lseek() function is removed in addition to 2. */


    14. #define FF_USE_STRFUNC        1
    15. /* This option switches string functions, f_gets(), f_putc(), f_puts() and f_printf().
    16. /
    17. /  0: Disable string functions.
    18. /  1: Enable without LF-CRLF conversion.
    19. /  2: Enable with LF-CRLF conversion. */


    20. #define FF_USE_FIND                0
    21. /* This option switches filtered directory read functions, f_findfirst() and
    22. /  f_findnext(). (0:Disable, 1:Enable 2:Enable with matching altname[] too) */


    23. #define FF_USE_MKFS                1
    24. /* This option switches f_mkfs() function. (0:Disable or 1:Enable) */


    25. #define FF_USE_FASTSEEK        1
    26. /* This option switches fast seek function. (0:Disable or 1:Enable) */


    27. #define FF_USE_EXPAND        0
    28. /* This option switches f_expand function. (0:Disable or 1:Enable) */


    29. #define FF_USE_CHMOD        0
    30. /* This option switches attribute manipulation functions, f_chmod() and f_utime().
    31. /  (0:Disable or 1:Enable) Also FF_FS_READONLY needs to be 0 to enable this option. */


    32. #define FF_USE_LABEL        1
    33. /* This option switches volume label functions, f_getlabel() and f_setlabel().
    34. /  (0:Disable or 1:Enable) */


    35. #define FF_USE_FORWARD        0
    36. /* This option switches f_forward() function. (0:Disable or 1:Enable) */


    37. /*---------------------------------------------------------------------------/
    38. / Locale and Namespace Configurations
    39. /---------------------------------------------------------------------------*/

    40. #define FF_CODE_PAGE        936
    41. /* This option specifies the OEM code page to be used on the target system.
    42. /  Incorrect code page setting can cause a file open failure.
    43. /
    44. /   437 - U.S.
    45. /   720 - Arabic
    46. /   737 - Greek
    47. /   771 - KBL
    48. /   775 - Baltic
    49. /   850 - Latin 1
    50. /   852 - Latin 2
    51. /   855 - Cyrillic
    52. /   857 - Turkish
    53. /   860 - Portuguese
    54. /   861 - Icelandic
    55. /   862 - Hebrew
    56. /   863 - Canadian French
    57. /   864 - Arabic
    58. /   865 - Nordic
    59. /   866 - Russian
    60. /   869 - Greek 2
    61. /   932 - Japanese (DBCS)
    62. /   936 - Simplified Chinese (DBCS)
    63. /   949 - Korean (DBCS)
    64. /   950 - Traditional Chinese (DBCS)
    65. /     0 - Include all code pages above and configured by f_setcp()
    66. */


    67. #define FF_USE_LFN                3
    68. #define FF_MAX_LFN                255
    69. /* The FF_USE_LFN switches the support for LFN (long file name).
    70. /
    71. /   0: Disable LFN. FF_MAX_LFN has no effect.
    72. /   1: Enable LFN with static working buffer on the BSS. Always NOT thread-safe.
    73. /   2: Enable LFN with dynamic working buffer on the STACK.
    74. /   3: Enable LFN with dynamic working buffer on the HEAP.
    75. /
    76. /  To enable the LFN, ffunicode.c needs to be added to the project. The LFN function
    77. /  requiers certain internal working buffer occupies (FF_MAX_LFN + 1) * 2 bytes and
    78. /  additional (FF_MAX_LFN + 44) / 15 * 32 bytes when exFAT is enabled.
    79. /  The FF_MAX_LFN defines size of the working buffer in UTF-16 code unit and it can
    80. /  be in range of 12 to 255. It is recommended to be set 255 to fully support LFN
    81. /  specification.
    82. /  When use stack for the working buffer, take care on stack overflow. When use heap
    83. /  memory for the working buffer, memory management functions, ff_memalloc() and
    84. /  ff_memfree() in ffsystem.c, need to be added to the project. */


    85. #define FF_LFN_UNICODE        0
    86. /* This option switches the character encoding on the API when LFN is enabled.
    87. /
    88. /   0: ANSI/OEM in current CP (TCHAR = char)
    89. /   1: Unicode in UTF-16 (TCHAR = WCHAR)
    90. /   2: Unicode in UTF-8 (TCHAR = char)
    91. /
    92. /  Also behavior of string I/O functions will be affected by this option.
    93. /  When LFN is not enabled, this option has no effect. */


    94. #define FF_LFN_BUF                255
    95. #define FF_SFN_BUF                12
    96. /* This set of options defines size of file name members in the FILINFO structure
    97. /  which is used to read out directory items. These values should be suffcient for
    98. /  the file names to read. The maximum possible length of the read file name depends
    99. /  on character encoding. When LFN is not enabled, these options have no effect. */


    100. #define FF_STRF_ENCODE        3
    101. /* When FF_LFN_UNICODE >= 1 with LFN enabled, string I/O functions, f_gets(),
    102. /  f_putc(), f_puts and f_printf() convert the character encoding in it.
    103. /  This option selects assumption of character encoding ON THE FILE to be
    104. /  read/written via those functions.
    105. /
    106. /   0: ANSI/OEM in current CP
    107. /   1: Unicode in UTF-16LE
    108. /   2: Unicode in UTF-16BE
    109. /   3: Unicode in UTF-8
    110. */


    111. #define FF_FS_RPATH                0
    112. /* This option configures support for relative path.
    113. /
    114. /   0: Disable relative path and remove related functions.
    115. /   1: Enable relative path. f_chdir() and f_chdrive() are available.
    116. /   2: f_getcwd() function is available in addition to 1.
    117. */


    118. /*---------------------------------------------------------------------------/
    119. / Drive/Volume Configurations
    120. /---------------------------------------------------------------------------*/

    121. #define FF_VOLUMES                1
    122. /* Number of volumes (logical drives) to be used. (1-10) */


    123. #define FF_STR_VOLUME_ID        0
    124. #define FF_VOLUME_STRS                "RAM","NAND","CF","SD","SD2","USB","USB2","USB3"
    125. /* FF_STR_VOLUME_ID switches string support for volume ID.
    126. /  When FF_STR_VOLUME_ID is set to 1, also pre-defined strings can be used as drive
    127. /  number in the path name. FF_VOLUME_STRS defines the drive ID strings for each
    128. /  logical drives. Number of items must be equal to FF_VOLUMES. Valid characters for
    129. /  the drive ID strings are: A-Z and 0-9. */


    130. #define FF_MULTI_PARTITION        0
    131. /* This option switches support for multiple volumes on the physical drive.
    132. /  By default (0), each logical drive number is bound to the same physical drive
    133. /  number and only an FAT volume found on the physical drive will be mounted.
    134. /  When this function is enabled (1), each logical drive number can be bound to
    135. /  arbitrary physical drive and partition listed in the VolToPart[]. Also f_fdisk()
    136. /  funciton will be available. */


    137. #define FF_MIN_SS                512
    138. #define FF_MAX_SS                512
    139. /* This set of options configures the range of sector size to be supported. (512,
    140. /  1024, 2048 or 4096) Always set both 512 for most systems, generic memory card and
    141. /  harddisk. But a larger value may be required for on-board flash memory and some
    142. /  type of optical media. When FF_MAX_SS is larger than FF_MIN_SS, FatFs is configured
    143. /  for variable sector size mode and disk_ioctl() function needs to implement
    144. /  GET_SECTOR_SIZE command. */


    145. #define FF_USE_TRIM                0
    146. /* This option switches support for ATA-TRIM. (0:Disable or 1:Enable)
    147. /  To enable Trim function, also CTRL_TRIM command should be implemented to the
    148. /  disk_ioctl() function. */


    149. #define FF_FS_NOFSINFO        0
    150. /* If you need to know correct free space on the FAT32 volume, set bit 0 of this
    151. /  option, and f_getfree() function at first time after volume mount will force
    152. /  a full FAT scan. Bit 1 controls the use of last allocated cluster number.
    153. /
    154. /  bit0=0: Use free cluster count in the FSINFO if available.
    155. /  bit0=1: Do not trust free cluster count in the FSINFO.
    156. /  bit1=0: Use last allocated cluster number in the FSINFO if available.
    157. /  bit1=1: Do not trust last allocated cluster number in the FSINFO.
    158. */



    159. /*---------------------------------------------------------------------------/
    160. / System Configurations
    161. /---------------------------------------------------------------------------*/

    162. #define FF_FS_TINY                0
    163. /* This option switches tiny buffer configuration. (0:Normal or 1:Tiny)
    164. /  At the tiny configuration, size of file object (FIL) is shrinked FF_MAX_SS bytes.
    165. /  Instead of private sector buffer eliminated from the file object, common sector
    166. /  buffer in the filesystem object (FATFS) is used for the file data transfer. */


    167. #define FF_FS_EXFAT                1
    168. /* This option switches support for exFAT filesystem. (0:Disable or 1:Enable)
    169. /  When enable exFAT, also LFN needs to be enabled.
    170. /  Note that enabling exFAT discards ANSI C (C89) compatibility. */


    171. #define FF_FS_NORTC                0
    172. #define FF_NORTC_MON        1
    173. #define FF_NORTC_MDAY        1
    174. #define FF_NORTC_YEAR        2018
    175. /* The option FF_FS_NORTC switches timestamp functiton. If the system does not have
    176. /  any RTC function or valid timestamp is not needed, set FF_FS_NORTC = 1 to disable
    177. /  the timestamp function. All objects modified by FatFs will have a fixed timestamp
    178. /  defined by FF_NORTC_MON, FF_NORTC_MDAY and FF_NORTC_YEAR in local time.
    179. /  To enable timestamp function (FF_FS_NORTC = 0), get_fattime() function need to be
    180. /  added to the project to read current time form real-time clock. FF_NORTC_MON,
    181. /  FF_NORTC_MDAY and FF_NORTC_YEAR have no effect.
    182. /  These options have no effect at read-only configuration (FF_FS_READONLY = 1). */


    183. #define FF_FS_LOCK                0
    184. /* The option FF_FS_LOCK switches file lock function to control duplicated file open
    185. /  and illegal operation to open objects. This option must be 0 when FF_FS_READONLY
    186. /  is 1.
    187. /
    188. /  0:  Disable file lock function. To avoid volume corruption, application program
    189. /      should avoid illegal open, remove and rename to the open objects.
    190. /  >0: Enable file lock function. The value defines how many files/sub-directories
    191. /      can be opened simultaneously under file lock control. Note that the file
    192. /      lock control is independent of re-entrancy. */


    193. #define FF_FS_REENTRANT        0
    194. #define FF_FS_TIMEOUT        1000
    195. #define FF_SYNC_t                HANDLE
    复制代码
    编译下载后果然是打印的sd卡加载成功




                                                               发稿与2018年3月13日

    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则



    手机版|小黑屋|与非网

    GMT+8, 2024-4-24 03:51 , Processed in 0.117289 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.