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

Высоковольтное программирование

Обычный программатор входит в режим прошивки через выводы, которые программа может занять или отключить: сброс превращают в порт, низковольтный режим запрещают. Последний гарантированный путь — подать на вывод сброса напряжение выше питания. Так работают высоковольтный ICSP у PIC и параллельное и последовательное высоковольтное программирование у AVR.

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

Высоковольтное программирование (high-voltage programming, HVP) — способ ввести микроконтроллер в режим программирования, подав на вывод сброса напряжение заметно выше питания. У PIC16F184XX этот вход доступен всегда, независимо от битов конфигурации (DS40001970A, разд. 2.1), а у AVR он остаётся единственным способом прошить кристалл с отключённым выводом сброса.

PIC: высоковольтный ICSP

У PIC вход в режим программирования — повышенное напряжение VIHH на выводе MCLR/VPP. Альтернатива — низковольтный режим LVP, в котором хватает одного питания VDD: у PIC16F184XX вход в него — 32-битный ключ 0x4D434850 («MCHP») по линии данных (DS40001970A, разд. 2.1.2), у PIC16F87XA — уровень на выводе RB3/PGM (DS39589C, разд. 1.1).

КристаллVIHH на MCLR/VPPДокумент
PIC16F184XX7,9–9,0 В, ток до 600 мкА, фронт не дольше 1 мксDS40001970A, табл. электрических характеристик
PIC16F87XA13 В ± 0,5 В (разд. 1.1); по табл. 6-1 от VDD + 3,5 до 13,5 ВDS39589C

Главное правило связи с LVP: бит LVP в слове конфигурации с завода равен 1, а записать в него 0 можно только в высоковольтном режиме. После этого низковольтный вход закрыт, и программировать кристалл можно только высоким напряжением; высоковольтный вход доступен всегда, независимо от LVP (DS40001970A, разд. 2.1).

Спецификация PIC16F184XX описывает два порядка входа. При VPP-first сначала поднимают MCLR до VIHH, потом подают VDD — программа не успевает стартовать и занять выводы ICSPDAT и ICSPCLK; Microchip рекомендует именно его. При VDD-first питание уже есть, и выполняемая программа прерывается (разд. 2.1.1). Пример, когда это важно, — в ответе «Можно ли перепрошить PIC после MCLRE = OFF». Выводы и программаторы — в статье «Программирование PIC через ICSP».

AVR: параллельное и последовательное

У AVR обычный способ — ISP по SPI, которому нужен вывод RESET. Если фьюз RSTDISBL превратил RESET в порт, остаётся высоковольтный режим:

КристаллСпособНапряжение на RESETДокумент
ATmega8параллельное программирование (HVPP)11,5–12,5 В, ток до 250 мкА2486AA, Parallel Programming, табл. 95
ATtiny25/45/85высоковольтное последовательное (HVSP)11,5–12,5 В через 20–60 мкс после подачи питания2586Q, разд. 20.7.1

Даташит ATmega8 прямо предупреждает: после программирования RSTDISBL менять фьюзы и программировать можно только параллельным способом, а если выбран внешний кварц, используют альтернативный алгоритм с одновременной подачей питания и 12 В. Подробнее о фьюзах — в термине «Фьюзы AVR», о программаторах — в статье «Программирование AVR».

Осторожно

Повышенное напряжение подают только на вывод сброса и только по спецификации конкретного кристалла. По нашему выводу, если на плате к MCLR или RESET подключены другие цепи, их нужно развязать резистором, иначе источник VPP будет нагружен или повредит их.

Частые вопросы

Какое напряжение нужно для высоковольтного программирования?

Зависит от кристалла: у PIC16F184XX VIHH на MCLR/VPP — 7,9–9,0 В (DS40001970A), у PIC16F87XA — 13 В ± 0,5 В, а по таблице характеристик от VDD + 3,5 до 13,5 В (DS39589C); у ATmega8 и ATtiny85 на RESET подают 11,5–12,5 В. Подавать «универсальные» 12 В на любой PIC нельзя — смотрите спецификацию программирования своего кристалла.

Как восстановить AVR после RSTDISBL?

Только высоковольтным программированием: у ATmega8 — параллельным (примечание к таблице фьюзов, даташит 2486AA), у ATtiny85 — высоковольтным последовательным (табл. 20-4, даташит 2586Q). Обычный ISP по SPI без вывода RESET не работает.

Зачем выключать LVP у PIC, если потом нужен высоковольтный программатор?

При LVP = 1 вывод MCLR всегда работает как сброс, а у PIC16F87XA ещё и RB3 занят под PGM (DS40001970A, разд. 1.4; DS39589C, рег. 3-1). Отключив LVP, получают свободные выводы, но сбросить бит обратно и прошить кристалл можно только высоким напряжением.

Источники

  1. Microchip. PIC16(L)F184XX Memory Programming Specification (DS40001970A, 2017) — Hardware Requirements: высоковольтному ICSP нужны два программируемых источника — VDD и MCLR/VPP, низковольтному — только VDD; разд. 2.1: LVP = 1 с завода, в 0 его можно записать только в высоковольтном режиме, после этого программирование только высоким напряжением, высоковольтный вход доступен всегда; разд. 2.1.1: входы VPP-first (рекомендуется, программа не успевает стартовать) и VDD-first; разд. 2.1.2: вход в LVP — ключ 0x4D434850 («MCHP»); табл. электрических характеристик: VIHH 7,9–9,0 В, IPP до 600 мкА, TVHHR до 1,0 мкс
  2. Microchip. PIC16F87XA Flash Memory Programming Specification (DS39589C, 2010) — разд. 1.1: вход — RB6 и RB7 в нуле, MCLR от VIL до VIHH (13 В ± 0,5 В); LVP — через вывод RB3 (PGM); рег. 3-1: LVP = 0 — RB3 обычный порт, программирование только высоким напряжением на MCLR; табл. 6-1: VIHH от VDD + 3,5 до 13,5 В
  3. Atmel. ATmega8(L) Datasheet (Rev. 2486AA–AVR–02/2013) — Parallel Programming, Enter Programming Mode: 11,5–12,5 В на RESET; при запрограммированном RSTDISBL или внешнем кварце — альтернативный алгоритм с одновременной подачей VCC и 12 В; прим. 4 к таблице фьюзов: после программирования RSTDISBL менять фьюзы и программировать можно только параллельным программированием; табл. 95: VPP 11,5–12,5 В, IPP до 250 мкА
  4. Atmel. ATtiny25/45/85 Datasheet (Rev. 2586Q–AVR–08/2013) — разд. 20.2, табл. 20-4: после программирования RSTDISBL программировать можно только высоковольтным последовательным способом; разд. 20.7.1: вход в HVSP — 11,5–12,5 В на RESET через 20–60 мкс после подачи питания

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