Слово конфигурации PIC (Configuration Word)
Некоторые настройки PIC должны действовать ещё до первой команды программы: какой генератор запустить, включать ли сторожевой таймер, работает ли вывод сброса. Их хранят не в регистрах, а в отдельных ячейках памяти — словах конфигурации, которые записывает программатор.
Обновлено Редакция GAW
Слово конфигурации (Configuration Word) — ячейка памяти PIC вне области программы, биты которой задают режимы работы до выполнения первой команды: источник тактирования, сторожевой таймер, таймер включения питания, сброс по снижению питания, функцию вывода MCLR, низковольтное программирование и защиту кода. У новых PIC таких слов несколько.
Где лежит
| Микроконтроллер | Адрес | Документ |
|---|---|---|
| PIC16F87XA (PIC16F877A и др.) | 2007h, одно слово | DS39589C, разд. 3.0 |
| PIC12F629/675 | 2007h, одно слово | DS41190G, рег. 9-1 |
| PIC16F184XX | 8007h–800Bh, пять слов | DS40001970A, разд. 1.4 |
Биты PIC16F87XA
Регистр 3-1 спецификации DS39589C: CP (защита памяти программ), DEBUG (внутрисхемная отладка), WRT1:0 (защита от записи части памяти), CPD (защита EEPROM), LVP (низковольтное программирование), BOREN (сброс по снижению питания), PWRTEN (таймер включения питания), WDTEN (сторожевой таймер), FOSC1:0 (тип генератора: RC, HS, XT, LP).
Стёртый бит читается как 1, запрограммированный — как 0, но смысл значений у каждого бита свой: WDTEN = 1 включает сторожевой таймер, PWRTEN = 0 включает таймер включения питания, CP = 0 включает защиту кода. Ошибки чаще всего возникают именно здесь, поэтому в коде на XC8 биты задают именами в #pragma config, а строку для конкретного кристалла собирает генератор битов конфигурации PIC.
Как записывается
Слово конфигурации записывает программатор. По спецификации DS39589C он обязан брать слово конфигурации и ID из HEX-файла (разд. 4.0), а стирание памяти программ (Bulk Erase) слово конфигурации не стирает (разд. 2.5.1.1). Биты LVP и CP напрямую влияют на сам процесс программирования: при LVP = 0 программировать можно только высоким напряжением на MCLR/VPP (DS40001970A, разд. 1.4). Подробнее о выводах и режимах — в статье «Программирование PIC через ICSP».
Не путать
- С фьюзами AVR: назначение похожее, и у ATmega8 запрограммированный фьюз тоже читается как 0 (даташит 2486AA, раздел о фьюзах), но набор и смысл битов свои.
- С байтами конфигурации STM32 — аналогом у микроконтроллеров STM32.
Частые вопросы
Где хранится слово конфигурации PIC?
В отдельной ячейке за пределами памяти программ: у PIC16F87XA и PIC12F675 — по адресу 2007h, у PIC16F184XX пять слов занимают адреса 8007h–800Bh. Программа их не выполняет, а записывает программатор вместе с прошивкой (DS39589C разд. 3.0; DS41190G рег. 9-1; DS40001970A разд. 1.4).
Почему у одних битов 0 значит «включено», а у других — «выключено»?
Стёртая ячейка читается как 1, а запрограммированный бит — 0, и смысл каждого бита задан отдельно. У PIC16F87XA WDTEN = 1 включает сторожевой таймер, а PWRTEN = 0 — таймер включения питания; CP = 0 включает защиту кода (DS39589C, рег. 3-1). Поэтому биты удобнее задавать именами в #pragma config, а не числом.
Можно ли изменить слово конфигурации из программы?
У PIC16F87XA — нет. Программе доступна только память 0000h–1FFFh, а область конфигурации 2000h–3FFFh, где лежит слово 2007h, адресуется лишь в режиме программирования (DS39589C, разд. 2.1); ячейки ID 2000h–2003h при обычной работе недоступны (DS39582C, разд. 14.17). Слово записывает программатор, а стирание памяти программ его не затрагивает (DS39589C, разд. 2.5.1.1). Программатор берёт значения из HEX-файла, поэтому их задают в исходном коде (разд. 4.0). У других семейств PIC правила свои — смотрите даташит.
Источники
- Microchip. PIC16F87XA Flash Memory Programming Specification (DS39589C, 2010) — разд. 3.0, рег. 3-1: слово конфигурации по адресу 2007h, биты CP, DEBUG, WRT1:0, CPD, LVP, BOREN, PWRTEN, WDTEN, FOSC1:0; бит программируется в 0, стёртый читается как 1; разд. 2.5.1.1: стирание памяти программ не стирает слово конфигурации даже при адресе 2007h; разд. 4.0: программатор обязан брать слово конфигурации и ID из HEX-файла
- Microchip. PIC16(L)F184XX Memory Programming Specification (DS40001970A, 2017) — разд. 1.4: пять слов конфигурации по адресам 8007h–800Bh задают режимы до выполнения программы; важные для программирования биты — LVP (1 — разрешено низковольтное программирование, MCLRE игнорируется; 0 — нужен высокий уровень на MCLR/VPP) и CP (0 — защита кода включена); бит LVP — в Configuration Word 4
- Microchip. PIC12F629/675 Data Sheet (DS41190G, 2010) — рег. 9-1 CONFIG: слово конфигурации по адресу 2007h, биты BG1:BG0, CPD, CP, BODEN, MCLRE, PWRTE, WDTE, FOSC2:0
- Atmel. ATmega8(L) Datasheet (Rev. 2486AA–AVR–02/2013) — раздел Fuse Bits: два байта фьюзов, запрограммированный фьюз читается как логический 0
Нашли ошибку?
Смотрите также
- Биты конфигурации PIC#pragma config XC8, слова CONFIG в hex и обратно, опасные LVP, MCLRE и CP
- Программирование PIC (ICSP)Выводы ICSP, VPP и LVP, ключ MCHP, схема у MCLR, PICkit 5, Snap, IPE
- MCLR и MCLRE у PICВывод сброса PIC: функция MCLR, бит MCLRE и связь с программированием
- Высоковольтное программированиеВход в программирование повышенным напряжением на выводе сброса
- Фьюзы AVRБиты конфигурации AVR: тактирование, загрузчик, BOD
- Байты конфигурации (option bytes)Настройки защиты и режимов STM32 во флеш-памяти
- Почему PIC не работает после прошивки?Чистые биты конфигурации: WDT включён, генератор RC, LVP, MCLR