Jump to content

    
Sign in to follow this  
MihailS

Принцип работы с flash на C28xxx

Recommended Posts

Разбираюсь с новым для себя зверьком и по ходу возникли вопросы.

Прошу прокомментировать знатоков, правильно ли я понимаю некоторые вопросы.

 

1. После сброса проца запускается бутлоадер и в зависимости от состояния гпио84-87 проц берет команды из флеш/SCI/...

 

2. Не могу понять как производится стирание/чтение/запись данных во флеш из программы. Такое впечатление что только с помощю API от TI. Что за варварский способ, я такого не встречал. В любом случае у поца должны быть команды для работы с флеш.

Я пробовал модифицировать экземпл: разместил переменную в секции по адресу 0х30000, в дебугере гляжу, там она. Далее идет команда присвоения значения - а Хрен вам, как были ff`ы так и остались. Из дебугера могу озушке присваивать данные, а в области флеш дебугер пишет что memory protected, какой-то флаг защиты стоит......

 

 

Пожалуйста поясните концепцию, а то после C51, AVR, MSP430 я пока в идеологию не могу въехать.

Share this post


Link to post
Share on other sites

1. Да.

 

2. Да, только API от TI. Ну или тулзы - CCS Flash programming plugin, SDFlash, SAUFlash, BHFlashBurn. У проца конечно есть периферийный модуль, занимающийся программированием флеши, но документации на него нет. Скажу больше, он простой, и все длительности импульсов, реально шьющих/стирающих флеш, там формируются программными задержками, поэтому и недокументировано, так как неумелое обращение туда может стать причиной гибели микросхемы. А API техасское вполне доступное, маленькое по размеру и простое.

 

Что касается защиты - после подключения дебаггера защищенные области памяти по умолчанию защищены. Для получения доступа надо разблокировать CSM, как - читайте документацию на него (code security module), или просто смотрите ф-цию Unlock_CSM в GEL-файлах, поставляемых в композере. Там все просто - сначала прочитать содержимое ячеек где расположен пароль во флеше, затем записать пароль в регистры KEY. По дефолту он 0xFFFF. После этой "магии" защита памяти снимается, и можно лазить через JTAG где душе угодно.

Edited by SAURIS GmbH

Share this post


Link to post
Share on other sites

Тогда есть вопрос по пункту 1.

Бутлоадер можно заставить исполнять код из SARAM.

Собственно откуда там код, это`ж ведь ОЗУ, после ресета кода там быть недолжно.

 

Share this post


Link to post
Share on other sites
Бутлоадер можно заставить исполнять код из SARAM.

Собственно откуда там код, это`ж ведь ОЗУ, после ресета кода там быть недолжно.

Это после включения питания там кода быть не должно. А после резета может быть вполне, резет не всегда бывает толкьо после включения.

Share this post


Link to post
Share on other sites
Вопрос не понятен. Любым удобным Вам способом занесения данных в память.

 

Я пока не до конца понимаю процесс размещения программы/данных в памяти.

Попробую изложить то, как я это понимаю. Пример стандартной/простой реализации.

После включения запускается BOOTLOADER, делает свои дела (SPRU963). Согласно GPIO84-87 (Jump to Flash) происходит переход на main(). В программе ENPIE=1 но эта область пуста. Очевидно, что в программе нужно скопировать эту таблицу из flash и все ОК.

НО! Я пока не нашел концов. В экземплах имеется фуцнкция InitPieVectTable(void) (DSP2833x_PieVect.c) в ней и реализовано копирование:

....

void InitPieVectTable(void)

{

int16 i;

Uint32 *Source = (void *) &PieVectTableInit;

Uint32 *Dest = (void *) &PieVectTable;

 

EALLOW;

for(i=0; i < 128; i++)

*Dest++ = *Source++;

EDIS;

 

// Enable the PIE Vector Table

PieCtrlRegs.PIECTRL.bit.ENPIE = 1;

 

}

....

Очевидно линковщик формирует данную таблицу, но где задается ее размещение и вообще описание этогопроцесса, я пока не нашел.

Я пока в принципе не могу понять что и по каким адресам пишется.

Мне интересен процесс записи программы во флеш - не могу найти описание этого процесса.

Еще один момент: CCS настраивается для создания *.out файла программы для debug и release.

Как я понимаю в дебуг прошивке что-то добавляется в код собственно для реализации процесса дебугинга. (Что добавляется и куда пинется в контроллере?)

Если я возьму релиз прошивку(например экземпл) и прошъю, оно должно работать?

 

Буду благодарен за помощь.

 

 

Share this post


Link to post
Share on other sites

Размещение и адреса секций указываются в .cmd файле для линкера. Там же можно указать для секций, копируемых в память, и содержащих исполняемый код, load и run - то есть расположить физически в одном месте (откуда будут копировать), а выполняться она будет из другого места (куда скопируют).

 

в debug прошивке в сам код ничего не добавляется. Обычно только уменьшается степень оптимизации, либо она отключается вообще, чтобы отладчик в любое время знал, где хранится текущее значение всех переменных. А вот в .out файл добавляется куча информации о символах. Однако они, естественно, не грузятся ни во флеш, ни в процессор вообще, их считывает отладчик прямо из файла. Короче тут все так же, как и при напиcании программ, например, для windows.

Edited by SAURIS GmbH

Share this post


Link to post
Share on other sites
...Там же можно указать для секций, копируемых в память, и содержащих исполняемый код, load и run - то есть расположить физически в одном месте (откуда будут копировать), а выполняться она будет из другого места (куда скопируют)....

 

Да, по поводу копирования.

Как я понял есть два способа работы программы:

1. - Брать код напрямую из флеш. (28335_RAM_lnk.cmd)

2. - Копировать код из флеш в ОЗУ и исполнять его от туда. (F28335.cmd)

 

Я правильно понимаю?

 

А вот описание структуры .cmd файла где можно поглядеть?

Share this post


Link to post
Share on other sites

Обычно большинство кода выполняется из флеш, и только небольшая его часть может копироваться в ОЗУ. Про примеры cmd файлов ничего не скажу, я их не видел. Описание cmd файлов в документации к линкеру, его быстрее самому написать, чем ковырять что-то готовое.

Edited by SAURIS GmbH

Share this post


Link to post
Share on other sites

А что вы имеете ввиду под Flash API от TI? Эмуляцию EEPROM в области одного сектора флэш памяти?

Для загрузки кода во флэш-память, вам нужно два cmd файла в каталоге проекта - DSP280x_Headers_nonBIOS.cmd и F28335.cmd. Cmd-файл с именем RAM удалите, он указывает линкеру, что код нужно загружать в область озу, при передергивании питания данные теряются.

Для примера выложу свой тренировочный проект под F2808 в CCS4, посмотрите. В проекте нет обращений на файлы запутанных примеров "DSP280x_Examples.h", все данные используемые при компиляции находятся в проекте, ничего лишнего, то есть все предельно прозрачно, как на авр :) Начиная с ассемблерного кода по адресу резета при переходе от Jump to Flash (111), создание векторов прерываний и заканчивая распределением памяти в cmd-файле. Проект компилится и работает без ошибок и зависаний.

Control.rar

Share this post


Link to post
Share on other sites

Да, точно, это оно и есть, EEPROM через неё реализуется. Кстати интересный момент, в доках к ней написано, что при обращении к функциям API автоматически отключаются глобальное прерывание и сторожевой таймер, хотя реально это не так, пока принудительно командой это не сделал, перед вызовом функций API, редко, но были зависания.

Share this post


Link to post
Share on other sites
Cmd-файл с именем RAM удалите, он указывает линкеру, что код нужно загружать в область озу, при передергивании питания данные теряются.

 

Да, действительно при замене файла линкера программа после ресета начала работать заново.

СПАСИБО!

А где содержится подробная информация по структуре *.cmd файла?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this