色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

怎樣在Arduino上永久存儲數據

454398 ? 來源:工程師吳畏 ? 2019-08-01 17:47 ? 次閱讀

一些Arduino板允許您將數據永久存儲在EEPROM中但必須保持電路板插入。本文將教你如何寫入板載EEPROM(如果你的Arduino有一個),并向您介紹一種允許您使用外部存儲器的替代方法。

你可以將本指南用于支持通過I2C總線通信的任何微控制器

支持的Arduino開發板

下表列出了每個MCU可以提供的數據量商店:

怎樣在Arduino上永久存儲數據

連接內置EEPROM

EEPROM代表電子可擦除可編程只讀存儲器。雖然您可以覆蓋芯片上的數據,但在開始出現故障之前,您只能進行有限次數的操作。但是,您可以根據需要多次讀取它。

Write()方法

以下示例說明了如何存儲字節。

#include

void setup()

{

int word_address = 0;

EEPROM.write(word_address, 0x7F);

}

void loop()

{ }

將write()方法與字地址和要存儲的值一起使用。地址必須是介于零和EEPROM.length() - 1之間的值,它告訴MCU在哪里存儲值。

read()方法

以下示例從EEPROM中讀取一個字節:

#include

void setup()

{

Serial.begin(9600);

int word_address = 0;

byte value;

value = EEPROM.read(word_address);

Serial.println(value, HEX);

}

void loop()

{ }

read() - 方法也將地址作為參數并返回值作為一個字節。

清除內存

要清除內存,請在EEPROM的每個位置存儲零:

void erase(void)

{

for (int i = 0 ; i 《 EEPROM.length() ; i++)

EEPROM.write(i, 0);

}

“Hello World”示例

以下代碼將清除EEPROM,然后在將字符串寫入控制臺之前將“Hello World!”存儲在其中:

#include

void erase(void)

{

for (int i = 0 ; i 《 EEPROM.length() ; i++)

EEPROM.write(i, 0);

}

void printMessage(byte* first, size_t len)

{

for (int i = 0; i 《 len; i++)

{

Serial.print((char)first[i]);

}

}

void writeMsg(byte* first, size_t len)

{

for(int i = 0; i 《 len; i++)

{

EEPROM.write(i, first[i]);

}

}

void readMsg(size_t len)

{

byte res;

Serial.print(“Message: ”);

for(int i = 0; i 《 len; i++)

{

res = EEPROM.read(i);

Serial.print((char)res);

}

Serial.println(“”);

}

void setup()

{

char* string = “Hello World!”;

Serial.begin(9600);

Serial.print(“Serial connection opened! ”);

Serial.print(“EEPROM length: ”);

Serial.println(EEPROM.length());

Serial.print(“Attempting to erase EEPROM.。. ”);

erase();

Serial.print(“Done! ”);

Serial.print(“Message: ”);

printMessage(string, 12);

Serial.print(“ ”);

Serial.print(“Attempting to write to EEPROM.。. ”);

writeMsg(string, 12);

Serial.print(“Done! ”);

Serial.print(“Attempting to read from EEPROM.。. ”);

readMsg(12);

Serial.print(“Done! ”);

}

void loop()

{ }

使用外部EEPROM

如果您不使用Arduino或如果您想擁有額外的存儲空間,可以使用外部EEPROM IC來存儲字節。在這個例子中,我們將使用4LC16B(PDF),它是一個16 kB I2C EEPROM。

電路很簡單,只需要添加一個100K上拉電阻并將IC連接到Arduino(或您想要使用的任何其他MCU):

將4LC16B外部EEPROM添加到電路圖Arduino。

該IC的第七個引腳是寫保護指示燈。如果要寫入存儲器,請將此引腳連接到GND。如果它很高,芯片將不會保存任何數據。無論引腳的狀態如何,都可以進行讀取。

與外部存儲器通信

設置Arduino和外部存儲器之間的通信比較復雜內置存儲器。

4LC16B IC的數據表詳細描述了如何與它進行通信以存儲數據。我寫了這個草圖,允許你在外部EEPROM上連接一個字(或一個字節)。我使用16 kB變體對其進行了測試,但只要通信以相同的方式工作,它應該適用于所有其他大小(來自此制造商):

#include

static const byte DEVICE_BASE_ADDRESS = 0x50;

void setup()

{

Wire.begin();

Serial.begin(9600);

}

byte readByteFromEEPROM(byte block, byte word_offset)

{

Wire.beginTransmission(block);

Wire.write(int(word_offset));

Wire.endTransmission(true);

Wire.requestFrom(int(block), 1);

if (Wire.available())

return Wire.read();

}

void readBlockFromEEPROM(byte block, byte outArray[256])

{

for(int i = 0; i 《 256; i++)

{

outArray[i] = readByteFromEEPROM(block, i);

}

}

void readPageFromEEPROM(byte block, byte word_offset, byte outArray[16])

{

for(int i = 0; i 《 16; i++)

{

outArray[i] = readByteFromEEPROM(block, word_offset + i);

}

}

void writeByteToEEPROM(byte block, byte word_offset, byte data)

{

writePageToEEPROM(block, word_offset, &data, 1);

}

/**

* block:

* 0x50 = first block = DEVICE_BASE_ADDRESS

* 0x51 = second block

* 。..

* 0x57 = eight block

*/

void writePageToEEPROM(byte block, byte word_offset, byte *data, size_t len)

{

Wire.beginTransmission(block);

Wire.write(word_offset);

for(int i = 0; i 《 len; i++)

{

Wire.write(data[i]);

}

Wire.endTransmission(true);

delay(10);

}

內存分為八個塊可以直接尋址256個字節和每個塊。 DEVICE_BASE_ADDRESS(0x50)表示第一個,0x57表示最后一個塊。

不同的芯片也有不同的基址。如有必要,請參閱EEPROM的數據表并更新代碼。

另一個“ Hello World“示例

此程序將”Hello World“存儲在外部EEPROM上第一個塊的第一頁,然后讀取整個第一個塊并將其打印到控制臺:

void printBlock(byte blockContent[256])

{

for(int i = 0; i 《 16; i++)

{

Serial.print(“Page ”);

if(i+1 《 10)

Serial.print(“0”);

Serial.print(i+1);

Serial.print(“: ”);

for(int u = 0; u 《 16; u++)

{

Serial.print((char)blockContent[i*16+u]);

if(u==7)

Serial.print(“ ”);

}

Serial.println(“”);

}

}

void loop()

{

byte result[256];

writePageToEEPROM(DEVICE_BASE_ADDRESS, 0, “Hello World!”, 12);

readBlockFromEEPROM(DEVICE_BASE_ADDRESS, result);

printBlock(result);

delay(20000);

exit(0);

}

執行此示例將為您提供以下結果(或類似的內容取決于你的EEPROM的內容:

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • EEPROM
    +關注

    關注

    9

    文章

    1019

    瀏覽量

    81560
  • 存儲數據
    +關注

    關注

    0

    文章

    88

    瀏覽量

    14100
  • Arduino
    +關注

    關注

    188

    文章

    6468

    瀏覽量

    186953
收藏 人收藏

    評論

    相關推薦

    Arduino采集雷達模塊數據與串口繪圖

    Arduino采集雷達模塊數據與串口繪圖
    的頭像 發表于 12-14 11:44 ?146次閱讀
    <b class='flag-5'>Arduino</b>采集雷達模塊<b class='flag-5'>數據</b>與串口繪圖

    HAL庫Arduino平臺上的使用

    HAL庫Arduino平臺上的使用 Arduino平臺是一個開源的電子原型平臺,它包括硬件(基于微控制器的電路板)和軟件(Arduino IDE)。
    的頭像 發表于 12-02 14:04 ?244次閱讀

    Arduino程序:實現SD NAND(貼片sd卡)的讀寫功能

    ) []() []()   直接上教程: []()   將芯片焊到轉接版后,插上SD讀卡器先放上幾個文件 ,電腦 []()   ARDUINO 直接使用SD卡庫 []()   安裝好后,將對應的引腳與板子
    發表于 11-07 17:45

    ram存儲數據斷電后會丟失嗎

    RAM(Random Access Memory,隨機存取存儲器)是一種計算機存儲設備,用于存儲計算機運行時所需的數據和指令。與硬盤、固態硬盤等永久
    的頭像 發表于 08-06 09:19 ?1867次閱讀

    FX3S如何通過USB和GPIF將數據存儲到eMMC中?

    我使用的是賽普拉斯 FX3S。 S0 端口連接了 eMMC,FX3S 還連接了 TI DSP(TMS320C28346ZFE)。 我想通過 USB 將數據和/或文件從主機 PC 存儲到 eMMC,并
    發表于 07-23 07:57

    為什么無法nodemcu和arduino mega之間交換數據

    您好,我正在嘗試通過 UART arduino mega 和 nodemcu 之間交換數據(使用 arduino IDE 對兩者進行編程)。 我將
    發表于 07-19 12:15

    ESP32使用Arduino啟用藍牙后編譯固件過大,怎樣縮減大小呢?

    ESP32使用Arduino啟用藍牙后編譯固件過大,怎樣縮減大小,日志級別已經最低了,分區不能動,已經是1.9M的OTA分區配置了,怎樣還能縮減大小,藍牙功能能否裁剪
    發表于 06-28 11:27

    Arduino怎樣配置LVGL8.1.0訪問spiffs里面的字庫或圖片?

    抱歉把Arduino的內容發在這個版塊了. Arduino的示例中LITTLEFS_test.ino SPIFFS_Test.ino FFat_Test.ino已經測試成功, 并且使用ESP32
    發表于 06-19 06:15

    使用idf.py命令方式編譯,怎樣才能編譯arduino的庫,并且項目中可調用?

    在編譯過程中,提示找不到對應的頭文件。 請問使用idf.py命令方式編譯,怎樣才能編譯arduino的庫,并且項目中可調用。
    發表于 06-13 06:56

    求助,esp-idf中使用arduino作為組件后怎樣使用arduino的庫?

    esp-idf中使用arduino作為組件后怎樣使用arduino的庫,例如我此時需要使用arduino的第三方庫blinker,
    發表于 06-12 07:21

    Rokid聯手阿里云盤,AR設備與云盤服務深度整合

     對于用戶而言,阿里云盤將向新注冊用戶提供100GB的永久存儲空間,同時對購買Rokid新品的用戶提供額外存儲空間以及會員權益包。此外,Rokid新品預計將于4月20日杭州舉行的Rokid Open Day 2024
    的頭像 發表于 04-16 10:03 ?510次閱讀

    永久鏈路、信道測試的區別

    永久鏈路測試和信道測試是網絡和通信領域中兩個不同的概念,它們通常用于確保網絡和通信系統的可靠性和性能。 永久鏈路測試(Permanent Link Testing): 永久鏈路測試是對網絡中
    的頭像 發表于 03-25 10:59 ?2509次閱讀

    如何估算S7-1500 CPU的裝載存儲SIMATIC存儲的大小?

    S7-1500 CPU 的裝載存儲 SIMATIC 存儲。根據以下操作步驟可以確定用戶程序所需要的存儲區的大小以便確定所需
    的頭像 發表于 01-29 10:00 ?967次閱讀
    如何估算S7-1500 CPU的裝載<b class='flag-5'>存儲</b>區<b class='flag-5'>在</b>SIMATIC<b class='flag-5'>存儲</b>卡<b class='flag-5'>上</b>的大小?

    BCP為什么只有收集數據后才存儲數據

    有很多不便之處,因為可以存儲 BCP 中的收集數據的數量限制為 10,000。 為什么只有收集數據后才
    發表于 01-22 07:06

    【開源項目】Arduino ESP32 彩色電子氣象站

    EEPROM存儲器中讀取和寫入數據。我們需要的另一個類是保存所有歷史傳感器數據的類,最后是負責顯示器繪圖的類。這樣,如果要使用不同的顯示
    發表于 01-16 14:01
    主站蜘蛛池模板: 二级片免费看| 国产最新进精品视频| 韩剧甜性涩爱| 美女网站免费久久久久久久| 色色色999| 在线欧美 精品 第1页| 东京热百度影音| 久久机热视频 这里只有精品首页| 欧美片第1页 综合| 亚洲 日韩 欧美 另类 蜜桃 | 日本伦子欲| 亚洲理论片在线中文字幕| 99视频在线观看免费视频| 国产骚妇BB网| 女人高潮久久久叫人喷水| 亚洲国产在线观看免费视频| jizzjizz丝袜| 久久re这里视频精品8| 色综合久久久久久| 2021精品国产综合久久| 国产日韩亚洲专区无码| 翘臀少妇被扒开屁股日出水爆乳 | 国精产品一区二区三区有限公司 | 一个人免费完整在线观看影院| 抽插内射高潮呻吟爆乳| 久热人人综合人人九九精品视频| 午夜特级毛片| wwwxx日本| 一本道无码v亚洲| 成人 迅雷下载| 麻豆最新免费版| 亚洲欧美精品一中文字幕| 国产AV无码熟妇人妻麻豆| 年轻的女职工在线观看 | 亚洲免费综合色视频| 德国xxxx| 免费A级毛片无码无遮挡内射| 亚洲免费网站在线观看| 国产精品免费大片| 日本片bbbxxx| 99久久综合国产精品免费|