在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

怎樣在Arduino上永久存儲(chǔ)數(shù)據(jù)

454398 ? 來(lái)源:工程師吳畏 ? 2019-08-01 17:47 ? 次閱讀

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

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

支持的Arduino開(kāi)發(fā)板

下表列出了每個(gè)MCU可以提供的數(shù)據(jù)量商店:

怎樣在Arduino上永久存儲(chǔ)數(shù)據(jù)

連接內(nèi)置EEPROM

EEPROM代表電子可擦除可編程只讀存儲(chǔ)器。雖然您可以覆蓋芯片上的數(shù)據(jù),但在開(kāi)始出現(xiàn)故障之前,您只能進(jìn)行有限次數(shù)的操作。但是,您可以根據(jù)需要多次讀取它。

Write()方法

以下示例說(shuō)明了如何存儲(chǔ)字節(jié)。

#include

void setup()

{

int word_address = 0;

EEPROM.write(word_address, 0x7F);

}

void loop()

{ }

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

read()方法

以下示例從EEPROM中讀取一個(gè)字節(jié):

#include

void setup()

{

Serial.begin(9600);

int word_address = 0;

byte value;

value = EEPROM.read(word_address);

Serial.println(value, HEX);

}

void loop()

{ }

read() - 方法也將地址作為參數(shù)并返回值作為一個(gè)字節(jié)。

清除內(nèi)存

要清除內(nèi)存,請(qǐng)?jiān)贓EPROM的每個(gè)位置存儲(chǔ)零:

void erase(void)

{

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

EEPROM.write(i, 0);

}

“Hello World”示例

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

#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或如果您想擁有額外的存儲(chǔ)空間,可以使用外部EEPROM IC來(lái)存儲(chǔ)字節(jié)。在這個(gè)例子中,我們將使用4LC16B(PDF),它是一個(gè)16 kB I2C EEPROM。

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

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

該IC的第七個(gè)引腳是寫保護(hù)指示燈。如果要寫入存儲(chǔ)器,請(qǐng)將此引腳連接到GND。如果它很高,芯片將不會(huì)保存任何數(shù)據(jù)。無(wú)論引腳的狀態(tài)如何,都可以進(jìn)行讀取。

與外部存儲(chǔ)器通信

設(shè)置Arduino和外部存儲(chǔ)器之間的通信比較復(fù)雜內(nèi)置存儲(chǔ)器。

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

#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);

}

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

不同的芯片也有不同的基址。如有必要,請(qǐng)參閱EEPROM的數(shù)據(jù)表并更新代碼。

另一個(gè)“ Hello World“示例

此程序?qū)ⅰ盚ello World“存儲(chǔ)在外部EEPROM上第一個(gè)塊的第一頁(yè),然后讀取整個(gè)第一個(gè)塊并將其打印到控制臺(tái):

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);

}

執(zhí)行此示例將為您提供以下結(jié)果(或類似的內(nèi)容取決于你的EEPROM的內(nèi)容:

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • EEPROM
    +關(guān)注

    關(guān)注

    9

    文章

    1083

    瀏覽量

    83332
  • 存儲(chǔ)數(shù)據(jù)

    關(guān)注

    0

    文章

    89

    瀏覽量

    14290
  • Arduino
    +關(guān)注

    關(guān)注

    189

    文章

    6493

    瀏覽量

    190202
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    #### KEPServerEX 數(shù)據(jù)存儲(chǔ)插件\\-2

    到VARCHAR”啟用,這樣就可以修改成字符串的形式了。 三、前面我們都在說(shuō)怎么設(shè)置存儲(chǔ)觸發(fā)條件,那如果由于網(wǎng)絡(luò)等問(wèn)題導(dǎo)致Kepware與數(shù)據(jù)庫(kù)之間的連接斷開(kāi)了,怎么保障數(shù)據(jù)存儲(chǔ)不丟失
    發(fā)表于 04-09 16:09

    SDMMC SD_init() 啟用了TrustZone的項(xiàng)目中永久循環(huán)是怎么回事?

    我是嵌入式領(lǐng)域的菜鳥(niǎo),所以也許我錯(cuò)過(guò)了一些非常明顯的東西。 我正在開(kāi)發(fā)一個(gè)基于 LPCXpresso55S69 板的 TrustZone 的項(xiàng)目。該項(xiàng)目所需的部分功能是啟用某些對(duì)象的持久存儲(chǔ)
    發(fā)表于 03-26 06:02

    arduino中st25dv16k怎么接收外部傳輸?shù)膱D片數(shù)據(jù)

    arduino中st25dv16k怎么接收外部傳輸?shù)膱D片數(shù)據(jù)
    發(fā)表于 03-10 07:14

    KEPServerEX 數(shù)據(jù)存儲(chǔ)插件

    好LogGroup之后,Triggers里面記錄條件中,設(shè)置 “登錄靜態(tài)間隔”--否; “在數(shù)據(jù)更改時(shí)記錄”---是 這樣數(shù)據(jù)就會(huì)在變化的時(shí)候才會(huì)存儲(chǔ)。反之,就會(huì)按照固定的時(shí)間間隔進(jìn)
    的頭像 發(fā)表于 02-28 14:47 ?267次閱讀
    KEPServerEX <b class='flag-5'>數(shù)據(jù)</b><b class='flag-5'>存儲(chǔ)</b>插件

    數(shù)據(jù)怎么云存儲(chǔ)電腦,數(shù)據(jù)怎么操作才能云存儲(chǔ)電腦

    怎么操作才能云存儲(chǔ)電腦。 ? ?在數(shù)字化時(shí)代,云存儲(chǔ)成為了一種高效、靈活的數(shù)據(jù)管理方式。通過(guò)將數(shù)據(jù)存儲(chǔ)
    的頭像 發(fā)表于 01-14 10:10 ?599次閱讀
    <b class='flag-5'>數(shù)據(jù)</b>怎么云<b class='flag-5'>存儲(chǔ)</b><b class='flag-5'>在</b>電腦,<b class='flag-5'>數(shù)據(jù)</b>怎么操作才能云<b class='flag-5'>存儲(chǔ)</b><b class='flag-5'>在</b>電腦

    怎樣讀出eZdspC5535INA219的數(shù)據(jù)

    INA219軟件 怎樣讀出eZdspC5535INA219的數(shù)據(jù)
    發(fā)表于 01-10 06:00

    怎么更改電腦的云存儲(chǔ)位置,更改電腦的云存儲(chǔ)位置教程

    ? ? ?云存儲(chǔ)是一種通過(guò)互聯(lián)網(wǎng)將數(shù)據(jù)存儲(chǔ)遠(yuǎn)程服務(wù)器的技術(shù)?,用戶可以通過(guò)互聯(lián)網(wǎng)隨時(shí)隨地訪問(wèn)和管理自己的
    的頭像 發(fā)表于 01-07 16:43 ?753次閱讀
    怎么更改電腦<b class='flag-5'>上</b>的云<b class='flag-5'>存儲(chǔ)</b>位置,更改電腦<b class='flag-5'>上</b>的云<b class='flag-5'>存儲(chǔ)</b>位置教程

    Arduino采集雷達(dá)模塊數(shù)據(jù)與串口繪圖

    Arduino采集雷達(dá)模塊數(shù)據(jù)與串口繪圖
    的頭像 發(fā)表于 12-14 11:44 ?766次閱讀
    <b class='flag-5'>Arduino</b>采集雷達(dá)模塊<b class='flag-5'>數(shù)據(jù)</b>與串口繪圖

    HAL庫(kù)Arduino平臺(tái)上的使用

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

    Arduino程序:實(shí)現(xiàn)SD NAND(貼片sd卡)的讀寫功能

    ) []() []()   直接上教程: []()   將芯片焊到轉(zhuǎn)接版后,插上SD讀卡器先放上幾個(gè)文件 ,電腦 []()   ARDUINO 直接使用SD卡庫(kù) []()   安裝好后,將對(duì)應(yīng)的引腳與板子
    發(fā)表于 11-07 17:45

    ram存儲(chǔ)數(shù)據(jù)斷電后會(huì)丟失嗎

    RAM(Random Access Memory,隨機(jī)存取存儲(chǔ)器)是一種計(jì)算機(jī)存儲(chǔ)設(shè)備,用于存儲(chǔ)計(jì)算機(jī)運(yùn)行時(shí)所需的數(shù)據(jù)和指令。與硬盤、固態(tài)硬盤等永久
    的頭像 發(fā)表于 08-06 09:19 ?3793次閱讀

    FX3S如何通過(guò)USB和GPIF將數(shù)據(jù)存儲(chǔ)到eMMC中?

    我使用的是賽普拉斯 FX3S。 S0 端口連接了 eMMC,F(xiàn)X3S 還連接了 TI DSP(TMS320C28346ZFE)。 我想通過(guò) USB 將數(shù)據(jù)和/或文件從主機(jī) PC 存儲(chǔ)到 eMMC,并
    發(fā)表于 07-23 07:57

    為什么無(wú)法nodemcu和arduino mega之間交換數(shù)據(jù)

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

    ESP32使用Arduino啟用藍(lán)牙后編譯固件過(guò)大,怎樣縮減大小呢?

    ESP32使用Arduino啟用藍(lán)牙后編譯固件過(guò)大,怎樣縮減大小,日志級(jí)別已經(jīng)最低了,分區(qū)不能動(dòng),已經(jīng)是1.9M的OTA分區(qū)配置了,怎樣還能縮減大小,藍(lán)牙功能能否裁剪
    發(fā)表于 06-28 11:27

    Arduino怎樣配置LVGL8.1.0訪問(wèn)spiffs里面的字庫(kù)或圖片?

    抱歉把Arduino的內(nèi)容發(fā)在這個(gè)版塊了. Arduino的示例中LITTLEFS_test.ino SPIFFS_Test.ino FFat_Test.ino已經(jīng)測(cè)試成功, 并且使用ESP32
    發(fā)表于 06-19 06:15
    主站蜘蛛池模板: 亚洲综合色婷婷在线观看 | 偷偷鲁影院手机在线观看 | 亚洲精品电影天堂网 | 一级做a爰片久久毛片毛片 一级做a爰片久久毛片美女图片 | 天天摸夜夜添夜夜添国产 | 我不卡午夜 | 看毛片网站| 乱人伦小说短篇 | 亚洲欧美国产高清va在线播放 | 天天综合天天看夜夜添狠狠玩 | 国产精品手机在线 | 精品久久久久久婷婷 | h视频免费高清在线观看 | 九色在线播放 | 操美女在线看 | 亚洲一区二区免费视频 | 亚洲第一在线播放 | 精品国产1000部91麻豆 | 黄网免费| 天堂视频在线免费观看 | 天天操天天搞 | 黄色在线视频网 | 中国xxxxx高清免费看视频 | 高清一区二区三区 | 天天视频国产免费入口 | 特级黄视频| 天天综合亚洲 | 天天做天天爱天天做天天吃中 | 国产精品不卡片视频免费观看 | 欧美视频一区二区三区在线观看 | 国产成都一二三四区 | 亚洲人成人网毛片在线播放 | 717影院理论午夜伦不卡久久 | 99精品热视频 | 亚洲深爱 | 无遮挡很爽很污很黄很色的网站 | 亚洲在成人网在线看 | 最好看最新的中文字幕1 | 国产人成午夜免费噼啪视频 | 免费看真人a一级毛片 | 精品免费视在线观看 |