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

Можно ли перепрошить PIC после MCLRE = OFF?

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

Бит MCLRE выбирает, чем будет вывод MCLR: входом сброса или обычным входом. У восьмивыводных PIC12F629/675 его выключают, чтобы освободить GP3. Для программатора это не приговор — вход в режим программирования высоким напряжением работает при любом значении MCLRE. Сложности начинаются, когда к MCLRE = OFF добавляется внутренний генератор.

Почему кристалл «пропадает»

КонфигурацияЧто происходит при подаче VDDПрошивается
MCLRE = ON, любой генераторпрограмматор держит сбрособычным порядком
MCLRE = OFF, кварцпрограмма ждёт запуска генератораобычно да
MCLRE = OFF, INTOSCпрограмма стартует сразу и может занять GP0 и GP1только «Vpp перед Vdd»

Таблица — наш вывод из спецификации программирования DS41191D и описания генераторов. По рис. 2-2 вход в программирование выглядит так: линии тактов и данных в нуле, MCLR поднимают до VIHH, и только потом подают VDD. В этот момент вся логика остаётся в сбросе, а выводы — высокоимпедансными входами, и программа не успевает ничего переключить.

Что сделать

  1. Программатор с высоким напряжением — PICkit 4, PICkit 5, ICD. MPLAB Snap не подойдёт: он VPP не выдаёт.
  2. Питание кристалла — от программатора.
  3. В MPLAB IPE в расширенных настройках выбрать Programming Method → «Apply Vpp before Vdd». Microchip называет его рекомендуемым и ставит по умолчанию.
  4. Стереть кристалл и записать новую конфигурацию. У PIC12F629/675 программатор при этом сохраняет заводскую калибровку OSCCAL и биты BG.

Как устроен разъём ICSP и какие программаторы что умеют, рассказано в статье «Программирование PIC через ICSP» и в обзоре программаторов. Генератор битов конфигурации PIC сам предупреждает о сочетании MCLRE = OFF с внутренним генератором. Остальные семейства — на странице «Микроконтроллеры PIC».

Похожие вопросы

Почему кристалл не входит в программирование, если сначала подать питание?

С внутренним генератором и MCLRE = OFF программа начинает работать сразу после подачи VDD и может переключить GP0 и GP1 — это линии данных и тактов ICSP — в выходы раньше, чем программатор начнёт обмен. Спецификация DS41191D описывает вход так: сначала VIHH на MCLR, потом VDD; тогда программа не успевает стартовать (наш вывод из рисунка 2-2).

Можно ли так перепрошить PIC через MPLAB Snap?

Нет, если кристаллу нужен высоковольтный вход: по руководству Microchip Snap не выдаёт высокое напряжение программирования. У PIC12F629/675 низковольтного входа нет вовсе, поэтому для них нужен PICkit 4, PICkit 5 или другой программатор с VPP.

Плата питается от своего источника — поможет ли «Vpp перед Vdd»?

Порядок задаёт только программатор, который сам питает кристалл: в MPLAB IPE обратный режим доступен лишь при питании от отладчика. Если плата запитана от своего источника, на время прошивки её питание отключают и включают питание от программатора (наш вывод из руководства IPE).

Источники

  1. Microchip. PIC12F629/675/PIC16F630/676 Programming Specification (DS41191D) — 2.3, рис. 2-2 — вход в Program/Verify: при низких уровнях на линиях тактов и данных MCLR поднимают от VIL до VIHH, затем подают VDD; вход переводит остальную логику в сброс, все выводы — высокоимпедансные входы; регистр конфигурации: MCLRE = 0 — вывод GP3 работает как вход, функция MCLR отключена внутри
  2. Microchip. MPLAB IPE User's Guide (DS50002227J) — Programming Method: Apply Vpp before Vdd — рекомендуемая настройка по умолчанию; Apply Vdd before Vpp — с осторожностью, только при питании кристалла от программатора
  3. Microchip. MPLAB PICkit 5 User's Guide (DS50003525C) и MPLAB Snap User's Guide (DS50002787G) — PICkit 5 — высоковольтный вход (VDD 2,8–5,0 В) и выбор порядка VDD/VPP; Snap высокое напряжение программирования не выдаёт

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