BlackFin Booter

Как сделать загрузочный файл

Файл, предназначенный для загрузки через SPI в режиме подчиненного, делается особым образом. В VDSP4.5 это делается так:

  1. Вызвать окно настройки опций проекта Project->Project Options (Alt+F7).
  2. На вкладке Project в группе Target установить селектор Type в положение Loader File.
  3. Затем выбрать вкладку Project->Load->Options и выбрать Boot Mode SPI Slave, Boot Format установить binary или ASCII, в селекторе Programmable flag выбрать необходимый вывод для сигнала HWAIT , можно выбрать любой кроме PF0 который используется как сигнал SPISS. Затем наступает важный момент – необходимо заполнить поле Initialization file справа от этого поля есть кнопка, с помощью которой, можно выбрать DXE файл для инициализации. Например, "..\VisualDSP 4.5\Blackfin\ldr\init_code\ADSP-BF533 INIT CODE\ADSP-BF533 INIT CODE.dxe" или ваш собственный файл инициализации.
  4. Нажать кнопку ОК, чтобы сохранить выбранные опции проекта.
  5. Перекомпилировать проект.

На выходе получится LDR файл, которым уже можно загружать Blackfin.
Теперь несколько слов о файле инициализации. Для того чтобы получить DXE файл инициализации необходимо создать новый проект или воспользоваться файлами инициализации поставляемыми вместе с VDSP4.5. Файл инициализации это программа, которая выполняется до начала загрузки основного кода. В инициализации можно настроить необходимую периферию, например контроллер SDRAM, можно изменить константы PLL, изменить скорость SPI и т.д.
После снятия сигнала RESET у Blackfin-а, стартует BOOT ROM, которая, в зависимости от уровней на выводах BMODE, переходит в необходимый режим загрузки, в нашем случае SPI Slave. При этом ДСП ожидает получения данных по интерфейсу SPI. После получения инициализационного кода, загрузочное ПЗУ запускает его на выполнение командой CALL, поэтому файл инициализации должен заканчиваться командой RTS.

Пример кода инициализации ---------------------------------------------
#include <defBF532.h>
.section program;
/********************************************************************/
[--SP] = ASTAT; // Save registers onto Stack
[--SP] = RETS;
[--SP] = (R7:0);
[--SP] = (P5:0);
/********************************************************************/
/*******Init Code Section********************************************/
/*******SDRAM Setup************/
Setup_SDRAM:
P0.L = lo(EBIU_SDRRC);
P0.H = hi(EBIU_SDRRC); // SDRAM Refresh Rate Control Register
R0 = 0x074A(Z);
W[P0] = R0;
SSYNC;
P0.L = lo(EBIU_SDBCTL);
P0.H = hi(EBIU_SDBCTL); // SDRAM Memory Bank Control Register
R0 = 0x0001(Z);
W[P0] = R0;
SSYNC;
P0.L = lo(EBIU_SDGCTL);
P0.H = hi(EBIU_SDGCTL); // SDRAM Memory Global Control Register
R0.H = 0x0091;
R0.L = 0x998D;
[P0] = R0;
SSYNC;
/********************************************************************/
(P5:0) = [SP++]; // Restore registers from Stack
(R7:0) = [SP++];
RETS = [SP++];
ASTAT = [SP++];
/********************************************************************/
RTS;

---------------- Конец примера

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

 

Подключение к плате ADSP-BF533 EZ-KIT Lite и тестирование.

Тестирование проводилось на компьютере со следующей конфигурацией:
Процессор: Атлон 2х64 4000+
ОЗУ: 1024Мб

В качестве аппаратной части Blackfin Booter-а использовалась плата UM245 фирмы FTDI, при этом требуется установить только один внешний компонент, резистор R1(см. Рисунок 1).

Подключение производилось к плате ADSP-BF533 EZ-KIT Lite. Шлейф от аппаратной части Blackfin Booter-а подключался к разъему Р6 SPI.

Рисунок 4.

Подключение осуществляется в следующем порядке:

Х2 Р6 Сигнал
1 1 MOSI
2 3 CS
3 5 CLK
4 7 GND
5 9 HWAIT

 

ПредпросмотрAttachmentSize
setup.exe1.17 МБ

Комментарии

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

После добавления инит кода

После добавления инит кода программа перестает компилироваться. Пишет, что нехватает секции в памяти.?? Непонятно. Проблема присутствует и в VDSP4.5, и в VDSP5.0. Приведенный инит код даже не компеллируется. Добавить этот код просто нереально, а без него загруженная в проц программа не запускается. Она должна без него запускаться, но инит код, зашитый в проце глючный и надо подставлять свой (так говорят про Шарки). Ответный флаг всегда возникает на PF8, в VDSP 4.5 выбрать его расположение нельзя. Похоже автор рекламирует свою платку.

Какой-то на редкость не

Какой-то на редкость не информативный комментарий, много слов, но никакой конкретики, чтобы можно было понять в чем проблема и попробовать помочь. Не указан ни тип процессора для которого Вы пытаетесь применить данный код, ни ошибки компиляции инит кода, ни аппаратная конфигурация системы для которой производится попытка использовать код инициализации.

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

И где Вы нашли упоминание какой-либо платы которую можно рекламировать как свою?

Ответили мне Атмеловцы. В

Ответили мне Атмеловцы. В общем, инит код добавлять обязательно надо, только когда программа грузиться во внешнюю память. Если хватает кеша, то он не обязателен, хоть и полезен. Не компиллировался код, тк в примере он для BF533, а  у меня программа под 532. Оказывается, у них где то разная адресация.

Прошивка должна быть только в Бинари. Для отладки советую отправлять первые 10 байт заголовка - в ответ вы должны получить установленный в ноль, указанный вами флаг. Подтяжку к земле на этот флаг, как нарисовано в ЕЕ240 ставить нельзя. Вы не увидите первой реакции ДСПшки. Подтяжку надо к "1" (как на их временных диаграммах).

В опциях выбирать СПиАй слейв не обязательно. У вас просто тогда флага не будет. Если грузите медленно или без инит кода, то и на флаг можно не смотреть. Так что ЛДРка из обычной флешки вполне может быть загружена в этом режиме.

У меня контроллер загоняет 128КБ за 1,8с без учета флага. Сама же программа занимает 10КБ и запускается еще до того, как контроллер выплюнет все эти данные. Ноль блок есть, но он успевает прописаться, а вот с инит кодом надо будет еще на флаг смотреть.

Насчет pull-down странно,

Насчет pull-down странно, может они какую-то новую ревизию процессора выпустили? У меня без pull-down резистора на HWAIT ничего не работало, правда я сперва туда вообще никакого резистора не поставил, при этом сигнал на этой линии всегда имел высокий уровень.

Если вы грузите процессор из флешки, то конечно вам надо использовать режим SPI-master, но целью данного проекта было протестировать загрузку BlackFin от хост-процессора и попутно обеспечить механизм отладочной загрузки без необходимости перешивать флешь-память или программу в хост-процессоре.

Кстати, не Атмеловцы, а Аналоговцы :).

Да, Аналоговцы. Флаг, после

Да, Аналоговцы. Флаг, после того как ДСП скушает заголовок, конфигурируется как выход и выдает активную "1" либо активный "0". 

ДСП гружу из АРМа. У АРМа быстрая флешка и АРМ определяется как ЮСБ драйв. Просто копирую на ЮСБ драйв прошивку ДСП (если надо обновить) и прошивку АРМа (если надо обновить). Подаю Ресет и АРМ запускается по новой прошивке, удерживая Ресет ДСПшке. Потом заливает в ДСПшку ее прошивку из своей флешки. Такой процесс старта занимает 2с. А копирование прошивак на ЮСБ драйв и того меньше. :)

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

Содержание этого поля является приватным и не предназначено к показу.
  • Syntax highlight code surrounded by the {syntaxhighlighter SPEC}...{/syntaxhighlighter} tags, where SPEC is a Syntaxhighlighter options string or "class="OPTIONS" title="the title".
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <p> <span> <s> <strike> <div> <h1> <h2> <h3> <h4> <h5> <h6> <img> <map> <area> <hr> <br> <br /> <ul> <ol> <li> <dl> <dt> <dd> <table> <caption> <tbody> <tr> <td> <em> <b> <u> <i> <strong> <del> <ins> <sub> <sup> <quote> <blockquote> <pre> <address> <code> <cite> <embed> <object> <param> <strike>
  • Использовать как разделитель страниц.

Подробнее о форматировании