国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

    文章

    1137

    瀏覽量

    86029
  • 存儲數據
    +關注

    關注

    0

    文章

    90

    瀏覽量

    14471
  • Arduino
    +關注

    關注

    190

    文章

    6526

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    一次寫入,永久鎖定!OTP存儲操作需謹慎

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

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

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

    Everspin串口MRAM存儲芯片有哪些型號

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

    服務器數據恢復—EqualLogic存儲raid5磁盤陣列數據恢復案例

    服務器存儲數據恢復環境&故障: 某品牌EqualLogic PS6100存儲陣列上有一組由16塊硬盤組建的raid5磁盤陣列。磁盤陣列上層劃分多個大小不同的卷,存放虛擬機文件。 硬盤出現故障導致
    的頭像 發表于 10-21 15:04 ?334次閱讀

    如何在 MCU/MUP 安全地存儲機密數據

    如何在 MCU/MUP 安全地存儲機密數據
    發表于 09-08 06:44

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

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

    請問Vision Five2怎樣安裝openeuler24.03 LTS SP1?

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

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

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

    聚徽架式工控一體機的工業級存儲技術:數據安全與高效讀寫保障

    一、引言 工業自動化領域,工控一體機作為核心控制設備,承擔著數據采集、處理與存儲的重要任務。隨著工業生產的智能化程度不斷提高,數據量呈爆炸式增長,對工控一體機的
    的頭像 發表于 06-24 16:18 ?532次閱讀

    《ESP32S3 Arduino開發指南》第二章 Arduino基礎知識

    的發展,Arduino出現以前,雖然也有很多公司推廣一些簡單易用的可編程控制器,但是由于開發平臺種類繁多,而且使用這些控制器基本都需要對電子技術、數字邏輯、寄存器等內容進行多方面
    發表于 05-13 09:28

    #### KEPServerEX 數據存儲插件\\-2

    到VARCHAR”啟用,這樣就可以修改成字符串的形式了。 三、前面我們都在說怎么設置存儲觸發條件,那如果由于網絡等問題導致Kepware與數據庫之間的連接斷開了,怎么保障數據存儲不丟失
    發表于 04-09 16:09

    NXP MCU RT1166如何使用JTAG/SWD工具將數據存儲到內部閃存中?

    我需要使用 JTAG 將數據存儲到內部閃存中。我能夠使用 JTAG/SWD 工具 ARM J-Link 將它們存儲 FlexSPI1 連接的外部閃存
    發表于 04-01 06:54

    SDMMC SD_init() 啟用了TrustZone的項目中永久循環是怎么回事?

    我是嵌入式領域的菜鳥,所以也許我錯過了一些非常明顯的東西。 我正在開發一個基于 LPCXpresso55S69 板的 TrustZone 的項目。該項目所需的部分功能是啟用某些對象的持久存儲
    發表于 03-26 06:02

    arduino中st25dv16k怎么接收外部傳輸的圖片數據

    arduino中st25dv16k怎么接收外部傳輸的圖片數據
    發表于 03-10 07:14

    STM32開發板一般都會配置arduino接口,是不是基本也都會支持arduino

    STM32開發板一般都會配置arduino接口,是不是基本也都會支持arduino?這個在哪里可以查詢開發板是否支持
    發表于 03-07 06:33