日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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 ? 來源:工程師吳畏 ? 2019-08-01 17:47 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

支持的Arduino開發(fā)板

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

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

連接內(nèi)置EEPROM

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

Write()方法

以下示例說明了如何存儲(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來存儲(chǔ)字節(jié)。在這個(gè)例子中,我們將使用4LC16B(PDF),它是一個(gè)16 kB I2C EEPROM。

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

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

該IC的第七個(gè)引腳是寫保護(hù)指示燈。如果要寫入存儲(chǔ)器,請(qǐng)將此引腳連接到GND。如果它很高,芯片將不會(huì)保存任何數(shù)據(jù)。無論引腳的狀態(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)行了測試,但只要通信以相同的方式工作,它應(yīng)該適用于所有其他大?。▉碜源酥圃焐蹋?/p>

#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è)塊的第一頁,然后讀取整個(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)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • EEPROM
    +關(guān)注

    關(guān)注

    9

    文章

    1146

    瀏覽量

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

    關(guān)注

    0

    文章

    90

    瀏覽量

    14503
  • Arduino
    +關(guān)注

    關(guān)注

    190

    文章

    6527

    瀏覽量

    197521
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    持續(xù)錄制不掉幀,德明利S+高耐久存儲(chǔ)卡如何實(shí)現(xiàn)穩(wěn)定寫入

    德明利推出S+高耐久存儲(chǔ)卡,滿足持續(xù)錄制場景下的穩(wěn)定性與耐用性需求。
    的頭像 發(fā)表于 04-30 15:10 ?155次閱讀
    持續(xù)錄制不掉幀,德明利S+高耐<b class='flag-5'>久存儲(chǔ)</b>卡如何實(shí)現(xiàn)穩(wěn)定寫入

    存儲(chǔ)互斥失敗導(dǎo)致數(shù)據(jù)丟失的數(shù)據(jù)恢復(fù)成功案例

    某單位使用得一套信息管理平臺(tái),通過3臺(tái)虛擬機(jī)共用一臺(tái)存儲(chǔ)設(shè)備,存儲(chǔ)了企業(yè)大量核心業(yè)務(wù)數(shù)據(jù)。管理員日常運(yùn)維中,向該存儲(chǔ)網(wǎng)絡(luò)新增接入一臺(tái)Win
    的頭像 發(fā)表于 04-29 16:45 ?565次閱讀

    野外數(shù)據(jù)采集系統(tǒng)中的穩(wěn)定存儲(chǔ):CS 創(chuàng)世 SD NAND 應(yīng)用分析

    ”。這些設(shè)備通常被部署無人值守的惡劣環(huán)境中,依靠電池或太陽能長期自主運(yùn)行,它們所采集的每一比特數(shù)據(jù)都可能蘊(yùn)含著巨大的科研或經(jīng)濟(jì)價(jià)值。 在這樣的極限場景下,數(shù)據(jù)存儲(chǔ)面臨著雙重挑戰(zhàn):既要
    發(fā)表于 03-20 18:17

    一次寫入,永久鎖定!OTP存儲(chǔ)操作需謹(jǐn)慎

    今天,我們一起來聊聊LuatOS中的OTP功能。 OTP(One-Time Programmable Memory) 是一次性可編程存儲(chǔ)。其核心特點(diǎn)是 “一次寫入,永久鎖定” ,數(shù)據(jù)
    的頭像 發(fā)表于 01-27 17:52 ?1278次閱讀
    一次寫入,<b class='flag-5'>永久</b>鎖定!OTP<b class='flag-5'>存儲(chǔ)</b>操作需謹(jǐn)慎

    Vivado+Vitis將程序固化的Flash的操作流程

    ZYNQ 的程序固化是指將程序代碼永久存儲(chǔ)到非易失性存儲(chǔ)器中,使系統(tǒng)電后能自動(dòng)加載運(yùn)行的過程。主要固化方式:QSPI Flash固化:常用方式,容量小,如啟動(dòng)代碼、FPGA 配置。NAND Flash固化:適合大容量程序
    的頭像 發(fā)表于 01-20 16:17 ?946次閱讀
    Vivado+Vitis將程序固化的Flash的操作流程

    CW32F030片FLASH閃存存儲(chǔ)器物理區(qū)域的劃分

    域主要用于存放應(yīng)用程序代碼和用戶數(shù)據(jù),用戶可編程。 2、啟動(dòng)程序存儲(chǔ)器,共 2.5KB,地址空間為 0x0010 0000 - 0x0010 09FF。該區(qū)域主要用于存儲(chǔ) BootLoader 啟動(dòng)程序,
    發(fā)表于 12-23 08:28

    Everspin串口MRAM存儲(chǔ)芯片有哪些型號(hào)

    MRAM是一種利用電子的自旋磁性來存儲(chǔ)信息的非易失性存儲(chǔ)器。它完美結(jié)合了SRAM的高速讀寫特性與閃存(Flash)的非易失性,能夠斷電后永久保存數(shù)
    的頭像 發(fā)表于 10-24 15:48 ?687次閱讀

    服務(wù)器數(shù)據(jù)恢復(fù)—EqualLogic存儲(chǔ)raid5磁盤陣列數(shù)據(jù)恢復(fù)案例

    服務(wù)器存儲(chǔ)數(shù)據(jù)恢復(fù)環(huán)境&故障: 某品牌EqualLogic PS6100存儲(chǔ)陣列上有一組由16塊硬盤組建的raid5磁盤陣列。磁盤陣列上層劃分多個(gè)大小不同的卷,存放虛擬機(jī)文件。 硬盤出現(xiàn)故障導(dǎo)致
    的頭像 發(fā)表于 10-21 15:04 ?464次閱讀

    如何在 MCU/MUP 安全地存儲(chǔ)機(jī)密數(shù)據(jù)?

    如何在 MCU/MUP 安全地存儲(chǔ)機(jī)密數(shù)據(jù)
    發(fā)表于 09-08 06:44

    如何在 NuMaker-IoT-M467 板使用 Arduino IDE 控制 Wi-Fi 模塊?

    NuMaker開發(fā)板,有一個(gè)ESP-12F Wi-Fi模塊;但是,Arduino IDE 中的 NuMaker UNO 包不提供該模塊的相關(guān)控制。如果您希望
    發(fā)表于 09-04 08:28

    請(qǐng)問Vision Five2怎樣安裝openeuler24.03 LTS SP1?

    Vision Five2怎樣安裝openeuler24.03 LTS SP1?
    發(fā)表于 07-29 09:02

    如何使用 EZserial 禁用 CYBT-343026 模塊的嗅探模式?

    。 我們想知道該設(shè)置是否永久存儲(chǔ)到閃存中,或者是否需要在每次POWER_DRILL2GO模塊時(shí)顯式禁用嗅探模式。
    發(fā)表于 07-02 06:26

    聚徽架式工控一體機(jī)的工業(yè)級(jí)存儲(chǔ)技術(shù):數(shù)據(jù)安全與高效讀寫保障

    一、引言 工業(yè)自動(dòng)化領(lǐng)域,工控一體機(jī)作為核心控制設(shè)備,承擔(dān)著數(shù)據(jù)采集、處理與存儲(chǔ)的重要任務(wù)。隨著工業(yè)生產(chǎn)的智能化程度不斷提高,數(shù)據(jù)量呈爆炸式增長,對(duì)工控一體機(jī)的
    的頭像 發(fā)表于 06-24 16:18 ?704次閱讀

    《ESP32S3 Arduino開發(fā)指南》第二章 Arduino基礎(chǔ)知識(shí)

    的發(fā)展,Arduino出現(xiàn)以前,雖然也有很多公司推廣一些簡單易用的可編程控制器,但是由于開發(fā)平臺(tái)種類繁多,而且使用這些控制器基本都需要對(duì)電子技術(shù)、數(shù)字邏輯、寄存器等內(nèi)容進(jìn)行多方面
    發(fā)表于 05-13 09:28
    米泉市| 惠来县| 仁怀市| 土默特右旗| 通江县| 襄垣县| 大田县| 荔波县| 公安县| 长子县| 淮北市| 汶上县| 加查县| 奉新县| 广东省| 金塔县| 麟游县| 怀化市| 原平市| 平利县| 彭州市| 治县。| 磐安县| 剑川县| 中牟县| 翁牛特旗| 大兴区| 靖远县| 内黄县| 富源县| 沙河市| 钟祥市| 甘泉县| 涞源县| 静乐县| 志丹县| 饶河县| 临潭县| 司法| 济源市| 周至县|