Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Теория микропроцессорных систем АТ_Методическое...docx
Скачиваний:
6
Добавлен:
01.03.2025
Размер:
3.72 Mб
Скачать

2.1.5. Функционирование и программирование Flash-памяти и эсппзу

Основной объем внутренней памяти микроконтроллеров данного семейства за­нимает Flash-память и ЭСППЗУ, размещение которых в адресном пространстве оп­ределяется соответствующими регистрами конфигурации (см. 2.1.4). В данном раз­деле рассматриваются особенности их функционирования и программирования.

Flash-память. Большинство микроконтроллеров семейства 68НС12/912 (под­семейство 68НС912) содержит Flash-память объемом до 128 Кбайт, которая органи­зована в виде одного или нескольких сегментов (2 сегмента в модели 68HC912D60, 4 сегмента в модели 68HC912DG128). В исходном состоянии (до записи) содержи­мое всех ее ячеек равно $FF. Допускается выполнение до 100 циклов стирания-записи содержимого Flash-памяти. Необходимое для этого повышенное напряжение питания Vf = 12 В (±5%) подается на специальный вывод микроконтроллера. В режиме считывания на этом выводе должно быть установлено напряжение пита­ния Vп. В моделях 68HC912D60A, 68HC912DG128A повышенное напряжение для программирования-стирания Flash-памяти обеспечивается с помощью импульсного преобразователя, размещенного на кристалле, поэтому не требуется подключения внешнего источника напряжения Vf.

В конце каждого сегмента Flash-памяти имеется блок, содержимое которого можно защитить от последующего стирания и записи путем установки в 1 бита ВООТР в регистре FEEMCR. Обычно эти блоки служат для хранения программы начальной загрузки. В моделях 68НС912В32, ВС32 данный блок имеет емкость 2 Кбайт и размещается в диапазоне адресов $7800-$7FFF или $F800-$FFFF в зави­симости от размещения сегмента Flash-памяти. В моделях 68HC912D60, 68HC912DG128 защищаемые блоки емкостью по 8 Кбайт располагаются в послед­них адресах сегментов.

Функционирование каждого из сегментов Flash-памяти определяется содержи­мым регистров FEELCK, FEEMCR, FEECTL (рис. 2.8). Поэтому микроконтрол­леры 68HC912D60, имеющие два сегмента емкостью 28 и 32 Кбайт, используют для управления их работой 3 пары регистров FEELCK28/32, FEEMCR28/32, FEECTL28/32, адреса которых приведены на рис. 2.7. В микроконтроллерах 68HC912DG, содержащих 4 сегмента по 32 Кбайт, имеется 4 набора регистров FEELCK, FEEMCR, FEECTL.

Регистры FEELCK, FEEMCR (рис. 2.8, а, б) содержат по 1 биту, которые име­ют следующее назначение:

LOCK - запрещает при значении LOCK=1 запись в регистр FEEMCR;

ВООТР - запрещает при значении ВООТР=1 стирание и запись содержимого в защищаемый блок Flash-памяти.

При запуске микроконтроллера эти биты принимают значения LOCK=0, ВООТР=1. Регистр FEELCK допускает только однократную запись после запуска. Содержимое регистра FEEMCR не может быть изменено, если в регистре FEELCK значение бита LOCK=1 или в регистре FEECTL значение бита ENPE=1.

В регистре FEECTL (рис. 2.8, в) отдельные биты имеют следующее назначение:

FEESWAI - прекращает при значении FEESWAI=1 подачу тактовых импульсов во Flash-память в режиме ожидания;

Рис. 2.8. Формат содержимого регистров FEELCK (a), FEEMCR (б), FEECTL (в,г), определяющих режим работы и программирования Flash-памяти

SVFP - указывает уровень поступающего напряжения программирования Vf (доступен только для чтения): при SVFP=0 значение Vf ниже нормального уровня, при SVFP=1 значение Vf выше нормального уровня;

ERAS - при установке значения ERASE=1 реализуется режим стирания;

LAT - при установке значения LAT=1 разрешает прием адреса и данных при про­граммировании Flash-памяти, при LAT=0 память работает в режиме считывания;

ENPE - при установке значения ENPE=1 разрешает подачу повышенного на­пряжения для стирания или записи содержимого сегмента Flash-памяти.

После запуска все биты регистра FEECTL принимают значение 0. Изменение значений битов ERAS, LAT возможны только при ENPE=0. Установка значения би­та ENPE=1 производится только при LAT=1.

Стирание содержимого сегмента Flash-памяти производится с помощью сле­дующей процедуры:

1. На соответствующий вывод микроконтроллера подается напряжение Vf = 12 В.

2. Устанавливаются значения битов ERASE = LAT = 1 (режим стирания).

3. Производится запись произвольного байта в любую ячейку, находящуюся в стираемом сегменте Flash-памяти.

4. Устанавливается значение бита ENPE=1, что обеспечивает подачу повышенно­ го напряжения на ячейки Flash-памяти в стираемом сегменте.

5. Реализуется программная задержка длительностью 5-10 мс для стирания со­держимого сегмента.

6. Устанавливается значение бита ENPE=0 (отключение повышенного напряже­ния).

7. Реализуется программная задержка длительностью 1 мс, после которой Flash-память переходит в режим считывания.

8. Производится контрольное считывание, чтобы убедиться в полном стирании содержимого сегмента (содержимое всех ячеек должно быть $FF).

9. Если стирание неполное, то пп. 4-7 повторяются (допускается выполнение до пяти циклов стирания). Если стирание реализовано, то также рекомендуется по­вторно выполнить указанное количество циклов для обеспечения большей на­дежности.

10. После завершения циклов стирания устанавливается значение бита LAT=0 и внешнее напряжение Vf снижается до уровня Vп=5 В.

Программирование Flash-памяти производится путем записи байта или слова с помощью следующей процедуры:

1. На соответствующий вывод микроконтроллера подается напряжение Vf = 12 В.

2. Устанавливаются значения битов ERAS=0 и LAT=1 (режим программирова­ния).

3. Производится запись данных (байта или слова) по адресу программируемой ячейки Flash-памяти.

4. Устанавливается значение бита ENPE=1, что обеспечивает подачу повышенно­го напряжения на программируемую ячейку (запись поступивших данных).

5. Устанавливается значение бита ENPE=0 (отключение повышенного напряже­ния).

6. Реализуется программная задержка длительностью 20 мкс, после которой Flash-память переходит в режим считывания.

7. Производится контрольное считывание содержимого запрограммированной ячейки, чтобы убедиться в правильности записи (верификация).

8. Если обнаружена ошибка записи, то пп. 4-7 повторяются (допускается выпол­нение до 50 циклов программирования). Если запись проведена правильно, то также рекомендуется повторить циклы программирования для обеспечения большей надежности.

9. После окончания программирования ячейки устанавливается значение бита LAT=0.

10. При необходимости программирования других ячеек сегмента пп. 2-9 повторя­ются требуемое количество раз.

11. После завершения программирования всех необходимых ячеек внешнее напря­жение Vf снижается до уровня Vп=5 В.

В моделях 68HC912D60A, 68HC912DG128A используется модернизированный вариант Flash-памяти, который не требует внешнего источника повышенного напряжения и имеет более простые алгоритмы стирания и программирования. Сег­менты Flash-памяти разбиты на строки размером по 64 байта. Стирание производится для всего сегмента, а программирование осуществляется построчно. Проце­дуры стирания-программирования реализуются с помощью следующих битов в ре­гистрах FEECTL (рис. 2.8, г):

HVEN - при установке значения HVEN=1 разрешается подача повышенного напряжения для стирания или записи содержимого Flash-памяти;

ERASE - при установке значения ERASE=1 реализуется режим стирания;

PGM - при установке значения PGM=1 реализуется режим программирования.

После запуска микроконтроллера значения этих битов равны 0. Их установка в 1 производится при реализации алгоритмов стирания-программирования. При зна­чениях ERASE=PGM=0 реализуется режим считывания Flash-памяти. Установка значения HVEN=1 разрешается только после задания режима стирания (установка ERASE=1) или программирования (PGM=1). Комбинация значений ERASE=PGM=1 (одновременная реализация стирания и программирования) является запрещенной.

Стирание содержимого сегмента Flash-памяти в микроконтроллерах 68HC912D60A, DG128A производится с помощью следующей процедуры:

1. Устанавливается значение бита стирания ERASE= 1.

2. Производится запись произвольного байта в любую ячейку, находящуюся в стираемом сегменте Flash-памяти.

3. Реализуется программная задержка длительностью 10 мкс.

4. Устанавливается значение бита HVEN=1, что обеспечивает подачу повышенно­го напряжения на ячейки Flash-памяти в стираемом сегменте.

5. Реализуется программная задержка длительностью 8 мс.

6. Устанавливается значение бита стирания ERASE=0.

7. Реализуется программная задержка длительностью 100 мкс.

8. Устанавливается значение бита HVEN=0 (отключение повышенного напряжения).

9. Реализуется программная задержка длительностью 1 мкс, после которой Flash-память переходит в режим считывания.

Программирование Flash-памяти в этих моделях микроконтроллеров произво­дится путем последовательной записи слов (16-разрядных данных) в пределах од­ной строки длиной 64 байта. Для этого выполняется следующая процедура:

1. Устанавливается значение бита программирования PGM=1.

2. Производится запись произвольного слова в любую ячейку программируемой строки.

3. Реализуется программная задержка длительностью 10 мкс.

4. Устанавливается значение бита HVEN=1, что обеспечивает подачу повышенно­го напряжения на ячейки Flash-памяти программируемой строки.

5. Реализуется программная задержка длительностью 5 мкс.

6. Производится запись байта в одну из ячеек программируемой строки.

7. Реализуется программная задержка длительностью 30 мкс.

8. Путем повторения операций 6 и 7 производится запись всех байтов строки.

9. Устанавливается значение бита стирания PGM=0.

10. Реализуется программная задержка длительностью 5 мкс.

11. Устанавливается значение бита HVEN=0 (отключение повышенного напряжения).

12. Реализуется программная задержка длительностью 1 мкс, после которой Flash-память переходит в режим считывания.

Эта процедура выполняется для программирования каждой строки Flash-памяти.

Программирование ЭСППЗУ. Все модели микроконтроллеров семейства 68НС12/912 имеют в своем составе модули ЭСППЗУ емкостью от 768 байт до 4 Кбайт. В исходном (незапрограммированном) состоянии ячейки ЭСППЗУ содер­жат единичные значения всех битов (число $FF). Микроконтроллер содержит на кристалле импульсный преобразователь, обеспечивающий формирование повы­шенного напряжения для программирования и стирания ЭСППЗУ. Поэтому данные процедуры производятся без подключения внешнего источника повышенного на­пряжения под управлением программы, написанной пользователем. Допускается выполнение не менее 10 тыс. циклов стирания-программирования. В моделях 68HC912D60A, 68HC912DG128A имеется возможность выполнять стирание-программирование с автоматической реализацией необходимых задержек с помощью специального внутреннего таймера (режим AUTO).

Для управления функционированием ЭСППЗУ служат регистры EEMCR, EEPROT, EEPROG. Регистр EETST ($00F2) используется в процессе тестирова­ния ЭСППЗУ. В рабочем режиме все его биты имеют значение 0.

Регистр управления EEMCR (рис. 2.9, а) содержит следующие биты, общие для всех моделей:

EESWAI - прекращает при значении EESWAI=1 подачу тактовых импульсов в ЭСППЗУ в режиме ожидания;

PROTLCK - запрещает при значении PROTLCK=1 изменение битов защиты BPPROT в регистре EEPROT и бита BULKP в регистре EEPROG;

EERC - включает при значении EERC=1 внутренний RC-генератор для питания импульсного преобразователя, формирующего повышенное напряжение для стира­ния-программирования (используется при низкой тактовой частоте Ft<l МГц).

Рис. 2.9. Формат содержимого регистров EEMCR (a), EEPROT (б), EEPROG (в), определяющих режим работы и программирования ЭСППЗУ

После запуска микроконтроллера устанавливаются значения EESWAI=1, PROTLCK=EERC=0. При дальнейшей работе допускается только однократное из­менение значения бита PROTLCK для установки защиты содержимого регистра EEPROT.

ЭСППЗУ делится на блоки размером от 64 до 1024 байт, которые могут быть защищены от стирания-программирования путем установки значений битов BPROTi в регистре защиты EEPROT (рис. 2.9, б). При значении бита BPROTi=l за­прещается выполнение стирания и программирования соответствующего блока ЭСППЗУ. Адреса и размеры блоков для различных моделей микроконтроллеров приведены в табл. 2.16. Количество используемых битов BPROTi зависит от объема ЭСППЗУ в данной модели.

Таблица 2.16. Адреса и размеры защищаемых блоков ЭСППЗУ

Запись и стирание ЭСППЗУ осуществляется программно с помощью регистра EEPROG (рис. 2.9, в), который содержит следующие биты:

BULKP - бит защиты ЭСППЗУ от стирания: при установке значения BULKP=1 запрещает одновременное стирание содержимого всего массива данных или содер­жимого строк (32 байта);

BYTE - определяет режим стирания содержимого ЭСППЗУ: 1 или 2 байта (сло­во) при значении BYTE=1, строка (32 байта) или весь массив ЭСППЗУ при BYTE=0;

ROW - при значении BYTE=0 задает вид группового стирания ЭСППЗУ: сти­рание строки (32 байта) при ROW=1, стирание всего массива ЭСППЗУ при ROW=0;

ERASE - задает режим работы ЭСППЗУ: стирание при значении ERASE=1, программирование или считывание при ERASE=0 (при этом биты BYTE, ROW не влияют на работу ЭСППЗУ);

EELAT - при установке значения EELAT=1 разрешается ввод в ЭСППЗУ адре­са программируемой или стираемой ячейки и записываемого в нее содержимого;

EPGM - при установке значения EPGM=1 вызывает подачу напряжения про­граммирования на выбранную ячейку ЭСППЗУ, обеспечивая запись в нее посту­пивших данных.

После запуска микроконтроллера все биты в регистре EEPROG принимают значение 0. Установка значения BULKP=1 производится только при EEPGM=0 и PROTLCK=0. Запись значения EPGM=1 разрешается только при установленном значении EELAT=1. При значении битов ERASE=EELAT=EPGM=0 реализуется режим считывания ЭСППЗУ.

Стирание содержимого ЭСППЗУ может производиться при установке бита ERASE=1 отдельными байтами или словами (при значении BYTE=1, ROW - лю­бое), построчно (при значении BYTE=0, ROW=1) или сразу всего массива (при значении BYTE=0, ROW=0). Программирование осуществляется путем записи в адре­суемую ячейку ЭСППЗУ байта или слова при установке ERASE=0 (биты BYTE, ROW могут иметь любое значение). Процедура стирания-программирования вы­полняется следующим образом:

1. В регистр EEPROG загружается содержимое, в котором биты BYTE, ROW, ERASE имеют значения, соответствующие выполнению программирования или выбранному способу стирания, устанавливается значение EELAT=1.

2. Выполняется запись данных в ЭСППЗУ - при стирании или программировании байта (слова) запись производится по адресу данного байта (слова), при стира­нии строки - по адресу любого байта данной строки, при стирании всего масси­ва - по адресу любой ячейки ЭСППЗУ. При стирании записываемые данные могут иметь любое значение, при программировании вводятся необходимые данные.

3. Включается повышенное напряжение стирания-программирования путем уста­новки значения бита EPGM=1 в регистре EEPROG.

4. Реализуется программная задержка длительностью не менее 10 мс.

5. Устанавливается значение бита EEPGM=0 (отключение повышенного напря­жения).

6. Устанавливается значение бита EELAT=0 (окончание программирования-стирания).

Если производится программирование или стирание нескольких байт (слов) или строк, то после п. 5 данной процедуры следует перейти к п. 2 и выполнять этот цикл для каждого байта (слова) или строки. После программирования или стирания по­следнего байта (слова) или строки необходимо установить значение EELAT=0.

В моделях 68HC912D60A, 68HC912DG128A используется модернизированный вариант ЭСППЗУ, обеспечивающий автоматическое формирование задержек при выполнении стирания-программирования. Для этого используется два дополни­тельных регистра EEDIVH, L и ячейка ЭСППЗУ (адрес $00EE-EF), в которую зано­сится управляющее слово SW (Shadow Word), формат которого показан на рис. 2.10. При программировании в эту ячейку заносятся необходимые значения би­тов NOBDML, NOSHW и EEDIV9-0, которые при запуске микроконтроллера за­гружаются в регистры EEMCR, EEDIVH, L. В этих моделях регистр EEMCR не содержит бит EERC, так как отсутствует внутренний RC-генератор. Вместо него имеется «холостой» бит DMY (Dummy), который может использоваться разработ­чиком аппаратуры по своему усмотрению. В регистр введены дополнительные биты (см. рис. 2.8, а):

AUTO - при установке значения AUTO=1 обеспечивает автоматическое фор­мирование необходимых задержек при стирании-программировании (при этом ис­пользуются регистры EEDIVH, EEDIVL);

NOBDML - запрещает при значении NOBDML=1 отключение режима отладки BDM (см. 2.1.12);

NOSHW - разрешает при значении NOSHW=0 выборку управляющего слова из ячейки с адресом $00EE-EF (при NOSHW=1 по этому адресу размещается обычная ячейка ЭСППЗУ).

Запись SW разрешается при значении бита NOSHW=0 в регистре EEMCR. По­следующее стирание-программирование этой ячейки можно запретить, установив значение бита SHPROT=1 в регистре EEPROT (рис. 2.9, б).

Рис. 2.10. Формат содержимого управляющего слова SW и регистров EEDIVH, EEDIVL для микроконтроллеров 68HC912D60A, 68HC912DG128A

Автоматическая реализация необходимых задержек при выполнении стирания-программирования осуществляется с помощью специального внутреннего таймера, ра­бочая частота которого Fe=Fq/Ke получается путем деления частоты кварцевого резо­натора на коэффициент Ке, значение которого задается содержимым регистров EEDIVH, EEDIVL. Для реализации требуемых задержек период переключения этого таймера должен составлять 35±2 мкс, т. е. значение частоты Fe должно быть около 28,6 кГц. Необходимая величина коэффициента Ке определяется с выражением

Ке = [35Fq + 0,5],

где Fq - значение частоты кварцевого резонатора в МГц, величина Ке округляется в сторону уменьшения до ближайшего целого значения. Например, при Fq=16 МГц значение Ке=560 (EEDIV9-0=$0230), при Fq=1 МГц значение Ке=35 (EEDIV9-0 =$0023).

В режиме автоматического формирования задержек (в регистре EECR бит AUTO=1) пп. 4-5 при стирании и программировании ЭСППЗУ исключаются. Бит EEPGM автоматически сбрасывается в 0 после реализации этих операций под управлением внутренней логики. Поэтому программа стирания-программирования после выполнения п. 3 должна контролировать (опрашивать) бит EEPGM и при зна­чении EEPGM=0 произвести установку бита EELAT в 0 (п. 6).