πŸ“Œ EEPROM

EEPROM (Electrically Erasable Programmable Read-Only Memory, элСктричСски стираСмая программируСмая постоянная ΠΏΠ°ΠΌΡΡ‚ΡŒ) β€” Π²ΠΈΠ΄ энСргонСзависимой памяти, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅ΠΉ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ ΠΈ ΡΡ‚ΠΈΡ€Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ элСктричСскими сигналами Π±Π΅Π· нСобходимости физичСского извлСчСния микросхСмы. EEPROM ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для хранСния ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ², настроСк ΠΈ ΠΌΠΈΠΊΡ€ΠΎΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… элСктронных устройствах.


🧠 Как Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹

  • Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° памяти: EEPROM состоит ΠΈΠ· мноТСства ячССк, каТдая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ…Ρ€Π°Π½ΠΈΡ‚ Π±ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Ρ…. Π―Ρ‡Π΅ΠΉΠΊΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π² страницы ΠΈ Π±Π»ΠΎΠΊΠΈ.
  • Π—Π°ΠΏΠΈΡΡŒ ΠΈ стираниС: Π΄Π°Π½Π½Ρ‹Π΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΈ ΡΡ‚ΠΈΡ€Π°ΡŽΡ‚ΡΡ элСктричСскими ΠΈΠΌΠΏΡƒΠ»ΡŒΡΠ°ΠΌΠΈ, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ ΠΈΠ»ΠΈ страницами, ΠΏΡ€ΠΈ этом ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Π±Π°ΠΉΡ‚Ρ‹ ΠΈΠ»ΠΈ страницы.
  • Π‘ΠΎΡ…Ρ€Π°Π½Π½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ…: Π΄Π°Π½Π½Ρ‹Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π±Π΅Π· питания, часто гарантируСтся срок хранСния дСсятки Π»Π΅Ρ‚.
  • Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ доступа: Ρ‡Π°Ρ‰Π΅ всСго EEPROM ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π° с ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°ΠΌΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ интСрфСйсы β€” I2C, SPI, Π½ΠΎ Π±Ρ‹Π²Π°ΡŽΡ‚ ΠΈ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ вСрсии.
  • ВрСмя доступа: запись ΠΈ стираниС ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, запись ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ миллисСкунды.
  • ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Ρ†ΠΈΠΊΠ»ΠΎΠ² пСрСзаписи: ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ (ΠΎΡ‚ дСсятков тысяч Π΄ΠΎ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ²), Ρ‡Ρ‚ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π±Π΅Ρ€Π΅ΠΆΠ½ΠΎΠ³ΠΎ использования.

АппаратноС устройство ячСйки

  • EEPROM-ячСйка построСна Π½Π° основС ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅Π³ΠΎ Π·Π°Ρ‚Π²ΠΎΡ€Π° (floating gate) транзистора, Π³Π΄Π΅ элСктричСский заряд Ρ…Ρ€Π°Π½ΠΈΡ‚ состояниС.
  • ЭлСктричСскоС стираниС происходит Π·Π° счёт туннСлирования зарядов Ρ‡Π΅Ρ€Π΅Π· изолятор.

Π‘Π»ΠΎΠΊ-схСма

flowchart TB
    MCU["Microcontroller / CPU"]
    I2C_Bus["I2C Bus"]
    EEPROM["EEPROM Chip"]
    style EEPROM stroke:#fff,stroke-width:5px,font-weight:bold
    MemoryCells["Floating-Gate Memory Cells"]
    ControlLogic["Control Logic"]
    WriteCircuit["Write/Erase Circuit"]
    ReadCircuit["Read Circuit"]

    MCU --> I2C_Bus
    I2C_Bus --> EEPROM
    EEPROM --> ControlLogic
    ControlLogic --> MemoryCells
    ControlLogic --> WriteCircuit
    ControlLogic --> ReadCircuit
    WriteCircuit --> MemoryCells
    ReadCircuit --> MemoryCells

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅

  • Для обращСния ΠΊ EEPROM ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ чтСния, записи, стирания с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ адрСса.
  • Π’ микросхСмах с интСрфСйсом I2C ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ стандартный Π½Π°Π±ΠΎΡ€ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ² ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ.
  • ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ EEPROM Π²Π½ΡƒΡ‚Ρ€ΠΈ микросхСмы управляСт процСссом стирания/записи, обСспСчивая Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈ Π·Π°Ρ‰ΠΈΡ‚Ρƒ.

βš™οΈ Π“Π΄Π΅ примСняСтся

  • Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ Π² MCU, SoC, Π±Ρ‹Ρ‚ΠΎΠ²ΠΎΠΉ ΠΈ ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΠΉ элСктроникС.
  • ΠœΠΈΠΊΡ€ΠΎΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, настройки, Π»ΠΎΠ³ΠΈ ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΊΠΈ Π² Π΄Π°Ρ‚Ρ‡ΠΈΠΊΠ°Ρ… ΠΈ ΠΏΡ€ΠΈΠ±ΠΎΡ€Π°Ρ….
  • BIOS/UEFI ΠΌΠΈΠΊΡ€ΠΎΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° матСринских ΠΏΠ»Π°Ρ‚Π°Ρ… (Π² мСньшСй стСпСни, Ρ‡Π°Ρ‰Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Flash).
  • НСбольшиС энСргонСзависимыС Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… Π² встраиваСмых систСмах.
  • ΠŸΠ°ΠΌΡΡ‚ΡŒ для хранСния ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… частого обновлСния.

βœ… ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π°

  • Π­Π½Π΅Ρ€Π³ΠΎΠ½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ: Π΄Π°Π½Π½Ρ‹Π΅ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π±Π΅Π· питания.
  • Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠΉ пСрСзаписи: дСсятки тысяч Ρ†ΠΈΠΊΠ»ΠΎΠ².
  • Удобство использования: Π»Π΅Π³ΠΊΠΎ интСгрируСтся с MCU Ρ‡Π΅Ρ€Π΅Π· стандартныС интСрфСйсы.
  • Π“ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ записи: ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ Π±Π°ΠΉΡ‚Ρ‹ ΠΈΠ»ΠΈ страницы Π±Π΅Π· стирания всСго Ρ‡ΠΈΠΏΠ°.
  • Высокая Π½Π°Π΄Π΅ΠΆΠ½ΠΎΡΡ‚ΡŒ: ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ высокая ΡƒΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ ΠΊ внСшним воздСйствиям.

❌ НСдостатки

  • ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ число Ρ†ΠΈΠΊΠ»ΠΎΠ² пСрСзаписи: послС исчСрпания рСсурса ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΉΡ‚ΠΈ ΠΈΠ· строя.
  • МСдлСнноС врСмя записи ΠΈ стирания: Π² сравнСнии с RAM ΠΈΠ»ΠΈ Flash.
  • Низкая ΠΏΠ»ΠΎΡ‚Π½ΠΎΡΡ‚ΡŒ памяти: ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ±ΡŠΡ‘ΠΌ мСньшС, Ρ‡Π΅ΠΌ Ρƒ Flash ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… энСргонСзависимых Ρ‚ΠΈΠΏΠΎΠ².
  • Высокая ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ Π·Π° Π±ΠΈΡ‚: ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Flash.
  • Часто ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ ΠΎΠ±ΡŠΡ‘ΠΌ: ΠΎΡ‚ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚ Π΄ΠΎ ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚, Ρ€Π΅ΠΆΠ΅ большС.

πŸ”— БвязанныС Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ

Flash, I2C, SPI, NVRAM, MCU, SoC, Non-volatile Memory, Memory Controller, ROM, NAND, NOR, Memory Map, Cell Structure


РСзюмС

EEPROM β€” энСргонСзависимая ΠΏΠ°ΠΌΡΡ‚ΡŒ с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ элСктричСского стирания ΠΈ записи, ΡˆΠΈΡ€ΠΎΠΊΠΎ примСняСмая для хранСния ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΈ ΠΊΠ°Π»ΠΈΠ±Ρ€ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°Ρ… ΠΈ встраиваСмых систСмах. НСсмотря Π½Π° ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ число Ρ†ΠΈΠΊΠ»ΠΎΠ² записи ΠΈ Π½Π΅Π²Ρ‹ΡΠΎΠΊΡƒΡŽ ΠΏΠ»ΠΎΡ‚Π½ΠΎΡΡ‚ΡŒ, ΠΎΠ½Π° остаётся вострСбованной благодаря гибкости, надСТности ΠΈ удобству ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ.


ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΠ΄Π°

C: Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ запись EEPROM ΠΏΠΎ I2C (ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€ STM32)

#include "i2c.h"
 
#define EEPROM_ADDR 0xA0 // 7-bit адрСс сдвинутый
 
void EEPROM_WriteByte(uint16_t mem_addr, uint8_t data) {
    uint8_t buf[3];
    buf[0] = (mem_addr >> 8) & 0xFF; // ΡΡ‚Π°Ρ€ΡˆΠΈΠΉ Π±Π°ΠΉΡ‚ адрСса
    buf[1] = mem_addr & 0xFF;        // младший Π±Π°ΠΉΡ‚ адрСса
    buf[2] = data;
    HAL_I2C_Master_Transmit(&hi2c1, EEPROM_ADDR, buf, 3, HAL_MAX_DELAY);
    HAL_Delay(5); // Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° записи EEPROM (~5 мс)
}
 
uint8_t EEPROM_ReadByte(uint16_t mem_addr) {
    uint8_t data;
    uint8_t addr[2];
    addr[0] = (mem_addr >> 8) & 0xFF;
    addr[1] = mem_addr & 0xFF;
    HAL_I2C_Master_Transmit(&hi2c1, EEPROM_ADDR, addr, 2, HAL_MAX_DELAY);
    HAL_I2C_Master_Receive(&hi2c1, EEPROM_ADDR, &data, 1, HAL_MAX_DELAY);
    return data;
}

Python с использованиСм smbus (Raspberry Pi)

import smbus
import time
 
bus = smbus.SMBus(1)
EEPROM_ADDR = 0x50
 
def eeprom_write_byte(addr, data):
    high = (addr >> 8) & 0xFF
    low = addr & 0xFF
    bus.write_i2c_block_data(EEPROM_ADDR, high, [low, data])
    time.sleep(0.01)  # Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° записи
 
def eeprom_read_byte(addr):
    high = (addr >> 8) & 0xFF
    low = addr & 0xFF
    bus.write_i2c_block_data(EEPROM_ADDR, high, [low])
    data = bus.read_byte(EEPROM_ADDR)
    return data

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈ:
Microchip 24LCxx Datasheet, STMicroelectronics Application Notes, Wikipedia, osdev.org, habr.com, I2C and SPI protocol specs, Embedded Systems textbooks.