查看: 2987|回复: 10

Arduino 101 SerialFlash库读写例程

[复制链接]
  • TA的每日心情
    奋斗
    2018-7-3 21:30
  • 签到天数: 46 天

    [LV.5]常住居民I

    发表于 2017-1-5 00:59 | 显示全部楼层 |阅读模式
    发现example居然没读取的示例,自己写了个:

    [C++] 纯文本查看 复制代码
    /*
    Arduino 101 SPI Flash读文件
    奈何col 2017.1.11
    [url=http://www.arduino.cn]www.arduino.cn[/url]
    */
    #include <SerialFlash.h>
    #include <SPI.h>
    
    // 文件名 
    const char *filename = "Arduino101.txt";
    // 片选引脚
    const int FlashChipSelect = 21;
    
    void setup() {
      Serial.begin(9600);
      while (!Serial) ;
      delay(500);
      // 初始化SPI Flash芯片
      SerialFlash.begin(FlashChipSelect);
    
      // 如果文件不存在,则输出提示
      // 如果文件存在,则读取文件内容
      if(!SerialFlash.exists(filename)) {
        Serial.println("File " + String(filename) + " does not exist");
      }
      else {
        SerialFlashFile file;
        file = SerialFlash.open(filename);
        int len = file.size();
        char fileBuffer[len];
        file.read(fileBuffer, len);
        Serial.println("file:" + String(filename));
        Serial.println("size:" + len);
        Serial.println("contents:\r\n" + String(fileBuffer));
      }
    }
    
    void loop() {
    }
    


    原写文件示例不够清晰,也重新修改:
    [C++] 纯文本查看 复制代码
    /*
    Arduino 101 SPI Flash写文件
    奈何col 2017.1.11
    [url=http://www.arduino.cn]www.arduino.cn[/url]
    */
    
    #include <SerialFlash.h>
    #include <SPI.h>
    
    // 文件大小
    #define FSIZE 256
    // 文件名
    const char *filename = "Arduino101.txt";
    // 文件内容
    const char *contents = "The groundbreaking Intel Curie module expands the possibilities of what tech can do.";
    // 片选引脚
    const int FlashChipSelect = 21; 
    
    void setup() {
      Serial.begin(9600);
      while (!Serial) ;
      delay(500);
      // 初始化SPI Flash芯片
      SerialFlash.begin(FlashChipSelect);
    
      // 如果文件已存在,则输出提示
      // 如果文件不存在,则创建文件并写入
      if(SerialFlash.exists(filename)) {
          Serial.println("File " + String(filename) + " already exists");
      }
      else {
          Serial.println("Creating file " + String(filename));
          SerialFlash.create(filename, FSIZE);
          // 新建SerialFlashFile对象用于文件操作
          SerialFlashFile file;
          file = SerialFlash.open(filename);
          file.write(contents, strlen(contents) + 1);
          Serial.println("String \"" + String(contents) + "\" written to file " + String(filename));
      }
    }
    
    void loop() {
    }
    
    




    如果以上内容对你有帮助,你可以通过打赏支持作者
  • TA的每日心情
    开心
    2017-2-26 10:18
  • 签到天数: 259 天

    [LV.8]以坛为家I

    发表于 2017-2-17 21:29 | 显示全部楼层
    2m的flash,一定试试,感谢分享。
    打赏作者鼓励一下!

    该用户从未签到

    发表于 2018-1-28 01:04 | 显示全部楼层
    实际操作无法读取,完全没反应,请问是可能什么原因?

    该用户从未签到

    发表于 2018-1-28 08:45 | 显示全部楼层
    hanspond 发表于 2018-1-28 01:04
    实际操作无法读取,完全没反应,请问是可能什么原因?

    有可能是因为你没有先擦除干净
    打赏作者鼓励一下!

    该用户从未签到

    发表于 2018-1-28 14:00 | 显示全部楼层
    Zoologist 发表于 2018-1-28 08:45
    有可能是因为你没有先擦除干净

    擦拭板子?
    我后来改用了CurieSerialFlash.h

    SerialFlash.begin(ONBOAR_FLASH_SPI_PORT,ONBOARD_FLASH_CS_PIN)
    现在可以正常擦写了。原文帖子里面的指定SerialFlash.begin(21)不行

    该用户从未签到

    发表于 2018-1-28 16:42 | 显示全部楼层
    hanspond 发表于 2018-1-28 14:00
    擦拭板子?
    我后来改用了CurieSerialFlash.h

    哦 我说的是每次写入之前最好先清空  spi

    101要用 CurieSerialFlash
    打赏作者鼓励一下!

    该用户从未签到

    发表于 2018-1-28 22:02 | 显示全部楼层
    Zoologist 发表于 2018-1-28 16:42
    哦 我说的是每次写入之前最好先清空  spi

    101要用 CurieSerialFlash

    感觉不是擦除的问题,写入的时候就没反应(写入的下一个语句的serialprint十几分钟都没反应),然后载入检查spi有没文件也是显示0。改用curieserialflash就没问题了。

    该用户从未签到

    发表于 2018-2-4 11:20 | 显示全部楼层
    请问该如何将结构体对象存储在文件中,再读取出来

    点评

    参考:用共用体结构保存其他类型的数据到EEPROM: http://www.arduino.cn/thread-2684-1-1.html  详情 回复 发表于 2018-2-4 19:49
  • TA的每日心情
    奋斗
    2018-7-3 21:30
  • 签到天数: 46 天

    [LV.5]常住居民I

     楼主| 发表于 2018-2-4 19:49 | 显示全部楼层
    ouyangxin 发表于 2018-2-4 11:20
    请问该如何将结构体对象存储在文件中,再读取出来

    参考:用共用体结构保存其他类型的数据到EEPROM: http://www.arduino.cn/thread-2684-1-1.html
    如果以上内容对你有帮助,你可以通过打赏支持作者

    该用户从未签到

    发表于 2018-2-7 13:28 | 显示全部楼层
    ouyangxin 发表于 2018-2-4 11:20
    请问该如何将结构体对象存储在文件中,再读取出来

    谢谢。可以用结构体的定义方法替代共用体吗
    高级模式  
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    G哥撸Arduino之:深入浅出串口通信(理论篇)
    G哥撸Arduino之:深入浅出
    继上一篇《深入浅出SPI通信》,本期我们接着聊聊arduino的另一种通信方式:串口通信
    DIY一个超炫酷“锹甲”机器人——Arduino Nrf24L01遥控机械臂
    DIY一个超炫酷“锹甲”机
    大家好,初来乍到,这是我最近DIY的作品,欢迎小伙伴们拍砖! 由于某些原因我把介绍都
    Visual Studio Code对esp32/8266编译的教程 (使用blinker库)
    Visual Studio Code对esp3
    前言,Arduino IDE对小程序来讲很好用,界面简单直观易用,但也就是因为过于的简单,
    Arduino+ESP8266接收服务器信息
    Arduino+ESP8266接收服务
    上一篇文章《Arduino+ESP8266上传数据到服务器》我们介绍了Arduino如何将数据上传到服
    Arduino 怎么读取24V光电开关的状态
    Arduino 怎么读取24V光电
    我在淘宝上买了一个光电开关,链接如下: https://detail.tmall.com/item.htm?id=5738
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表