Rainbow板載一個(gè)TF卡的卡座,可以直接插入TF卡。Rainbow成功移植了Fatfs文件系統(tǒng),可以直接使用Fatfs的函數(shù)對(duì)文件進(jìn)行讀寫(xiě),同時(shí),為了簡(jiǎn)化對(duì)文件的操作,開(kāi)發(fā)包中封裝了對(duì)文件讀寫(xiě)類庫(kù),可以更加方便對(duì)文件進(jìn)行讀寫(xiě)。
考慮到嵌入式系統(tǒng)的特點(diǎn),文件系統(tǒng)有一些小的限制:
1、文件名長(zhǎng)度最大不超過(guò)8個(gè)字符,后綴名不超過(guò)3個(gè)字符
2、不支持中文文件名
Rainbow采用C++對(duì)fatfs進(jìn)行了封裝,對(duì)文件讀寫(xiě)變得更加簡(jiǎn)單,我們看看文件讀寫(xiě)的步驟:
1、定義FileStream對(duì)象:FileStream file(fileName, FA_OPEN_ALWAYS | FA_WRITE);
在定義的時(shí)候需要指定要打開(kāi)的文件全路徑以及文件打開(kāi)的方式,以寫(xiě)的方式打開(kāi)文件,如果文件不存在,會(huì)產(chǎn)生異常,需要加上FA_OPEN_ALWAYS,F(xiàn)A_WRITE表示以寫(xiě)的方式打開(kāi),F(xiàn)A_READ表示已讀的方式打開(kāi)文件
2、可以通過(guò)if(file)來(lái)判斷文件是否打開(kāi)成功,如果打開(kāi)成功,if條件成立
3、如果文件打開(kāi)成功,接下來(lái)就可以調(diào)用
file.write((uint8_t *)Write_Buffer, BUFFER_SIZE)或者
file.read((uint8_t *)Read_Buffer, BUFFER_SIZE)
來(lái)對(duì)文件進(jìn)行讀寫(xiě)操作
4、文件讀寫(xiě)完畢,調(diào)用file.close()關(guān)閉文件
在軟件包的“Projects\File”文件夾包含了本文的完整工程,可以直接編譯、燒寫(xiě)和調(diào)試。這個(gè)程序主要展示如何對(duì)TF中文件進(jìn)行讀寫(xiě),看看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...");
//讀寫(xiě)TF卡的根目錄中的demo.txt
String fileName = "/demo.txt";
//以寫(xiě)的方式打開(kāi)一個(gè)文件,寫(xiě)入字符串
//為了測(cè)試完整的讀寫(xiě)過(guò)程,我們沒(méi)有以讀寫(xiě)方式打開(kāi)文件,而是先以寫(xiě)的方式打開(kāi),然后關(guān)閉,然后再以讀的方式打開(kāi)讀取寫(xiě)入內(nèi)容
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 ... ");
}
}
//寫(xiě)入完畢,關(guān)閉文件
file_w.close();
//以讀的方式打開(kāi)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 ... ");
}
}
//讀取完畢,關(guān)閉文件
file_r.close();
Serial.println("Fatfs demo end...");
}
上面的程序編譯無(wú)誤后,將程序燒寫(xiě)到Rainbow中,然后在電腦上運(yùn)行串口調(diào)試工具并和Rainbow連接成功,可以在串口調(diào)試工具中看到文件讀寫(xiě)的日志。將TF卡從Rainbow中取出,放到電腦上可以看到在根目錄中創(chuàng)建了一個(gè)demo.txt,打開(kāi)demo.txt后可以看到里面保存的內(nèi)容正是我們寫(xiě)入的信息。