本帖最后由 kkhkbb 于 2018-5-4 18:54 編輯
一、 概述 1、 文件系統(tǒng)簡(jiǎn)介: (1)文件系統(tǒng):管理和存儲(chǔ)文件信息的軟件機(jī)構(gòu)。 (2)常用的文件系統(tǒng): - FAT/FATFS。
- NTFS(基于安全性的文件系統(tǒng),是Wundow NT采用的獨(dú)特的文件系統(tǒng)結(jié)構(gòu)。
- CDFS:CDFS是大部分光盤(pán)的文件系統(tǒng)。
2、 FATFS文件系統(tǒng)簡(jiǎn)介: FATFS是一個(gè)完全免費(fèi)開(kāi)源的FAT文件系統(tǒng)模塊,專(zhuān)門(mén)為小型的嵌入式系統(tǒng)而設(shè)計(jì),完全用標(biāo)準(zhǔn)C語(yǔ)言編寫(xiě),具有良好的硬件平臺(tái)獨(dú)立性,可移植到8051、PIC、ARM等系列單片機(jī)上而只需做簡(jiǎn)單的修改。它支持FAT12、FAT16、FATI32,支持多個(gè)存儲(chǔ)媒介;有獨(dú)立的緩沖區(qū),可以對(duì)多個(gè)文件進(jìn)行讀/寫(xiě),并特別對(duì)8位單片機(jī)和16位單片機(jī)做了優(yōu)化。 3、 FATFS文件系統(tǒng)特點(diǎn): - Window兼容的FAT文件系統(tǒng)(支持FAT12/FAT16/FAT32)。
- 代碼量少、效率高。
- 與平臺(tái)無(wú)關(guān)、移植簡(jiǎn)單,全部通過(guò)C語(yǔ)言編寫(xiě)。
- 多種配置選項(xiàng):支持多卷(物理驅(qū)動(dòng)器或分區(qū),最多10個(gè)卷)、多個(gè)ANSI/OEM代碼頁(yè)、支持長(zhǎng)文件名、支持RTOS、支持多種扇區(qū)大小等。
4、 文件系統(tǒng)主要文件介紹: 文件名 | | | | | 需要根據(jù)需求來(lái)配置參數(shù) | | | | | | | | | | | | 與平臺(tái)相關(guān)的代碼,需要用戶(hù)根據(jù)存儲(chǔ)介質(zhì)來(lái)編寫(xiě)函數(shù) | | | |
二、 硬件電路 
圖14_0 原理圖芯片引角連接 
圖14_1 原理圖TF卡座引角連接 三、 實(shí)驗(yàn)原理 STM32F407上帶有SDIO控制器,iCore3核心板上將SDIO連接到TF卡座上。本實(shí)驗(yàn)將Micro SD卡插入TF卡座上即可。通過(guò)FATFS創(chuàng)建test.txt文件,并且寫(xiě)入數(shù)據(jù)0-511,然后讀出并打印到終端上。硬件連接示意圖如下: 圖14_2 工作原理示意圖 四、 源代碼 主函數(shù) - <font color="#444444"><font face="Tahoma">/*
- * --------------------
- * Company : LUOYANG GINGKO TECHNOLOGY CO.,LTD.
- : 洛陽(yáng)銀杏科技有限公司
- * --------------------
- * Project Name : iCore3 fatfs_sd
- * Description : iCore3 fatfs_sd
- * --------------------
- * Tool Versions : uVision V5.17.0.0
- * Target Device : STM32F407IGT6
- * --------------------
- * Engineer : ysloveivy.
- * Revision : 0.01
- * Created Date : 2015.12.02
- * --------------------
- * Engineer :
- * Revision :
- * Modified Date :
- * --------------------
- * Additional Comments :
- *
- * --------------------
- */
- //--------------------------- Include ---------------------------//
- #include "..\include\led.h"
- #include "..\include\main.h"
- #include "..\include\usart.h"
- #include "..\fatfs\ff.h"
- #include "..\fatfs\diskio.h"
- #include "..\include\stm324xg_eval_sdio_sd.h"
- #include "..\fwlib\inc\stm32f4xx_gpio.h"
- #include <ctype.h>
- #include <string.h>
- #include <stdlib.h>
- #include <stdio.h>
- //---------------------------- Define ---------------------------//
- //-------------------------- Variable ---------------------------//
- //--------------------- Function Prototype ----------------------//
- //--------------------------- Function --------------------------//
- /*
- * Name : main
- * Description : ---
- * Author : ysloveivy.
- *
- * History
- * --------------------
- * Rev : 0.00
- * Date : 12/02/2015
- *
- * create.
- * --------------------
- */
- int main(void)
- {
- int i,j;
- FIL file; //文件對(duì)象
- FATFS fatfs; //邏輯驅(qū)動(dòng)器的工作區(qū)
- static FRESULT res; //FRESULT函數(shù)公共結(jié)果代碼
- unsigned char write_buffer[512]; //寫(xiě)文件緩沖區(qū)
- unsigned char read_buffer[512]; //讀文件緩沖區(qū)
- unsigned int counter;
- led.initialize();
- usart4.initialize(115200);
- usart4.printf("\x0c");
- usart4.printf("\033[1;32;40m");
- usart4.printf("\r\n\r\nhello! I am iCore3!\r\n\r\n\r\n");
- //判斷SD卡是否初始化
- if(SD_Init() != 0){
- usart4.printf("SD ERROR!\r\n");
- while(1){
- for(i = 0;i < 10000000;i++);
- LED_RED_ON;
- for(i = 0;i < 10000000;i++);
- LED_RED_OFF;
- }
- }else{
- usart4.printf("SD Initialize successful!\r\n");
- }
- for(i = 0;i < 1000000;i++);
- res = f_mount(&fatfs,"0:",1); //掛載SD卡
- if(res != RES_OK){
- usart4.printf("f_mount error!\r\n");
- while(1){
- for(i = 0;i < 10000000;i++);
- LED_RED_ON;
- for(i = 0;i < 10000000;i++);
- LED_RED_OFF;
- }
- }else{
- usart4.printf("f_mount successful!\r\n");
- }
- res = f_open(&file,"0:/test.txt",FA_READ | FA_WRITE | FA_OPEN_ALWAYS);
- //打開(kāi)驅(qū)動(dòng)器0上的源文件
- if(res != RES_OK){
- usart4.printf("f_open error!\r\n");
- while(1){
- for(i = 0;i < 10000000;i++);
- LED_RED_ON;
- for(i = 0;i < 10000000;i++);
- LED_RED_OFF;
- }
- }else{
- usart4.printf("f_open successful!\r\n");
- }
- res = f_lseek(&file,0); //移動(dòng)寫(xiě)指針到文件首
- if(res != RES_OK){
- usart4.printf("f_lseek error!\r\n");
- while(1){
- for(i = 0;i < 10000000;i++);
- LED_RED_ON;
- for(i = 0;i < 10000000;i++);
- LED_RED_OFF;
- }
- }else{
- usart4.printf("f_lseek successful!\r\n");
- }
- for(i = 0;i < 512;i++){
- write_buffer[i] = i % 256;
- }
- res = f_write(&file,write_buffer,512,&counter); //將緩沖器中的內(nèi)容寫(xiě)入源文件
- if(res != RES_OK || counter != 512){
- usart4.printf("f_write error!\r\n");
- while(1){
- for(i = 0;i < 10000000;i++);
- LED_RED_ON;
- for(i = 0;i < 10000000;i++);
- LED_RED_OFF;
- }
- }else{
- usart4.printf("f_write successful!\r\n");
- }
- res = f_lseek(&file,0); //移動(dòng)讀指針到文件首
- if(res != RES_OK){
- usart4.printf("f_lseek error!\r\n");
- while(1){
- for(i = 0;i < 10000000;i++);
- LED_RED_ON;
- for(i = 0;i < 10000000;i++);
- LED_RED_OFF;
- }
- }else{
- usart4.printf("f_lseek successful!\r\n");
- }
- res = f_read(&file,read_buffer,512,&counter);
- if(res != RES_OK || counter != 512){
- usart4.printf("f_read error!\r\n");
- while(1){
- for(i = 0;i < 10000000;i++);
- LED_RED_ON;
- for(i = 0;i < 10000000;i++);
- LED_RED_OFF;
- }
- }else{
- usart4.printf("f_read successful!\r\n");
- }
- f_close(&file); //關(guān)閉源文件
- usart4.printf("read data:\r\n");
- for(i = 0;i < 32;i++){
- for(j = 0; j < 16; j ++)
- usart4.printf(" %02X",read_buffer[i*16+j]);
- usart4.printf("\r\n");
- }
- while(1){
- for(i = 0;i < 10000000;i++);
- LED_GREEN_ON;
- for(i = 0;i < 10000000;i++);
- LED_GREEN_OFF;
- }</font></font>
復(fù)制代碼五、 實(shí)驗(yàn)步驟 1. 把仿真器與iCore3的SWD調(diào)試口相連(直接相連或者通過(guò)轉(zhuǎn)接器相連); 2. 把iCore3通過(guò)Micro USB線(xiàn)與計(jì)算機(jī)相連,為iCore3供電; 3. 打開(kāi)PuTTY串口終端(注PuTTY使用方法見(jiàn)附錄); 4. 打開(kāi)Keil MDK開(kāi)發(fā)環(huán)境,并打開(kāi)本實(shí)驗(yàn)工程; 5. 燒寫(xiě)程序到iCore3上; 6. 也可以進(jìn)入Debug模式,單步運(yùn)行或設(shè)置斷點(diǎn)驗(yàn)證程序邏輯。 六、 實(shí)驗(yàn)現(xiàn)象 在終端顯示屏上可以看到FATFS操作的信息,如下圖: 圖14_3 實(shí)驗(yàn)現(xiàn)象圖 七、 資料及代碼包下載 鏈接:http://pan.baidu.com/s/1eRHeR9S 密碼:go0n 附錄: 1、iCore3供電后,打開(kāi)計(jì)算機(jī)----屬性----設(shè)備管理器----端口。 圖14_4 COM口查看示意圖 2、打開(kāi)PuTTY。 圖14_5 PuTTY軟件設(shè)置示意圖 3、此時(shí)就可以燒寫(xiě)程序進(jìn)行驗(yàn)證了。
|