LinkIt ONE板子內部已有16MB Flash,其中系統已規劃用去6MB,這一點我不太確定,規格書寫著有10MB可供使用者儲存資料;另可外插Micro SD記憶卡,容量最大支援32GB。
下圖是Micro SD卡插入前、中、後的模樣,插槽有彈簧,應可簡單分辨是否插好。
底下程式碼從序列埠接收資料,使用LFlash開啟檔案並寫入。
#include <LFlash.h>
#define BAUDRATE 19200
#define LED_PIN 13
void setup(){
Serial.begin(BAUDRATE);
Serial.setTimeout(1000);
pinMode(LED_PIN, OUTPUT);
if(LFlash.begin()){ // 初始化LFlash
Serial.println("Flash ok");
digitalWrite(LED_PIN, HIGH);
}
else{
Serial.println("Flash fail");
digitalWrite(LED_PIN, LOW);
}
}
void loop(){
char d[64+1+1];
int len;
LFile f;
while(Serial.available()){ // 接收資料
len = Serial.readBytesUntil('\n', d, 64);
d[len] = '\n';
d[len+1] = '\0';
Serial.print(d); // 回送到序列埠
f = LFlash.open("data.txt", FILE_WRITE); // 開檔
f.write(d); // 寫入
f.close(); // 關檔
}
}
以寫入模式FILE_WRITE開檔時,若檔案不存在會自動建立空的新檔,若檔案已存在,會開啟該檔,讀寫位置會從檔案結尾開始,所以下一次再開檔的話,寫入資料會附加在後。
開啟序列埠監控視窗,行結尾設為「New line」 ,輸入一些資料,按下Enter送出。
#include
#define BAUDRATE 19200
void setup(){
Serial.begin(BAUDRATE);
LSD.begin();
}
void printSpace(int indent){
int i;
for(i = 0; i < indent; i++){
Serial.print(' ');
}
}
void printD(const char *path){
LFile f = LSD.open(path, FILE_READ); // 開檔
if(f.isDirectory()){ // 判斷是不是個目錄
LFile subf;
Serial.println(f.name()); // 印出目錄名
// 呼叫openNextFile可依序得到該目錄底下的東西
while(subf = f.openNextFile(FILE_READ)){
printSpace(4);
Serial.println(subf.name());
subf.close();
}
}
f.close();
}
void loop(){
printD("/mp3"); // 想印出目錄的路徑
Serial.println("---------------------");
delay(5000);
}
輸出如下:
謝謝分享!
ReplyDelete您好:
ReplyDelete我從您這個例子要執行"字串"寫入時,在:"f.write(d)://寫入"這行程式發生問題。
請問:是否因為您範例的資料格式是int,而我是"字串"的原因?
如因為字串造成問題,能否請問要如何寫入flash裡?
謝謝!
發生什麼問題?
Deletewrite應可接受字串。
我也不是很清楚,不過編譯器上的錯誤訊息顯示:no matching function for call to 'LFile::write(String&)'
ReplyDelete可以請問這是哪裡有問題嗎?
謝謝您!
write不能接受String。
Delete改成write(s.c_str()); 試試吧,
其中s是String物件。
您好:
ReplyDelete您說write不能接受String。
那我如果要在寫入的txt裡看到的是一組一組的資料(由UART傳入),
是不是要把傳入的資料先拆開,一個一個存到flash,待資料長度確定後,在換行存入?
看不懂你的問題。
Delete您好:
ReplyDelete後來我試了一下終於搞懂資料型態了,謝謝您的指導^^