Flash基础入门之Arduino101学习笔记(十四)—— Flash库
小标 2018-11-15 来源 : 阅读 1331 评论 0

摘要:本文主要向大家介绍了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频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程