Перейти к содержанию

eFuse и OTP

eFuse — это биты, которые можно записать один раз: пережжённый бит остаётся единицей навсегда. В них хранят настройки загрузки, ключи безопасной загрузки и шифрования, калибровку и серийные номера.

Обновлено Редакция GAW

eFuse (electronic fuse, «электронный предохранитель») — бит однократно программируемой памяти (OTP, one-time programmable) внутри чипа. Изначально он равен нулю; при записи его необратимо меняют, и он остаётся единицей навсегда. Так хранят то, что после производства или настройки не должно меняться.

ЧипОбъёмИсточник
ESP32-S34096 бит, до 1792 для пользователядаташит ESP32-S3
ESP32-C34096 бит, до 1792 для пользователядаташит ESP32-C3
RP23508 КБ 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 — то, что не должно меняться: ключи, калибровку, заводские настройки.

Источники

  1. 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 и другие меняют действие выводов обвязки загрузки
  2. Espressif. ESP32-C3 Series Datasheet v2.4 — eFuse 4096 бит, до 1792 для пользователя; EFUSE_UART_PRINT_CONTROL и EFUSE_USB_PRINT_CHANNEL управляют выводом сообщений загрузчика
  3. Raspberry Pi. Raspberry Pi Pico 2 Datasheet (Release 5) — разд. 2 — у RP2350 8 КБ однократно программируемой памяти (antifuse OTP) для хранения ключей, подписанная загрузка, Arm TrustZone

Нашли ошибку?