π 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.