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

Слово конфигурации PIC (Configuration Word)

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

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

Слово конфигурации (Configuration Word) — ячейка памяти PIC вне области программы, биты которой задают режимы работы до выполнения первой команды: источник тактирования, сторожевой таймер, таймер включения питания, сброс по снижению питания, функцию вывода MCLR, низковольтное программирование и защиту кода. У новых PIC таких слов несколько.

Где лежит

МикроконтроллерАдресДокумент
PIC16F87XA (PIC16F877A и др.)2007h, одно словоDS39589C, разд. 3.0
PIC12F629/6752007h, одно словоDS41190G, рег. 9-1
PIC16F184XX8007h–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 правила свои — смотрите даташит.

Источники

  1. 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-файла
  2. 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
  3. Microchip. PIC12F629/675 Data Sheet (DS41190G, 2010) — рег. 9-1 CONFIG: слово конфигурации по адресу 2007h, биты BG1:BG0, CPD, CP, BODEN, MCLRE, PWRTE, WDTE, FOSC2:0
  4. Atmel. ATmega8(L) Datasheet (Rev. 2486AA–AVR–02/2013) — раздел Fuse Bits: два байта фьюзов, запрограммированный фьюз читается как логический 0

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