查看: 7002|回复: 7

Arduino 101/Genuino 101 EEPROM的使用

[复制链接]
  • TA的每日心情
    郁闷
    2018-12-6 22:21
  • 签到天数: 48 天

    [LV.5]常住居民I

    发表于 2016-3-15 23:57 | 显示全部楼层 |阅读模式
    EEPROM (Electrically Erasable Programmable Read-Only Memory),电可擦可编程只读存储器-——一种断电后数据不丢失的存储设备。常被用作记录设备工作数据、保存配置参数。简而言之就是你想断电后Arduino还要记住一些数据,那就可以使用EEPROM。

    101的EEPROM库和其他Arduino的不同。从源码可知,Arduino 101/Genuino 101(此后称为101),并没有EEPROM存储单元,其提供的EEPROM库,实际上是在操纵其上的Flash空间。CurieEEPROM 从intel Curie的Flash中划分出了 2Kbyte 的空间,模拟成EEPROM空间。

    要使用该库,需要调用的头文件 CurieEEPROM.h。在其示例程序中,展示了6个相关例程:

    -----------------------------------------
    eeprom_clear   清空EEPROM中所有数据
    eeprom_crc      使用EEPROM进行CRC校验
    eeprom_get      从EEPROM读出特定类型的数据
    eeprom_put      向EEPROM存入特定类型数据
    eeprom_read     从EEPROM读取4byte数据
    eeprom_write     向EEPROM写入4byte数据
    -----------------------------------------
    这里我仅对最常用的3个例程进行讲解

    向EEPROM写入数据
    主要使用的到的方法有二:

    kittenblock中小学创客名师推荐的图形化编程软件

    EEPROM.write(addr, val); //向指定地址,写入4字节的数据val
    EEPROM.write8(addr, val);//向指定地址,写入1字节的数据val 



    kittenblock中小学创客名师推荐的图形化编程软件

    #include <CurieEEPROM.h>
    
    /** the current address in the EEPROM (i.e. which byte we're going to write to next) **/
    int addr = 0;
    
    void setup() {
      Serial.begin(9600);
      while (!Serial) {
        ; // wait for serial port to connect. Needed for native USB port only
      }
    
      for(int i = 0; i < 512; i++)
      {
        unsigned long  val = analogRead(0);
        Serial.print("Addr:\t");
        Serial.print(addr);
        Serial.print("\tWriting: ");
        Serial.println(val);
        EEPROM.write(addr, val); 
        addr++;
        delay(100);
      }
        
      Serial.println("done writing");
    }
    
    void loop() {
    
    }


    从EEPROM读取数据与EEPROM写入方法类似,读取EEPROM数据的方法如下:

    kittenblock中小学创客名师推荐的图形化编程软件

    EEPROM.read(addr); //从指定地址,读取4字节的数据
    EEPROM.read8(addr);//从指定地址,读取1字节的数据



    kittenblock中小学创客名师推荐的图形化编程软件

    #include <CurieEEPROM.h>
    
    // start reading from the first byte (address 0) of the EEPROM
    int address = 0;
    unsigned long value;
    
    void setup() {
      // initialize serial and wait for port to open:
      Serial.begin(9600);
      while (!Serial) {
        ; // wait for serial port to connect. Needed for native USB port only
      }
    }
    
    void loop() {
      // read a dword from the current address of the EEPROM
      value = EEPROM.read(address);
    
      Serial.print(address);
      Serial.print("\t");
      Serial.print(value, DEC);
      Serial.println();
    
      //increment address
      address++;
      if (address == EEPROM.length()) {
        address = 0;
      }
    
      delay(500);
    }


    清空EEPROM中所有数据
    这个真没啥说的了,要清空EEPROM空间中的所有数据,直接调用 EEPROM.clear() 函数即可。
    示例程序如下:

    kittenblock中小学创客名师推荐的图形化编程软件

    #include <CurieEEPROM.h>
    
    void setup() {
      // initialize the LED pin as an output.
      pinMode(13, OUTPUT);
      
      EEPROM.clear();
    
      // turn the LED on when we're done
      digitalWrite(13, HIGH);
    }
    
    void loop() {
      /** Empty loop. **/
    }




    如果以上内容对你有帮助,你可以通过打赏支持作者
  • TA的每日心情
    开心
    2016-7-3 20:19
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    发表于 2016-6-23 16:00 | 显示全部楼层
    我想保存arduino101六轴的数据,保存的数据比较多(超过2kB),而且是需要断电后也能保护,然后下次连接电脑时能够将这些数据导出来保存在一定格式里(例如.txt格式)有几个问题:
    1、这种情况我还用EEPROM吗?有大一些存储空间吗?
    2、应如何将这些存在arduino板卡里的数据导出来,存在电脑.txt文件里?
    希望奈何大神能指点指点,焦头烂额中。我可以参考写什么资料?

    点评

    101上集成了一个flash芯片,可以用自带的SPIflash库驱动,可以存2MB的数据  详情 回复 发表于 2016-12-18 12:02
  • TA的每日心情
    擦汗
    2017-2-26 14:29
  • 签到天数: 23 天

    [LV.4]偶尔看看III

    发表于 2016-12-18 11:50 | 显示全部楼层
    D:\
  • TA的每日心情
    擦汗
    2017-2-26 14:29
  • 签到天数: 23 天

    [LV.4]偶尔看看III

    发表于 2016-12-18 11:54 | 显示全部楼层
    总是看到EEPROM,但一直不知道该怎么使用,奈何大大能不能举一些小项目用到EEPROM,这样像对我这样的初学者能更好地学习
  • TA的每日心情
    郁闷
    2018-12-6 22:21
  • 签到天数: 48 天

    [LV.5]常住居民I

     楼主| 发表于 2016-12-18 12:02 | 显示全部楼层
    王老幺 发表于 2016-6-23 16:00
    我想保存arduino101六轴的数据,保存的数据比较多(超过2kB),而且是需要断电后也能保护,然后下次连接电 ...

    101上集成了一个flash芯片,可以用自带的SPIflash库驱动,可以存2MB的数据
    如果以上内容对你有帮助,你可以通过打赏支持作者
  • TA的每日心情

    2017-12-1 18:12
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2017-6-9 22:04 | 显示全部楼层
    请问楼主CurieEEPROM这个库文件在哪里下载。

    点评

    貌似新版直接调用EEPROM.h  详情 回复 发表于 2017-6-9 22:29
    自带的  详情 回复 发表于 2017-6-9 22:29
  • TA的每日心情
    郁闷
    2018-12-6 22:21
  • 签到天数: 48 天

    [LV.5]常住居民I

     楼主| 发表于 2017-6-9 22:29 | 显示全部楼层
    xuhuanqing 发表于 2017-6-9 22:04
    请问楼主CurieEEPROM这个库文件在哪里下载。

    自带的
    如果以上内容对你有帮助,你可以通过打赏支持作者
  • TA的每日心情
    郁闷
    2018-12-6 22:21
  • 签到天数: 48 天

    [LV.5]常住居民I

     楼主| 发表于 2017-6-9 22:29 | 显示全部楼层
    xuhuanqing 发表于 2017-6-9 22:04
    请问楼主CurieEEPROM这个库文件在哪里下载。

    貌似新版直接调用EEPROM.h
    如果以上内容对你有帮助,你可以通过打赏支持作者
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    同时读取两个传感器的数据,并上传至云端存储
    同时读取两个传感器的数据
    一个示例,仅供参考,可以自己更换传感器,或者连接更多传感器。 开发板: Wifiduin
    求助帖 新手
    求助帖 新手
    如图,第一个LED灯驱动失败,求原因… 板子是UNO R3,LED灯接在13与GND上面。
    【Arduino】108种传感器系列实验(93)---CSR8350蓝牙音乐模块
    【Arduino】108种传感器系
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    光线跟踪钛合金猫眼
    光线跟踪钛合金猫眼
    +视频 https://www.bilibili.com/video/av67732712/ +原理 ---光线跟踪 建立极
    "高精度"米家电子温湿度计Pro拆解
    "高精度"米家电子温湿度计
    为了了解哪种温湿度传感器更好,我搞了一个米家电子温湿度计Pro(阿蒙同志赠送) 价格
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表