eFuse и OTP
eFuse — это биты, которые можно записать один раз: пережжённый бит остаётся единицей навсегда. В них хранят настройки загрузки, ключи безопасной загрузки и шифрования, калибровку и серийные номера.
Обновлено Редакция GAW
eFuse (electronic fuse, «электронный предохранитель») — бит однократно программируемой памяти (OTP, one-time programmable) внутри чипа. Изначально он равен нулю; при записи его необратимо меняют, и он остаётся единицей навсегда. Так хранят то, что после производства или настройки не должно меняться.
| Чип | Объём | Источник |
|---|---|---|
| ESP32-S3 | 4096 бит, до 1792 для пользователя | даташит ESP32-S3 |
| ESP32-C3 | 4096 бит, до 1792 для пользователя | даташит ESP32-C3 |
| RP2350 | 8 КБ antifuse OTP для ключей | даташит Pico 2 |
Что хранят:
- пользовательские данные — по даташиту ESP32-S3 это, например, ключ шифрования и идентификатор устройства; у eFuse есть защита от записи и от чтения, так что ключ нельзя ни изменить, ни прочитать программой;
- настройки, которые меняют работу чипа: по даташитам Espressif биты eFuse могут отключить JTAG, выбрать источник сигналов JTAG, зафиксировать напряжение флеш-памяти или запретить вывод сообщений загрузчика — и тогда соответствующие выводы обвязки загрузки перестают на это влиять.
Главное правило: запись необратима. По даташиту Espressif бит, записанный в 1, уже никогда не станет 0. Ошибочно записанный ключ или отключённый интерфейс прошивки исправить нельзя — чип останется таким навсегда. Поэтому eFuse не используют для данных, которые нужно менять: для этого есть EEPROM и флеш-память.
У RP2350 — микроконтроллера Raspberry Pi Pico 2 — такая память построена на antifuse: 8 КБ для хранения ключей подписанной загрузки.
Частые вопросы
Что такое eFuse у ESP32?
Однократно программируемая память внутри чипа. По даташитам Espressif у ESP32-S3 и ESP32-C3 её 4096 бит, из них до 1792 доступны пользователю. Изначально все биты — нули; бит можно записать в единицу, но вернуть в ноль нельзя. По даташиту ESP32-S3 пользовательские биты нужны, например, для ключа шифрования и идентификатора устройства, а системные — для настроек, которые меняют поведение загрузчика.
Можно ли отменить запись eFuse?
Нет. По даташиту Espressif после записи в 1 бит eFuse уже никогда не станет 0. Поэтому настройки безопасности, отключение JTAG или смену напряжения флеш-памяти через eFuse делают только тогда, когда точно понимают последствия: ошибка может сделать чип непригодным для прошивки.
Чем eFuse отличается от EEPROM?
EEPROM и флеш-память можно перезаписывать тысячи раз, а eFuse — только однажды: бит меняется необратимо. Поэтому EEPROM хранит пользовательские данные, а eFuse — то, что не должно меняться: ключи, калибровку, заводские настройки.
Источники
- Espressif. ESP32-S3 Series Datasheet v2.2 — разд. 4.1.2.4 — eFuse 4096 бит, из них 1792 для пользователя, например ключ шифрования и идентификатор устройства; однократное программирование, настраиваемая защита от записи и чтения, кодирование против порчи данных; по умолчанию все параметры eFuse — 0; запрограммированный в 1 бит нельзя вернуть в 0; параметры EFUSE_VDD_SPI_FORCE, EFUSE_DIS_PAD_JTAG, EFUSE_STRAP_JTAG_SEL и другие меняют действие выводов обвязки загрузки
- Espressif. ESP32-C3 Series Datasheet v2.4 — eFuse 4096 бит, до 1792 для пользователя; EFUSE_UART_PRINT_CONTROL и EFUSE_USB_PRINT_CHANNEL управляют выводом сообщений загрузчика
- Raspberry Pi. Raspberry Pi Pico 2 Datasheet (Release 5) — разд. 2 — у RP2350 8 КБ однократно программируемой памяти (antifuse OTP) для хранения ключей, подписанная загрузка, Arm TrustZone
Нашли ошибку?
Смотрите также
- Вывод обвязки загрузкиGPIO, уровень которого при сбросе задаёт режим загрузки
- EEPROMЭнергонезависимая память для настроек и калибровки
- Raspberry Pi Pico 240 контактов как у Pico, функции GPIO RP2350A, HSTX, питание, эррата E9
- ESP32ESP32, S2, S3, C2, C3, C5, C6, H2, P4: ядра, радио, USB, GPIO — сравнение и выбор