Rainbow板載一個TF卡的卡座,可以直接插入TF卡。Rainbow成功移植了Fatfs文件系統,可以直接使用Fatfs的函數對文件進行讀寫,同時,為了簡化對文件的操作,開發包中封裝了對文件讀寫類庫,可以更加方便對文件進行讀寫。
考慮到嵌入式系統的特點,文件系統有一些小的限制:
1、文件名長度最大不超過8個字符,后綴名不超過3個字符
2、不支持中文文件名
Rainbow采用C++對fatfs進行了封裝,對文件讀寫變得更加簡單,我們看看文件讀寫的步驟:
1、定義FileStream對象:FileStream file(fileName, FA_OPEN_ALWAYS | FA_WRITE);
在定義的時候需要指定要打開的文件全路徑以及文件打開的方式,以寫的方式打開文件,如果文件不存在,會產生異常,需要加上FA_OPEN_ALWAYS,FA_WRITE表示以寫的方式打開,FA_READ表示已讀的方式打開文件
2、可以通過if(file)來判斷文件是否打開成功,如果打開成功,if條件成立
3、如果文件打開成功,接下來就可以調用
file.write((uint8_t *)Write_Buffer, BUFFER_SIZE)或者
file.read((uint8_t *)Read_Buffer, BUFFER_SIZE)
來對文件進行讀寫操作
4、文件讀寫完畢,調用file.close()關閉文件
在軟件包的“Projects\File”文件夾包含了本文的完整工程,可以直接編譯、燒寫和調試。這個程序主要展示如何對TF中文件進行讀寫,看看main.cpp的代碼:
#include "WProgram.h"
#include "File.h"
#define countof(a) (sizeof(a) / sizeof(*(a)))
#define BUFFER_SIZE (countof(Write_Buffer)-1)
uint8_t Write_Buffer[] = "STM32F10xx Fatfs Demo";
uint8_t Read_Buffer[BUFFER_SIZE];
int main()
{
boardInit();
Serial.begin();
Serial.println("Fatfs demo start...");
//讀寫TF卡的根目錄中的demo.txt
String fileName = "/demo.txt";
//以寫的方式打開一個文件,寫入字符串
//為了測試完整的讀寫過程,我們沒有以讀寫方式打開文件,而是先以寫的方式打開,然后關閉,然后再以讀的方式打開讀取寫入內容
FileStream file_w(fileName, FA_OPEN_ALWAYS | FA_WRITE);
if(file_w)
{
if(file_w.write((uint8_t *)Write_Buffer, BUFFER_SIZE) == BUFFER_SIZE)
{
Serial.print("Write \"");
Serial.print((char *)Write_Buffer);
Serial.println("\" to demo.txt ... ");
}
}
//寫入完畢,關閉文件
file_w.close();
//以讀的方式打開demo.txt
FileStream file_r(fileName, FA_READ);
if(file_r)
{
if(file_r.read((uint8_t *)Read_Buffer, BUFFER_SIZE) == BUFFER_SIZE)
{
Serial.print("Read \"");
Serial.print((char *)Read_Buffer);
Serial.println("\" from demo.txt ... ");
}
}
//讀取完畢,關閉文件
file_r.close();
Serial.println("Fatfs demo end...");
}
上面的程序編譯無誤后,將程序燒寫到Rainbow中,然后在電腦上運行串口調試工具并和Rainbow連接成功,可以在串口調試工具中看到文件讀寫的日志。將TF卡從Rainbow中取出,放到電腦上可以看到在根目錄中創建了一個demo.txt,打開demo.txt后可以看到里面保存的內容正是我們寫入的信息。