• R/O
  • SSH
  • HTTPS

chibios: 提交


Commit MetaInfo

修订版15846 (tree)
时间2022-11-21 23:43:33
作者gdisirio

Log Message

Preparation for MMC_SPI support, not finished.

更改概述

差异

--- trunk/demos/STM32/RT-VFS-FATFS/cfg/stm32g474re_nucleo64/ffconf.h (nonexistent)
+++ trunk/demos/STM32/RT-VFS-FATFS/cfg/stm32g474re_nucleo64/ffconf.h (revision 15846)
@@ -0,0 +1,304 @@
1+/* CHIBIOS FIX */
2+#include "ch.h"
3+#define FATFS_CHIBIOS_EXTENSIONS
4+
5+/*---------------------------------------------------------------------------/
6+/ FatFs Functional Configurations
7+/---------------------------------------------------------------------------*/
8+
9+#define FFCONF_DEF 86631 /* Revision ID */
10+
11+/*---------------------------------------------------------------------------/
12+/ Function Configurations
13+/---------------------------------------------------------------------------*/
14+
15+#define FF_FS_READONLY 0
16+/* This option switches read-only configuration. (0:Read/Write or 1:Read-only)
17+/ Read-only configuration removes writing API functions, f_write(), f_sync(),
18+/ f_unlink(), f_mkdir(), f_chmod(), f_rename(), f_truncate(), f_getfree()
19+/ and optional writing functions as well. */
20+
21+
22+#define FF_FS_MINIMIZE 0
23+/* This option defines minimization level to remove some basic API functions.
24+/
25+/ 0: Basic functions are fully enabled.
26+/ 1: f_stat(), f_getfree(), f_unlink(), f_mkdir(), f_truncate() and f_rename()
27+/ are removed.
28+/ 2: f_opendir(), f_readdir() and f_closedir() are removed in addition to 1.
29+/ 3: f_lseek() function is removed in addition to 2. */
30+
31+
32+#define FF_USE_FIND 0
33+/* This option switches filtered directory read functions, f_findfirst() and
34+/ f_findnext(). (0:Disable, 1:Enable 2:Enable with matching altname[] too) */
35+
36+
37+#define FF_USE_MKFS 0
38+/* This option switches f_mkfs() function. (0:Disable or 1:Enable) */
39+
40+
41+#define FF_USE_FASTSEEK 0
42+/* This option switches fast seek function. (0:Disable or 1:Enable) */
43+
44+
45+#define FF_USE_EXPAND 0
46+/* This option switches f_expand function. (0:Disable or 1:Enable) */
47+
48+
49+#define FF_USE_CHMOD 0
50+/* This option switches attribute manipulation functions, f_chmod() and f_utime().
51+/ (0:Disable or 1:Enable) Also FF_FS_READONLY needs to be 0 to enable this option. */
52+
53+
54+#define FF_USE_LABEL 0
55+/* This option switches volume label functions, f_getlabel() and f_setlabel().
56+/ (0:Disable or 1:Enable) */
57+
58+
59+#define FF_USE_FORWARD 0
60+/* This option switches f_forward() function. (0:Disable or 1:Enable) */
61+
62+
63+#define FF_USE_STRFUNC 0
64+#define FF_PRINT_LLI 0
65+#define FF_PRINT_FLOAT 0
66+#define FF_STRF_ENCODE 0
67+/* FF_USE_STRFUNC switches string functions, f_gets(), f_putc(), f_puts() and
68+/ f_printf().
69+/
70+/ 0: Disable. FF_PRINT_LLI, FF_PRINT_FLOAT and FF_STRF_ENCODE have no effect.
71+/ 1: Enable without LF-CRLF conversion.
72+/ 2: Enable with LF-CRLF conversion.
73+/
74+/ FF_PRINT_LLI = 1 makes f_printf() support long long argument and FF_PRINT_FLOAT = 1/2
75+ makes f_printf() support floating point argument. These features want C99 or later.
76+/ When FF_LFN_UNICODE >= 1 with LFN enabled, string functions convert the character
77+/ encoding in it. FF_STRF_ENCODE selects assumption of character encoding ON THE FILE
78+/ to be read/written via those functions.
79+/
80+/ 0: ANSI/OEM in current CP
81+/ 1: Unicode in UTF-16LE
82+/ 2: Unicode in UTF-16BE
83+/ 3: Unicode in UTF-8
84+*/
85+
86+
87+/*---------------------------------------------------------------------------/
88+/ Locale and Namespace Configurations
89+/---------------------------------------------------------------------------*/
90+
91+#define FF_CODE_PAGE 850
92+/* This option specifies the OEM code page to be used on the target system.
93+/ Incorrect code page setting can cause a file open failure.
94+/
95+/ 437 - U.S.
96+/ 720 - Arabic
97+/ 737 - Greek
98+/ 771 - KBL
99+/ 775 - Baltic
100+/ 850 - Latin 1
101+/ 852 - Latin 2
102+/ 855 - Cyrillic
103+/ 857 - Turkish
104+/ 860 - Portuguese
105+/ 861 - Icelandic
106+/ 862 - Hebrew
107+/ 863 - Canadian French
108+/ 864 - Arabic
109+/ 865 - Nordic
110+/ 866 - Russian
111+/ 869 - Greek 2
112+/ 932 - Japanese (DBCS)
113+/ 936 - Simplified Chinese (DBCS)
114+/ 949 - Korean (DBCS)
115+/ 950 - Traditional Chinese (DBCS)
116+/ 0 - Include all code pages above and configured by f_setcp()
117+*/
118+
119+
120+#define FF_USE_LFN 3
121+#define FF_MAX_LFN 255
122+/* The FF_USE_LFN switches the support for LFN (long file name).
123+/
124+/ 0: Disable LFN. FF_MAX_LFN has no effect.
125+/ 1: Enable LFN with static working buffer on the BSS. Always NOT thread-safe.
126+/ 2: Enable LFN with dynamic working buffer on the STACK.
127+/ 3: Enable LFN with dynamic working buffer on the HEAP.
128+/
129+/ To enable the LFN, ffunicode.c needs to be added to the project. The LFN function
130+/ requiers certain internal working buffer occupies (FF_MAX_LFN + 1) * 2 bytes and
131+/ additional (FF_MAX_LFN + 44) / 15 * 32 bytes when exFAT is enabled.
132+/ The FF_MAX_LFN defines size of the working buffer in UTF-16 code unit and it can
133+/ be in range of 12 to 255. It is recommended to be set it 255 to fully support LFN
134+/ specification.
135+/ When use stack for the working buffer, take care on stack overflow. When use heap
136+/ memory for the working buffer, memory management functions, ff_memalloc() and
137+/ ff_memfree() exemplified in ffsystem.c, need to be added to the project. */
138+
139+
140+#define FF_LFN_UNICODE 0
141+/* This option switches the character encoding on the API when LFN is enabled.
142+/
143+/ 0: ANSI/OEM in current CP (TCHAR = char)
144+/ 1: Unicode in UTF-16 (TCHAR = WCHAR)
145+/ 2: Unicode in UTF-8 (TCHAR = char)
146+/ 3: Unicode in UTF-32 (TCHAR = DWORD)
147+/
148+/ Also behavior of string I/O functions will be affected by this option.
149+/ When LFN is not enabled, this option has no effect. */
150+
151+
152+#define FF_LFN_BUF 255
153+#define FF_SFN_BUF 12
154+/* This set of options defines size of file name members in the FILINFO structure
155+/ which is used to read out directory items. These values should be suffcient for
156+/ the file names to read. The maximum possible length of the read file name depends
157+/ on character encoding. When LFN is not enabled, these options have no effect. */
158+
159+
160+#define FF_FS_RPATH 0
161+/* This option configures support for relative path.
162+/
163+/ 0: Disable relative path and remove related functions.
164+/ 1: Enable relative path. f_chdir() and f_chdrive() are available.
165+/ 2: f_getcwd() function is available in addition to 1.
166+*/
167+
168+
169+/*---------------------------------------------------------------------------/
170+/ Drive/Volume Configurations
171+/---------------------------------------------------------------------------*/
172+
173+#define FF_VOLUMES 1
174+/* Number of volumes (logical drives) to be used. (1-10) */
175+
176+
177+#define FF_STR_VOLUME_ID 0
178+#define FF_VOLUME_STRS "RAM","NAND","CF","SD","SD2","USB","USB2","USB3"
179+/* FF_STR_VOLUME_ID switches support for volume ID in arbitrary strings.
180+/ When FF_STR_VOLUME_ID is set to 1 or 2, arbitrary strings can be used as drive
181+/ number in the path name. FF_VOLUME_STRS defines the volume ID strings for each
182+/ logical drives. Number of items must not be less than FF_VOLUMES. Valid
183+/ characters for the volume ID strings are A-Z, a-z and 0-9, however, they are
184+/ compared in case-insensitive. If FF_STR_VOLUME_ID >= 1 and FF_VOLUME_STRS is
185+/ not defined, a user defined volume string table needs to be defined as:
186+/
187+/ const char* VolumeStr[FF_VOLUMES] = {"ram","flash","sd","usb",...
188+*/
189+
190+
191+#define FF_MULTI_PARTITION 0
192+/* This option switches support for multiple volumes on the physical drive.
193+/ By default (0), each logical drive number is bound to the same physical drive
194+/ number and only an FAT volume found on the physical drive will be mounted.
195+/ When this function is enabled (1), each logical drive number can be bound to
196+/ arbitrary physical drive and partition listed in the VolToPart[]. Also f_fdisk()
197+/ funciton will be available. */
198+
199+
200+#define FF_MIN_SS 512
201+#define FF_MAX_SS 512
202+/* This set of options configures the range of sector size to be supported. (512,
203+/ 1024, 2048 or 4096) Always set both 512 for most systems, generic memory card and
204+/ harddisk, but a larger value may be required for on-board flash memory and some
205+/ type of optical media. When FF_MAX_SS is larger than FF_MIN_SS, FatFs is configured
206+/ for variable sector size mode and disk_ioctl() function needs to implement
207+/ GET_SECTOR_SIZE command. */
208+
209+
210+#define FF_LBA64 0
211+/* This option switches support for 64-bit LBA. (0:Disable or 1:Enable)
212+/ To enable the 64-bit LBA, also exFAT needs to be enabled. (FF_FS_EXFAT == 1) */
213+
214+
215+#define FF_MIN_GPT 0x10000000
216+/* Minimum number of sectors to switch GPT as partitioning format in f_mkfs and
217+/ f_fdisk function. 0x100000000 max. This option has no effect when FF_LBA64 == 0. */
218+
219+
220+#define FF_USE_TRIM 0
221+/* This option switches support for ATA-TRIM. (0:Disable or 1:Enable)
222+/ To enable Trim function, also CTRL_TRIM command should be implemented to the
223+/ disk_ioctl() function. */
224+
225+
226+
227+/*---------------------------------------------------------------------------/
228+/ System Configurations
229+/---------------------------------------------------------------------------*/
230+
231+#define FF_FS_TINY 0
232+/* This option switches tiny buffer configuration. (0:Normal or 1:Tiny)
233+/ At the tiny configuration, size of file object (FIL) is shrinked FF_MAX_SS bytes.
234+/ Instead of private sector buffer eliminated from the file object, common sector
235+/ buffer in the filesystem object (FATFS) is used for the file data transfer. */
236+
237+
238+#define FF_FS_EXFAT 1
239+/* This option switches support for exFAT filesystem. (0:Disable or 1:Enable)
240+/ To enable exFAT, also LFN needs to be enabled. (FF_USE_LFN >= 1)
241+/ Note that enabling exFAT discards ANSI C (C89) compatibility. */
242+
243+
244+#define FF_FS_NORTC 0
245+#define FF_NORTC_MON 1
246+#define FF_NORTC_MDAY 1
247+#define FF_NORTC_YEAR 2020
248+/* The option FF_FS_NORTC switches timestamp functiton. If the system does not have
249+/ any RTC function or valid timestamp is not needed, set FF_FS_NORTC = 1 to disable
250+/ the timestamp function. Every object modified by FatFs will have a fixed timestamp
251+/ defined by FF_NORTC_MON, FF_NORTC_MDAY and FF_NORTC_YEAR in local time.
252+/ To enable timestamp function (FF_FS_NORTC = 0), get_fattime() function need to be
253+/ added to the project to read current time form real-time clock. FF_NORTC_MON,
254+/ FF_NORTC_MDAY and FF_NORTC_YEAR have no effect.
255+/ These options have no effect in read-only configuration (FF_FS_READONLY = 1). */
256+
257+
258+#define FF_FS_NOFSINFO 0
259+/* If you need to know correct free space on the FAT32 volume, set bit 0 of this
260+/ option, and f_getfree() function at first time after volume mount will force
261+/ a full FAT scan. Bit 1 controls the use of last allocated cluster number.
262+/
263+/ bit0=0: Use free cluster count in the FSINFO if available.
264+/ bit0=1: Do not trust free cluster count in the FSINFO.
265+/ bit1=0: Use last allocated cluster number in the FSINFO if available.
266+/ bit1=1: Do not trust last allocated cluster number in the FSINFO.
267+*/
268+
269+
270+#define FF_FS_LOCK 0
271+/* The option FF_FS_LOCK switches file lock function to control duplicated file open
272+/ and illegal operation to open objects. This option must be 0 when FF_FS_READONLY
273+/ is 1.
274+/
275+/ 0: Disable file lock function. To avoid volume corruption, application program
276+/ should avoid illegal open, remove and rename to the open objects.
277+/ >0: Enable file lock function. The value defines how many files/sub-directories
278+/ can be opened simultaneously under file lock control. Note that the file
279+/ lock control is independent of re-entrancy. */
280+
281+
282+#define FF_FS_REENTRANT 0
283+#define FF_FS_TIMEOUT TIME_MS2I(1000)
284+#define FF_SYNC_t semaphore_t*
285+/* The option FF_FS_REENTRANT switches the re-entrancy (thread safe) of the FatFs
286+/ module itself. Note that regardless of this option, file access to different
287+/ volume is always re-entrant and volume control functions, f_mount(), f_mkfs()
288+/ and f_fdisk() function, are always not re-entrant. Only file/directory access
289+/ to the same volume is under control of this function.
290+/
291+/ 0: Disable re-entrancy. FF_FS_TIMEOUT and FF_SYNC_t have no effect.
292+/ 1: Enable re-entrancy. Also user provided synchronization handlers,
293+/ ff_req_grant(), ff_rel_grant(), ff_del_syncobj() and ff_cre_syncobj()
294+/ function, must be added to the project. Samples are available in
295+/ option/syscall.c.
296+/
297+/ The FF_FS_TIMEOUT defines timeout period in unit of time tick.
298+/ The FF_SYNC_t defines O/S dependent sync object type. e.g. HANDLE, ID, OS_EVENT*,
299+/ SemaphoreHandle_t and etc. A header file for O/S definitions needs to be
300+/ included somewhere in the scope of ff.h. */
301+
302+
303+
304+/*--- End of configuration options ---*/
--- trunk/demos/STM32/RT-VFS-FATFS/cfg/stm32g474re_nucleo64/halconf.h (revision 15845)
+++ trunk/demos/STM32/RT-VFS-FATFS/cfg/stm32g474re_nucleo64/halconf.h (revision 15846)
@@ -114,7 +114,7 @@
114114 * @brief Enables the MMC_SPI subsystem.
115115 */
116116 #if !defined(HAL_USE_MMC_SPI) || defined(__DOXYGEN__)
117-#define HAL_USE_MMC_SPI FALSE
117+#define HAL_USE_MMC_SPI TRUE
118118 #endif
119119
120120 /**
@@ -163,7 +163,7 @@
163163 * @brief Enables the SPI subsystem.
164164 */
165165 #if !defined(HAL_USE_SPI) || defined(__DOXYGEN__)
166-#define HAL_USE_SPI FALSE
166+#define HAL_USE_SPI TRUE
167167 #endif
168168
169169 /**
--- trunk/demos/STM32/RT-VFS-FATFS/cfg/stm32g474re_nucleo64/mcuconf.h (revision 15845)
+++ trunk/demos/STM32/RT-VFS-FATFS/cfg/stm32g474re_nucleo64/mcuconf.h (revision 15846)
@@ -325,7 +325,7 @@
325325 * SPI driver system settings.
326326 */
327327 #define STM32_SPI_USE_SPI1 FALSE
328-#define STM32_SPI_USE_SPI2 FALSE
328+#define STM32_SPI_USE_SPI2 TRUE
329329 #define STM32_SPI_USE_SPI3 FALSE
330330 #define STM32_SPI_USE_SPI4 FALSE
331331 #define STM32_SPI_SPI1_RX_DMA_STREAM STM32_DMA_STREAM_ID_ANY
--- trunk/demos/STM32/RT-VFS-FATFS/cfg/stm32g474re_nucleo64/portab.c (revision 15845)
+++ trunk/demos/STM32/RT-VFS-FATFS/cfg/stm32g474re_nucleo64/portab.c (revision 15846)
@@ -50,8 +50,52 @@
5050 /* Module exported functions. */
5151 /*===========================================================================*/
5252
53+void spi_error_cb(SPIDriver *spip);
54+
55+/*
56+ * High speed SPI configuration (21.25MHz, CPHA=0, CPOL=0, MSb first).
57+ */
58+const SPIConfig hs_spicfg = {
59+ .circular = false,
60+ .slave = false,
61+ .data_cb = NULL,
62+ .error_cb = spi_error_cb,
63+ .ssport = GPIOB,
64+ .sspad = 12U,
65+ .cr1 = SPI_CR1_BR_0,
66+ .cr2 = SPI_CR2_DS_2 | SPI_CR2_DS_1 | SPI_CR2_DS_0
67+};
68+
69+/*
70+ * Low speed SPI configuration (664,062kHz, CPHA=0, CPOL=0, MSb first).
71+ */
72+const SPIConfig ls_spicfg = {
73+ .circular = false,
74+ .slave = false,
75+ .data_cb = NULL,
76+ .error_cb = spi_error_cb,
77+ .ssport = GPIOB,
78+ .sspad = 12U,
79+ .cr1 = SPI_CR1_BR_2 | SPI_CR1_BR_1,
80+ .cr2 = SPI_CR2_DS_2 | SPI_CR2_DS_1 | SPI_CR2_DS_0
81+};
82+
5383 void portab_setup(void) {
5484
85+ /*
86+ * SPI2 I/O pins setup.
87+ */
88+ palSetPad(GPIOB, 12);
89+ palSetPadMode(GPIOB, 11, PAL_MODE_INPUT_PULLUP |
90+ PAL_STM32_OSPEED_HIGHEST); /* Card Detect. */
91+ palSetPadMode(GPIOB, 12, PAL_MODE_OUTPUT_PUSHPULL |
92+ PAL_STM32_OSPEED_HIGHEST); /* SPI2 CS. */
93+ palSetPadMode(GPIOB, 13, PAL_MODE_ALTERNATE(5) |
94+ PAL_STM32_OSPEED_HIGHEST); /* SPI2 SCK. */
95+ palSetPadMode(GPIOB, 14, PAL_MODE_ALTERNATE(5) |
96+ PAL_STM32_OSPEED_HIGHEST); /* SPI2 MISO. */
97+ palSetPadMode(GPIOB, 15, PAL_MODE_ALTERNATE(5) |
98+ PAL_STM32_OSPEED_HIGHEST); /* SPI2 MOSI. */
5599 }
56100
57101 /** @} */
--- trunk/demos/STM32/RT-VFS-FATFS/cfg/stm32g474re_nucleo64/vfsconf.h (revision 15845)
+++ trunk/demos/STM32/RT-VFS-FATFS/cfg/stm32g474re_nucleo64/vfsconf.h (revision 15846)
@@ -83,7 +83,7 @@
8383 * @brief Enables the VFS FatFS Driver.
8484 */
8585 #if !defined(VFS_CFG_ENABLE_DRV_FATFS) || defined(__DOXYGEN__)
86-#define VFS_CFG_ENABLE_DRV_FATFS FALSE
86+#define VFS_CFG_ENABLE_DRV_FATFS TRUE
8787 #endif
8888
8989 /** @} */
--- trunk/demos/STM32/RT-VFS-FATFS/main.c (revision 15845)
+++ trunk/demos/STM32/RT-VFS-FATFS/main.c (revision 15846)
@@ -151,6 +151,10 @@
151151 /* Main and generic code. */
152152 /*===========================================================================*/
153153
154+#if !HAL_USE_SDC
155+mmc_spi_driver_t MMCD1;
156+#endif
157+
154158 /*
155159 * Pointer to the shell thread, if active, else NULL.
156160 */
@@ -181,9 +185,9 @@
181185 #if HAL_USE_SDC
182186 sdcDisconnect(&PORTAB_SDCD1);
183187 #else
184- if (mmcDisconnect(&MMCD1)) {
188+ mmcDisconnect(&MMCD1);
185189 #endif
186- return;
190+ return;
187191 }
188192 fs_ready = true;
189193 #endif
@@ -267,12 +271,19 @@
267271 nullObjectInit(&nullstream);
268272
269273 #if VFS_CFG_ENABLE_DRV_FATFS == TRUE
274+#if HAL_USE_SDC
270275 /* Activates the SDC driver using default configuration.*/
271276 sdcStart(&PORTAB_SDCD1, NULL);
272277
273278 /* Activates the card insertion monitor.*/
274279 tmr_init(&PORTAB_SDCD1);
280+#else
281+ /* TODO MMC_SPI */
275282
283+ /* Activates the card insertion monitor.*/
284+ tmr_init(&MMCD1);
285+#endif
286+
276287 /* Initializing an overlay VFS object overlaying a FatFS driver. Note
277288 that this virtual file system can only access the "/sb1" sub-directory
278289 on the physical FatFS volume.*/
Show on old repository browser