Flash-память

Flash-память

На этом уроке мы поговорим о FLASH-памяти микроконтроллера и попробуем загрузить код нашего первого проекта.
 

 
FLASH-память микроконтроллера применяется для хранения энергонезависимых данных, то есть данных, которые должны сохраняться после отключения питания. Такими данными является, в первую очередь, код программы, но подобным образом могут также храниться настройки системы управления.

Микроконтроллер STM32F303VCT6 имеет 256 килобайт FLASH-памяти, организованной в виде набора ячеек по 64 бита.

Весь основной блок FLASH-памяти имеет постраничную организацию и хранится в виде набора из 128 страниц или секторов по 2 килобайта.
Flash-память
Стирание FLASH-памяти осуществляется только постранично. Считывание и запись можно осуществлять, обращаясь к отдельным ячейкам.

Кроме основного блока FLASH-памяти микроконтроллер также имеет информационный блок, разделенный на 2 части. Системная память содержит программу – загрузчик, который позволяет загружать код в основную память через интерфейс UART или USB, то есть без использования программатора. Удалить или как-то модифицировать его нельзя. Этот блок памяти заполняется содержимым при производстве микроконтроллеров, изменить или как-то модифицировать его нельзя.

Раздел Option Bytes содержит систему защиты памяти, которая позволяет защитить код программы микроконтроллера от считывания или записи, а также защитить авторские права программиста.
Option Bytes
Однако пользоваться ей надо очень аккуратно, поскольку микроконтроллер допускает необратимые действия со стороны защиты памяти.
Также на этой схеме показаны служебные регистры, которые используются при обращении к ячейкам FLASH-памяти.

 

Считывание Flash-памяти микроконтроллера

Давайте посмотрим, что содержится в памяти программ нашей отладочной платы с точки зрения программатора.
Запускаем визуальный программатор ST Visual Programmer и подключаем отладочную плату к компьютеру через центральный разъем mini-USB. Именно этот разъем используется для соединения с программатором-отладчиком ST-link, размещенным на отладочной плате.
mini-USB разъем для подключению к ST-link
При первом подключении к компьютеру на отладочной плате начинают мигать светодиоды. При нажатии на кнопку User программа переходит в другой режим, и теперь светодиоды мигают только в случае изменения положения платы, обрабатывая информацию с гироскопа, расположенного на ней. Еще одно нажатие на кнопку User переводит плату в третий режим. В этом режиме светодиоды мигают только в случае если плата находится в вертикальном положении. Повторное нажатие кнопки User переводит отладочную плату снова в первый режим, и далее – по циклу.

Во вкладке Program Memory на компьютере мы видим чистый лист памяти. Вся память заполнена шестнадцатеричными значениями FF. То есть чистая Flash-память микроконтроллера заполнена по умолчанию логическими единицами. Справа в окне перечислены те самые 128 страниц памяти, называемые здесь активными секторами. Если снять галочку с какого-то сектора, то его содержимое не будет затронуто при выполнении операций чтения, стирания или записи.

Давайте посмотрим, что находится во Flash-памяти микроконтроллера. Считываем память программ микроконтроллера отладочной платы. Нажимаем Read->Active Sectors. Выполняется операция чтения, и по вкладке Program Memory отображаются значения, соответствующие загруженному коду программы. Давайте сохраним этот код, чтобы в случае необходимости можно было вернуть отладочную плату в исходное состояние. Нажимаем File->Save и выбираем имя файла. По умолчанию файлы кода программы имеют расширение hex.

После операции чтения плата перестала работать, но при повторном подключении ее работа возобновляется.

 

Стирание Flash-памяти микроконтроллера

Теперь сотрем память программ. Выбираем Erase -> Active Sectors. Нам выдается сообщение, что память программ успешно очищена. И теперь уже как ни переподключай плату, как ни нажимай на кнопку – никаких светодиодов мы не увидим. Попробуем снова считать память программ. И мы видим, что память микроконтроллера пустая, в ней нет никакого кода.

 

Запись Flash-памяти микроконтроллера

Давайте попробуем загрузить в отладочную плату код, полученный для пустого проекта на прошлом уроке. Заходим в папку проекта, выбираем Embedded Workbench ARM -> Имя проекта -> Exe и находим сгенерированный hex-файл.
Загружаем файл в отладочную плату, предварительно стерев память. Но программа никак себя не проявляет – проект-то пустой.

Вернем отладочную плату в исходное состояние. Откроем сохраненный файл исходной прошивки и загрузим его в плату. Стираем память платы и загружаем в нее код программы.

Скачать архив исходного кода платы STM32F3Discovery (.hex-файл в .zip-архиве)

Программа успешно загружена в память, и плата вернулась в исходное состояние.

Визуальный программатор удобно использовать когда требуется тиражировать устройства, то есть загружать код программы при выпуске партии одинаковых изделий.
В дальнейшем я покажу, как загружать код программы непосредственно из среды разработки IAR.

3 комментария к “Flash-память”

  1. Огромное спасибо за уроки.
    У меня к сожалению есть только плата STM32 F407 VG. Надеюсь что это не будет преградой для понимания работы микроконтролеров.
    Хотел уточнить OTP area для чего используется?

    PS как тут можно вставлять в текст скриншоты?

    1. Елена Вставская

      OTP — это однократно программируемый блок памяти (One-Time Programming), который, согласно описанию, используется для постоянного хранения каких-либо конфигурационных данных.
      Но, к сожалению, реального примера необходимости этого блока привести пока не могу.

      1. Спасибо. Возможно, это можно использовать либо для визитки, либо для «жучка».

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Прокрутить вверх