1.FatFS入门——文件系统移植实验
2.STM32F4DiscoverySTM32F4DISCOVERY扩展板
3.STM32F207çDevKit1207ç主è¦ç¹ç¹
4.关于STM32H743配置SDIO接口驱动并移植FATFS
5.STM32CubeMX系列 | FATFS文件系统
FatFS入门——文件系统移植实验
介绍SPI存储数据的码讲局限性,指出需要管理方案进行数据操作,码讲FatFS文件系统应运而生。码讲
FatFS提供封装的码讲数据文件状态管理,通过调用API即可便捷操作文件,码讲类比Windows操作系统高度封装的码讲软件源码交付好处文件系统。
裸机上挂载文件系统前需格式化,码讲擦除原有数据并创建文件和目录索引,码讲便于记录数据存储状态。码讲
FatFS结构为面向小型嵌入式系统的码讲通用FAT文件系统,使用ANSI C语言编写,码讲独立于底层I/O介质,码讲易于移植。码讲
使用SPI与WQ芯片通讯,码讲将FatFS移植到WQ芯片,码讲通过a版本的源码,包含doc和src两个文件夹。
src文件夹重点分析,option文件夹包含各语言所需文件,history.txt和readme.txt文件说明版本历史及系统介绍。
阅读源码可从integer.h、diskio.c、ff.c顺序进行,泛微源码了解FatFS、用户程序与底层程序配合。
FatFS源码中,ff.c、ff.h、integer.h、diskio.h及cc.c文件不需修改,只需调整diskio.c及ffconf.h文件。
在SPI读写flash实验基础上移植FatFS,对diskio.c和ffconf.h进行修改与配置。
diskio.c文件中函数调用底层驱动函数控制flash读写操作,通过宏定义实现不同物理设备操作。
盘状态函数执行设备ID获取与初始化,根据设备ID判断是否初始化完成。
分配空间给FatFS使用,调整所有地址偏移量,进行扇区擦除与写入操作。
ffconf.h文件定义FatFS功能配置的宏,修改相关配置以适应具体环境。
完成移植后,进行编译测试,执行格式化设备、vr全景源码挂载FatFS文件系统、读写测试。
挂载文件系统使用f_mount()和f_mkfs()函数,读写测试使用f_open()、f_write()、f_close()、f_read()函数。
移植并测试完成后,FatFS文件系统成功部署于WQ芯片,实现数据管理功能,后续文章将详细讲解基础功能使用。
STMF4DiscoverySTMF4DISCOVERY扩展板
DM-F4BB扩展模块配置:基于ST原厂STMF4DISCOVERY推出的高性能扩展板,支持3.5寸工业级LCD触摸屏与万像素OV Camera模块,配备多达6路串口、CAN、IIC、SPI、以太网口、USB2.0 FS OTG/device/host、TF卡等接口,支持操作系统如uC/OS-Ⅱ_v2. & uC/GUI_v3.a,并提供BSP源码,鱼儿飞源码支持文件系统如FatFs_vR0.a与协议栈LwIP_v1.3.2。
DM-STF4BB:深圳市英蓓特科技有限公司推出的基于STMF4DISCOVERY的扩展板,基于ARM -bit Cortex-M4的STMFVGT6处理器,最高运行频率MHz,提供丰富的外设接口,包括Camera模块输出、3.5寸工业级LCD触摸屏,支持操作系统如uC/OS-Ⅱ与提供BSP源码包。
DM-STF4BB与STMF4DISCOVERY共同构成Embest的Devkit评估板,完善了功能,拓展了主芯片的功能,帮助客户体验更多外设功能,内置ST-LINK/V2调试器,采用USB供电,是面向广大ST电子爱好者的低成本开发套件。
STMF4DISCOVERY是ST公司推出的基于STMF4xx系列芯片的评估套件,主控芯片为STMFVGT6,提供处理器、存储器、传输接口、输入输出接口、调试接口、飞天侠源码运动传感、Camera接口、音频接口、液晶触摸屏接口、扩展接口,支持操作如uC/OS-II操作系统、文件系统与网络协议栈,提供开发环境支持与调试工具支持,适合医疗产品、网络终端、电机控制、工业控制、智能仪器仪表、家庭/楼宇自动化、数据采集分析等领域。
STMFçDevKitç主è¦ç¹ç¹
***é ç½®3.5寸工ä¸çº§LCD触æ¸å±ï¼æ¯æ4线触æ¸ã***1è·¯USB2.0 OTG Full-Speedï¼1è·¯USB2.0 OTG High-Speedã
***G-Sensorä¸è½´å éåº¦ä¼ æå¨ã
***IEEE v2ç/ Mbps以太ç½æ¥å£ã
***æ¯æUCOS II_v2. & UCGUI_v3.a,并æä¾BSPæºç ã
***æ¯æFatFs_vR0.a æ件系ç»(ç¨äºUçï¼SDå¡çæ件系ç»)ã
***æ¯æLwIP_v1.3.2åè®®æ ã
***å·¥ä¸çº§çå¨ä»¶éåãä»å®é åºç¨çè§åº¦èèï¼æéåå¨ä»¶çè´§æºä»¥
åä¾è´§å¨æé½æ足å¤çå¸åºä¿éã å¤çå¨
STMFIGT6ï¼ARM -bit Cortex-M3ï¼æé«è¿è¡é¢ç为MHz
å é¨éæ1 MBFlash memory,+4KB SRAM
æ¯æçå¤Flash, SRAM, PSRAM, NORåNAND Flash
LCD 并è¡æ¥å£ï¼/ 模å¼
USB 2.0 Full-speed/High-speed Device/Host/OTG
/ Ethernet MAC.ï¼æ¯æ硬件IEEE v2ï¼MII/RMIIï¼
2è·¯CAN2.0Bï¼4è·¯UARTï¼2è·¯å ¨åå·¥I2Sï¼3è·¯I2Cï¼3è·¯SPIæé«Mbit
8å° bit 并è¡æå头æ¥å£ï¼æé«è¾¾Mbyte/s
1/4/8bit SD/MMC/SDIO主æºæ¥å£ï¼æé«å®¹éå¯æ¯æGB
é«è¾¾ä¸ªI/Oå£ï¼æé«é¢çMHz
个å®æ¶å¨ï¼å ¶ä¸2个为ä½ï¼ï¼æé«è®¡æ°é¢ç为MHz
3è·¯-bit é«è¾¾2Mç A/Dã2è·¯-bit D/A
模æéæºæ°çæå¨
è¶ ä½åèï¼æ¯æç¡ç ãåæºãå¾ æºä¸ç§æ¨¡å¼
æ¯æFlashãç³»ç»å ååSRAMä¸ç§å¯å¨æ¹å¼
æ¯æISPåIAPç¼ç¨
åå¨å¨
æ¿è½½I2Cæ¥å£ç2Kbits EEPROM
å¤æ©Micro SDå¡åå¨
é³é¢æ¥å£
ä¸è·¯ç«ä½å£°é³é¢HeadPhoneè¾åºæ¥å£ ä¸è·¯æ¬å£°å¨è¾åºæ¥å£
ä¸è·¯é³é¢DACè¾åºæ¥å£
液æ¶è§¦æ¸å±æ¥å£
å辨çï¼ (W) x (H) dots
RGBï¼ colors
bit 并è¡æ¥å£
4线触æ¸å±
亮度å¯è°ï¼PWMæ§å¶ï¼
ä¼ è¾æ¥å£
1è·¯5线串å£ï¼RSçµå¹³
USBæ¥å£ï¼ 1 x USB2.0 OTG/device/host,High-speed,Mbps
1 x USB2.0 OTG/device/host,Full-speed,Mbps
1è·¯TFCARDæ¥å£
ç½ç»æ¥å£ï¼ç¡¬ä»¶IEEE v2ç/Mbps以太ç½æ¥å£ï¼æ åRJ è¿æ¥å¨
1è·¯CAN2.0Bæ¥å£
1è·¯IrDAæ¶åå¨
è¾å ¥æ¥å£
1è·¯AD转æ¢æ¥å£ï¼çµä½å¨å¯è°çµé»æ¨¡æè¾å ¥ï¼ 2个ç¨æ·æé®ï¼1个å¤ä½æé®,1个å¤éæé®
pinæ åJTAGè°è¯æ¥å£
RTC
ä¸è·¯RTCæ座
LEDæ示ç¯
1个çµæºæ示ç¯
2个USB OTG FSæ示ç¯
2个USB OTG HSæ示ç¯
4个ç¨æ·èªå®ä¹ç¯
çµæ°ç¹æ§
æä½æ¸©åº¦ : - â ~ â
æä½æ¹¿åº¦ : % ~ %
ç³»ç»ç¹æ§
æ¯æuCOS-II_v2.以åFreeRTOS_v6.1.0å®æ¶æä½ç³»ç»
æ¯æUCGUI_v3.a
æ¯æFatFs_vR0.a æ件系ç»
æ¯æLWIP _v1.3.2åè®®æ
驱å¨ç¨åº&åºç¨å±èä¾ï¼(ä¸è½½DevKitè¯ä¼°å¥ä»¶æ¦è¿°ï¼å¯äºè§£æ´å¤)
DevKitè¯ä¼°å¥ä»¶æä¾å®åç驱å¨æ¯æ以å丰å¯çåºç¨èä¾ã帮å©å®¢æ·å¿«éè¿å ¥äº§åçäºæ¬¡å¼åï¼èçå¼åæ¶é´ã主è¦å 容å¦ä¸ï¼
åºæ¬é©±å¨ä¾ç¨ï¼ADC, CAN, CRC, DAC, DMA, EXTI, FLASH, GPIO, I2C, I2S, IWDG, LCD-Touch, Lib_DEBUG, NVIC, PWR, RCC, RNG, RTC, SDIO, SysTick, TIM, USART, WWDG
IRDA红å¤é©±å¨ä¾ç¨
I2Sè¯é³ææ¾é©±å¨ä¾ç¨
G-Sensor(ä¸è½´å é度计)åºç¨ä¾ç¨
SDå¡æ¯æFatFs_vR0.aæ件系ç»åºç¨ä¾ç¨
USB Host/Device/OTGåºç¨ä¾ç¨
Ethernetåºç¨ä¾ç¨
uCOS-II_V2. & UCGUI_v3.aæä½ç³»ç»ç§»æ¤ä¾ç¨ å»ç产å
å·¥ä¸èªå¨å
æºè½ä»ªè¡¨
æ¶è´¹çµå
楼å®å®é²
关于STMH配置SDIO接口驱动并移植FATFS
在配置 STMH 的 SDIO 接口驱动并移植 FATFS 时,首先应关注 SDMMC1 的 CUBEMX 配置。根据原理图,对 SDMMC1 的时钟树进行配置,确保时钟频率不超过 MHz。在 SDMMC 配置选项中,时钟分频系数 div 应选择为 5,以确保读写时钟不超过 MHz,此时频率为 /5=MHz,符合要求。配置过程中无需添加 DMA,可暂时采用轮询读写方式。
接下来,将 FATFS 最新版本的源代码添加至项目中。需要编写 SD 卡读写函数,对接 diskio.c 文件中的读写操作。该文件内主要实现对 SD 卡插槽状态的 GPIO 状态读取。底层读写函数包括轮询方式和 DMA 方式,具体使用哪种方式取决于在 diskio.c 文件的操作函数中选择。
在 CUBEMX 自动生成的初始化代码中,调用 HAL_SD_Init() 函数初始化,这可能导致错误:在初始化时未插入卡,造成卡死。建议注释掉此段代码,并在 sdcard_driver.c 文件中进行初始化操作。初始化前先检测 SD 卡是否存在,避免在无卡时进行初始化。
对于 diskio.c 文件,主要实现的函数包括 disk_status()、disk_initialize()、disk_read()、disk_write() 和 disk_ioctl()。此阶段需进行 FATFS 的裁剪,通过配置 ffconf.h 文件完成,确保除常规配置外,启用 exFAT 支持以兼容大于 G 的大容量卡。
编写测试程序,挂载 SD 卡,尝试打开文件。若文件不存在,创建并写入字符串,关闭文件后再次打开并读取内容,结果应显示于终端。最终,通过上述步骤完成 STMH 的 SDIO 接口驱动配置与 FATFS 移植。
如需获取同款开发板,可在闲鱼搜索用户名阿达和阿文,并获取技术咨询。
STMCubeMX系列 | FATFS文件系统
FATFS文件系统是为小型嵌入式系统设计的FAT(文件分配表)文件系统模块,是操作系统中用于明确存储设备或分区上的文件的方法和数据结构。FATFS文件系统支持FAT、FAT、FAT格式,允许在多个存储媒介上使用,并且具备独立的缓冲区,支持多个文件同时读写操作。它的设计遵循ANSI C标准,与磁盘I/O层分离,具有高度的灵活性和可移植性,同时兼容Windows文件系统。
FATFS文件系统的结构层次包括应用层、FATFS模块层和底层接口。应用层是用户与FATFS模块交互的接口,它提供了一系列应用接口函数,如f_open、f_read、f_write和f_close等,使得用户可以像在PC上操作文件一样简单。FATFS模块层是文件系统的实现层,它实现了FAT文件读写协议,提供ff.c和ff.h文件供用户使用。底层接口是FATFS与存储介质交互的部分,包括存储介质读写接口和提供文件创建、修改时间的实时时钟。移植FATFS模块时,通常只需修改两个文件:ffconf.h和diskio.c。
FATFS的移植过程包括数据类型定义、配置和函数编写三个步骤。在数据类型定义中,用户需要在integer.h文件中设置数据类型。配置步骤通过ffconf.h文件完成,用户可以在这里配置FATFS的相关功能。最后的函数编写则涉及到在diskio.c文件中实现底层驱动,包括disk_initialize、disk_status、disk_read、disk_write、disk_ioctl和get_fattime等六个接口函数。
在使用FATFS文件系统时,STMCubeMX可以简化这一过程。通过STMCubeMX配置FATFS,用户仅需简单设置即可完成数据类型定义、配置和函数编写等步骤。STMCubeMX的底层实现框图展示了FATFS与硬件的交互,以及如何通过软件接口实现SD卡的读写操作。
硬件设计中,D1指示灯用于指示系统运行状态,串口1则用于打印调试信息。软件设计部分,首先需要通过STMCubeMX进行设置,然后使用MDK-ARM进行编程。在进行编程时,需要确保使用的是支持FATFS文件系统的SD卡,并且在电脑上进行格式化,建立FAT文件系统。
下载验证阶段,用户需要编译源代码并将其下载到开发板上。在开发板运行后,D1指示灯将不断闪烁,串口会打印出调试信息。将SD卡插入电脑后,用户会发现SD卡中已建立两个文件:Sensor.csv和STMcube.txt。打开这些文件后,用户可以看到写入的数据。