摘要:本文主要向大家介绍了Flash基础入门之Arduino101学习笔记(十四)—— Flash库,通过具体的内容向大家展现,希望对大家学习Flash基础入门有所帮助。
本文主要向大家介绍了Flash基础入门之Arduino101学习笔记(十四)—— Flash库,通过具体的内容向大家展现,希望对大家学习Flash基础入门有所帮助。
一、一些API 1、打开文件 SerialFlashFile file;
file = SerialFlash.open("filename.bin");
if (file)
{ // true if the file exists}
2、读数据
char buffer[256];
file.read(buffer, 256);
3、获取文件尺寸和位置
file.size();
file.position()
file.seek(number);
4、写数据
file.write(buffer, 256);
5、擦除
file.erase(); 擦除文件,就是将指定文件全部内容写为255 (0xFF)
6、创建新文件
SerialFlash.create(filename, size);
SerialFlash.createErasable(filename, size);
返回值为布尔型,返回True说明创建成功,返回false说明创建失败(没有足够的可用空间) 创建后,文件大小不可更改。
7、删除文件
SerialFlash.remove(filename);
删除文件后,其暂用的空间不会被回收,但删除后,可以再创建一个同名文件。
8、检查文件是否存在(不会打开文件)
SerialFlash.exists(filename);
9、列出文件所有信息
SerialFlash.opendir();
SerialFlash.readdir(buffer, buflen, filelen);
二、demo
1、写文件
/*********************头文件**********************/
#include
#include
/*********************宏定义*******************/
#define File_SIZE 256
/*********************全局变量*******************/
//文件名和内容(要写的)
const char *filename = "ABDfile.txt";
const char *contents = "0123456789ABCDEF";
//flash指针
const int g_FlashChipSelect = 21; // digital pin for flash chip CS pin
/****************创建文件如果不存在********************/
bool create_if_not_exists (const char *filename)
{
if ( !SerialFlash.exists(filename) )
{
Serial.println("Creating file " + String(filename));
return (SerialFlash.create(filename, File_SIZE));
}
Serial.println("File " + String(filename) + " already exists");
return true;
}
/*****************初始化函数********************/
void setup()
{
//串口配置
Serial.begin(9600);
while (!Serial) ;
delay(100);
Serial.println("Serial is OK!");
//配置Flash
if ( !SerialFlash.begin(g_FlashChipSelect) )
{
Serial.println("Unable to access SPI Flash chip");
}
//创建文件指针
SerialFlashFile file;
//创建文件,如果这个文件不存在
if (!create_if_not_exists(filename))
{
Serial.println("Not enough space to create file " + String(filename));
return;
}
}
void loop()
{
}
2、读文件
/*********************头文件**********************/
#include
#include
/*********************宏定义*******************/
/*********************全局变量*******************/
//flash指针
const int g_FlashChipSelect = 21; // digital pin for flash chip CS pin
/********************空格*******************/
void spaces(int num)
{
for ( int i=0; i < num; i++ )
{
Serial.print(" ");
}
}
/*****************初始化函数********************/
void setup()
{
//串口配置
Serial.begin(9600);
while (!Serial) ;
delay(100);
Serial.println("Serial is OK!");
//配置Flash
if ( !SerialFlash.begin(g_FlashChipSelect) )
{
Serial.println("Unable to access SPI Flash chip");
}
//开路径
SerialFlash.opendir();
while(1)
{
char filename[64];
unsigned long filesize;
if( SerialFlash.readdir( filename , sizeof(filename) , filesize) )
{
Serial.print(" ");
Serial.print(filename);
spaces( 20 - strlen(filename) );
Serial.print(" ");
Serial.print(filesize);
Serial.print(" bytes");
Serial.println();
}
else
{
break;
}
}
}
void loop()
{
}
3、删除全部Flash
/*********************头文件**********************/
#include
#include
/*********************宏定义*******************/
/*********************全局变量*******************/
//flash指针
const int g_FlashChipSelect = 21; // digital pin for flash chip CS pin
SerialFlashFile file;
const unsigned long testIncrement = 4096;
float eraseBytesPerSecond(const unsigned char *id)
{
if (id[0] == 0x20) return 152000.0; // Micron
if (id[0] == 0x01) return 500000.0; // Spansion
if (id[0] == 0xEF) return 419430.0; // Winbond
if (id[0] == 0xC2) return 279620.0; // Macronix
return 320000.0; // guess?
}
/*****************初始化函数********************/
void setup()
{
//串口配置
Serial.begin(9600);
while (!Serial) ;
delay(100);
Serial.println("Serial is OK!");
// wait up to 10 seconds for Arduino Serial Monitor
unsigned long startMillis = millis();
while (!Serial && (millis() - startMillis < 10000)) ;
delay(100);
//配置Flash
if ( !SerialFlash.begin(g_FlashChipSelect) )
{
Serial.println("Unable to access SPI Flash chip");
}
//读ID
unsigned char id[5];
SerialFlash.readID(id);
unsigned long size = SerialFlash.capacity(id);
//开路径
SerialFlash.opendir();
if( size > 0 )
{
Serial.print( "Flash Memory has ");
Serial.print( size );
Serial.println( " bytes.");
Serial.println( "Erasing All Flash Memory:");
Serial.print(" estimated wait: ");
int seconds = (float)size / eraseBytesPerSecond(id) + 0.5;
Serial.print(seconds);
Serial.println(" seconds.");
Serial.println(" Yes, full chip erase is SLOW!");
SerialFlash.eraseAll();
unsigned long dotMillis = millis();
unsigned char dotcount = 0;
while (SerialFlash.ready() == false)
{
if (millis() - dotMillis > 1000)
{
dotMillis = dotMillis + 1000;
Serial.print(".");
dotcount = dotcount + 1;
if (dotcount >= 60)
{
Serial.println();
dotcount = 0;
}
}
}
if (dotcount > 0) Serial.println();
Serial.println("Erase completed");
unsigned long elapsed = millis() - startMillis;
Serial.print(" actual wait: ");
Serial.print(elapsed / 1000ul);
Serial.println(" seconds.");
}
}
void loop()
{
}
以上就介绍了Flash的相关知识,希望对Flash有兴趣的朋友有所帮助。了解更多内容,请关注职坐标常用软件Flash频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号