Jump to content

    

BF537 загрузка из параллельной флеши

Доброго дня. Имею плату на основе BF537. Режим загрузки стоит - 00 Execute from 16-bit external memory (bypass boot ROM), изменить режим загрузки нельзя. Сейчас пользуюсь ранее кем-то собранным u-boot. U-boot лежит по 0x20000000 адресу нулевой страницы и грузит мой ldr с первой страницы.  Как прошить флеш я знаю. Решил создать свой загрузчик, который будет просто передавать управление стандартному загрузчику блекфина. 

	asm("P0.H = HI(0xEF000008 );");	
	asm("P0.L = LO(0xEF000008 ) ;");			
	asm("R7.H = HI(0x20060000) ; ");       
	asm("R7.L = LO(0x20060000) ;");
	asm("JUMP (P0);");

 Вопрос как собрать проект чтобы он начал выполняться из флеш памяти? 

Share this post


Link to post
Share on other sites
13 часов назад, Mr_Progger сказал:

Вопрос как собрать проект чтобы он начал выполняться из флеш памяти? 

Начальный адрес работы программы задаётся в линкерном скрипте.

Share this post


Link to post
Share on other sites
23 часа назад, dxp сказал:

Начальный адрес работы программы задаётся в линкерном скрипте.

Добрый день. В настройках проекта (LDF Settings) я указал My program will start running from 0x20000000.

В Load Boot mode - Flash/PROM, Intel hex, 16-bit

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

MyLoader2000000.zip

Edited by Mr_Progger
Добавил архив с проектом

Share this post


Link to post
Share on other sites

Процессор не начинает работу из флешь памяти? Или из неё читаются не те инструкции? Вы через эмулятор можете проследить, откуда он стартует?

Share this post


Link to post
Share on other sites
Только что, dxp сказал:

Процессор не начинает работу из флешь памяти? Или из неё читаются не те инструкции? Вы через эмулятор можете проследить, откуда он стартует?

Я не могу посмотреть что происходит, я выключаю/включаю питание, jtag теряет свзяь с платой. Или как-то можно отладить загрузку с эмулятором?  

Share this post


Link to post
Share on other sites

а вы сделайте ресет в отладчике - он должен встать стартовый адрес, по идее.

Share this post


Link to post
Share on other sites
4 минуты назад, dxp сказал:

а вы сделайте ресет в отладчике - он должен встать стартовый адрес, по идее.

Спасибо попробую. Мне кажется для того чтобы моя программа стартовала из флеша нужно как-то отредактировать LDF.

Share this post


Link to post
Share on other sites

Насколько помню, в фине всегда сначала стартует жёстко зашитый загрузчик, который производит анализ бутстрапных пинов, выбирает источник загрузки и производит собственно загрузку образа в память для выполнения. Как раз образ ldr и нужен для того, чтобы этот загрузчик правильно загрузил все секции в память (обнулил zero секции, скопировал инициализаторы в секции с инициализированными данными, скопировал код программы в память программ и т.д.). Но у вас ситуация немного другая - вам этот образ с секциями не нужен, т.к. вы хотите выполнять сразу программу из флеши. Поэтому во флешь нужно залить прямо сразу исполняемый код программы, а не образ (ldr) - если там будет образ, то его исполнение конечно закончится неудачей. Возможно, это у вас и происходит.

 

И ещё нужно иметь в виду, что если вы сразу начинаете выполнять программу, то всю эту подготовительную работу (обнуление/инициализация переменных и т.д.) ваша программа должна уже будет делать сама, т.к. вшитый загрузчик это не сделал, а просто передал управление на выполнение из внешней памяти. Выполнение из внешней памяти вместо загрузки образа, имхо, не лучший вариант, он медленный и вышеуказанные накладные возникают. Я его ни разу не пробовал, поэтому детальнее подсказать не могу. 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this