Работа с параллельной флеш-памятью
Данный документ описывает подготовку и запись во флеш-память отладочного модуля NVCom-02TEM-3U проекта, работающего из параллельной флеш-памяти.
Рассмотрены следующие случаи:
- проект без ОС, работающий непосредственно из флеш-памяти;
- проект, работающий из ОЗУ и загружаемый с помощью загрузчика ELFLOADER.
Документ применим ко всем процессорам серии «Мультикор», основанных на базе CPU-ядра RISCore32F (MIPS32) и отладочным модулям для них.
Основные затруднения
При подготовке проекта, стартующего из флеш-памяти, при подаче питания на процессор (а не загружаемого в ОЗУ проекта по JTAG) актуальны следующие задачи:
- осуществить запись во флеш-память;
- обеспечить расположение данных в ОЗУ, а не во флеш-памяти.
Обеспечение расположения в ОЗУ изменяемых данных, стека и переменных необходимо, так как в ПЗУ (флеш-памяти) невозможна перезапись данных при работе программы.
Запись программы во флеш-память
Основное затруднение в данном вопросе – многообразие выпускаемых типов флеш-памяти. АО НПЦ «ЭЛВИС» выпускает и поддерживает программные средства, обеспечивающие работу набора микросхем параллельной флеш-памяти, подключаемой к порту внешней памяти общего назначения процессоров серии «Мультикор».
Исходные коды программы MCPROG доступны по ссылке. Перечень поддерживаемых типов флеш-памяти приведен в документации на данную программу. Обеспечить поддержку всех типов выпускаемых микросхем флеш-памяти не представляется возможным. При необходимости пользователь может самостоятельно добавить поддержку флеш-памяти посредством изменения исходных кодов программы MCPROG.
В случае использования флеш-памяти, уже поддерживаемой в доступных программных средствах, данная проблема может считаться решенной. Если же применяется флеш-память, не поддерживаемая в доступных программных средствах, данная задача решается написанием программы для процессора «Мультикор». Программа в этом случае должна за гружаться в ОЗУ процессора по JTAG, затем, посредством отладчика, в ОЗУ процессора должны загружаться данные для записи во флеш-память, после чего загруженная программа должна осуществить запись во флеш.
Данный документ рассматривает случай, когда используемая флеш-память поддержана в программе MCPROG.
Расположение данных в ОЗУ
В случае, когда необходима работа программы непосредственно из флеш-памяти (то есть, исполняемый код располагается в адресах ПЗУ), проблема заключается в том, что используемые данные во время исполнения программы должны располагаться в ОЗУ. При этом данные, которые к моменту начала исполнения программы должны уже иметь определенные значения, должны быть записаны во флеш-память и перед выполнением функциональной части программы должны быть скопированы в ОЗУ.
На момент подготовки документа для проектов без операционной системы в средах разработки MCStudio 3M и MCStudio 4 такого шаблона проекта не предусмотрено. Имею щиеся шаблоны проектов предполагают расположение секций данных в одной и той же области, без их копирования. Для реализации проекта, исполняемого из флеш-памяти, потребуется доработка проекта, созданного по существующему шаблону. Пример такой подготовки приведен в соответствующем разделе на примере MCStudio 4.
Проекты, исполняемые из флеш-памяти
Для работы понадобятся:
- Среда разработки MC Studio 4 NVCom-02T ver.19.16 или выше.
- Утилита для работы с энергонезависимой памятью MCPROG.
- Эмулятор MC-USB-JTAG.
Проект без ОС на ассемблере
Проект, написанный на ассемблере, является наиболее простым для подготовки, так как в данном случае программист сам определяет все области расположения кода, переменных, стека.
В частности, практически без изменений может быть подготовлен к исполнению из флеш-памяти проект MFBSP_GPIO_assembler, входящего в состав MCStudio 4. Для этого необходимо в проекте:
-
Изменить адреса расположения секций. По умолчанию данный пример собирается в адресах 0xB800_1000 (внутренняя память процессора, CRAM). Необходимо переназначить адреса на 0xBFC0_0000 (с данного адреса процессор начинает исполнять программу после подачи питания и снятия сигнала nRST).
По умолчанию:
Рисунок 1. Адреса расположения секций до переназначения После изменения:
Рисунок 2. Адреса расположения секций после переназначения -
Добавить в цепочку сборки подготовку файла в формате для записи средствами MCPROG. По умолчанию MCStudio 4 собирает в конечном итоге файл в формате ELF, в формате которого предусмотрено указание адресов расположения секций программы. Чтобы MCPROG мог записать секции по указанным адресам, необходимо преобразовать файл в формате ELF либо в формат BIN (по сути, это образ участка памяти), либо в формат SREC (данный формат также содержит информацию об адресах расположения записываемых данных, но в более простом виде).
Для такого преобразования используется утилита mipsel-elf32-objcopy из комплекта поставки MCStudio 4.
Преобразование .elf файла в формат, подходящий для прошивки во флеш
Необходимо добавить вызов утилиты mipsel-elf32-objcopy в шаги, выполняемые после сборки проекта
Project Settings → C/C++ Build → Settings. В поле Post-build steps ввести строку:
mipsel-elf32-objcopy -O srec MFBSP_GPIO_assembler.elf MFBSP_GPIO_assembler.srec
Преобразование в формат BIN:

Преобразование в формат SREC:

После данных доработок необходимо запустить сборку проекта. После сборки в директории MultiCore_Configuration_Debug или MultiCore_Configuration_Release (в зависимости от того, какая конфигурация сборки активна) появится файл в формате BIN или SREC (в зависимости от выбранного формата).
Данный файл необходимо записать во флеш-память. Для этого надо:
-
Скопировать файл в директорию с утилитой MCPROG (данный шаг необязателен, но иначе при вызове MCPROG необходимо указывать полный путь к записываемому файлу).
-
Убедиться, что в файле MCPROG.CONF выбрана конфигурация, соответствующая используемому отладочному модулю (для отладочного модуля NVCom-02TEM-3U в данном файле предусмотрена конфигурация [nvcom-02tem-3u]).
-
Убедиться, что эмулятор JTAG подключен к ПК и к плате с процессором серии «Мультикор», а также, что на плату подано питание.
-
Убедиться, что на ПК не запущены другие сессии отладки с использованием данного эмулятора JTAG.
-
Открыть командную строку и перейти в директорию с программой MCPROG.
-
Запустить MCPROG из командной строки. Необходимыми параметрами в случае записи файла SREC является только имя файла. В случае, если записывается файл BIN, необходимо также указать адрес, начиная с которого его необходимо записывать.
Кроме того, программа MCPROG имеет ключи запуска, указывающие параметры стирания флеш-памяти. Это ключи, начинающиеся с «-e x» (где x – число от 0 до 2). Если при запуске не указано ключа «-e x», MCPROG по умолчанию производит стирание всех данных из микросхемы флеш-памяти.
Ключ «-e 0» говорит программе MCPROG о том, что стирания данных во флеш-памяти проводить не требуется совсем. В этом случае запись может не пройти, если во флеш-память уже были записаны -то данные – как правило, флеш-память требует стирания уже записанных данных перед записью новых.
Ключ «-e 1» аналогичен запуску без ключа «-e x» - производится стирание всей доступной памяти микросхемы флеш.
Ключ «-e 2» приводит к стиранию только тех секторов флеш-памяти, которые будут задействованы для записи данных. Важно в этом случае учитывать, что если производится запись двух или более файлов в области, имеющие один или более общих секторов флеш-памяти, данные от первого файла в этом секторе будут затерты при записи второго и последующих файлов.
В рассматриваемом же случае производится запись только одного файла, поэтому используется ключ «-e 2».
С учетом вышесказанного, для записи файла BIN необходимо использовать строку запуска:
mcprog -e 2 MFBSP_GPIO_assembler.bin 0xBFC00000