Можно ли перепрошить 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. В этот момент вся логика остаётся в сбросе, а выводы — высокоимпедансными входами, и программа не успевает ничего переключить.
Что сделать
- Программатор с высоким напряжением — PICkit 4, PICkit 5, ICD. MPLAB Snap не подойдёт: он VPP не выдаёт.
- Питание кристалла — от программатора.
- В MPLAB IPE в расширенных настройках выбрать Programming Method → «Apply Vpp before Vdd». Microchip называет его рекомендуемым и ставит по умолчанию.
- Стереть кристалл и записать новую конфигурацию. У 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).
Источники
- Microchip. PIC12F629/675/PIC16F630/676 Programming Specification (DS41191D) — 2.3, рис. 2-2 — вход в Program/Verify: при низких уровнях на линиях тактов и данных MCLR поднимают от VIL до VIHH, затем подают VDD; вход переводит остальную логику в сброс, все выводы — высокоимпедансные входы; регистр конфигурации: MCLRE = 0 — вывод GP3 работает как вход, функция MCLR отключена внутри
- Microchip. MPLAB IPE User's Guide (DS50002227J) — Programming Method: Apply Vpp before Vdd — рекомендуемая настройка по умолчанию; Apply Vdd before Vpp — с осторожностью, только при питании кристалла от программатора
- Microchip. MPLAB PICkit 5 User's Guide (DS50003525C) и MPLAB Snap User's Guide (DS50002787G) — PICkit 5 — высоковольтный вход (VDD 2,8–5,0 В) и выбор порядка VDD/VPP; Snap высокое напряжение программирования не выдаёт
Нашли ошибку?
Смотрите также
- Биты конфигурации PIC#pragma config XC8, слова CONFIG в hex и обратно, опасные LVP, MCLRE и CP
- Программирование PIC (ICSP)Выводы ICSP, VPP и LVP, ключ MCHP, схема у MCLR, PICkit 5, Snap, IPE
- Программаторы и отладчикиUSBasp, ST-LINK, J-Link, PICkit 5, Snap, CMSIS-DAP, WCH-LinkE: сравнение
- PIC (Microchip)PIC10/12/16/18, dsPIC33, PIC32: ядра, классические кристаллы, MPLAB
- MCLR и MCLRE у PICВывод сброса PIC: функция MCLR, бит MCLRE и связь с программированием