реклама на сайте
подробности

 
 
> SAMBA (Загрузка и выполнение в ОЗУ для SAM7S), Как загружать и стартовать проект из самбы в ОЗУ без шаманства test
kumle
сообщение Oct 15 2010, 22:34
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 149
Регистрация: 15-12-09
Из: Москва
Пользователь №: 54 280



Всем привет. недавно занялся ARM и сразу столкнулся с трудностью записи программы в оперативную память AT91SAM7S256 с помощью САМБЫ. На мой взгляд это очень хорошее решение так как не требует перезаписи самбы во флеш (а как известно для этого кристалла сделать это можно всего 100 раз)
Три дня побродив по просторам интернета я так и не нашел вразумительного ответа на мой вопрос и о чудо, после набора критической массы (прочитанного и собранного по крупицам материала) мне удалось наконец-то это сделать.

Итак имеем:
IAR 5.5 (линкер ilink)
Samba 2.10
Плата OLIMEX SAM7P256 с контроллером AT91SAM7S256

-Из папки примеров IAR берем basic_adc_project для платы AT91SAM7-EK (так как моей там не оказалось)
-Загружаем его в IAR
-Так как моей платы нет в списке, то и проект basic_adc_project мне особо не нужен,
поэтому я вставил туда простейшее моргание светодиодом в порту pa18
-вот кусок файла main.c с моими добавленными строками: //sasha
....
....
#define BIT18 0x00040000 //sasha

AT91PS_PIO m_pPio = AT91C_BASE_PIOA; //sasha

void Delay (unsigned long a) { while (--a!=0); } //sasha


//------------------------------------------------------------------------------
// Global functions
//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
/// Performs measurements on ADC channel 0 and displays the result on the DBGU.
//------------------------------------------------------------------------------
int main(void)
{
unsigned int id_channel, advalue;
char key;



m_pPio->PIO_SODR = BIT18; // Set PA18 to HIGH -> led off //sasha
m_pPio->PIO_OER = BIT18; // Configure PA8 as output //sasha

unsigned long i; //sasha

for(i = 0; i < 100000; i++) //sasha

{ //sasha
m_pPio->PIO_CODR = BIT18; //sasha
Delay(1000000); //sasha
m_pPio->PIO_SODR = BIT18; //sasha
Delay(1000000); //sasha
} //sasha



TRACE_CONFIGURE(DBGU_STANDARD, 115200, BOARD_MCK);
printf("-- Basic ADC Project %s --\n\r", SOFTPACK_VERSION);
printf("-- %s\n\r", BOARD_NAME);
printf("-- Compiled: %s %s --\n\r", __DATE__, __TIME__);
....
....

-Выбираем в окне workspace вариант at91sam7s-ek - at91sam7s256_sram
-В опциях линкера смотрим поле Entry symbol. Он равен 'resetHandler'. Запоминаем это
-Далее открываем файл скриптов линкера sram.icf и правим строчку
define symbol __ICFEDIT_region_RAM_start__ = 0x200000;
на строчку
define symbol __ICFEDIT_region_RAM_start__ = 0x202000;
-Это нужно потому что samba занимает не только флеш но и часть ОЗУ под свои нужды (переменные стек итп)
-Затем в настройках линкера ставим опцию для генерации файла xxx.map
-Делаем Make
-Открываем файл xxx.map и ищем строчку с адресом точки входа 'resetHandler'
кусок файла xxx.map
printf 0x002053e4 0x38 Code Gb printf.o [3]
putchar 0x002052cc 0x8 Code Gb trace.o [1]
resetHandler 0x002051b0 Code Gb board_cstartup_iar.o [1]
resetVector 0x00202000 Code Gb board_cstartup_iar.o [1]
strchr 0x00205570 Code Gb strchr.o [4]
strlen 0x0020515c Code Gb strlen.o [4]

-Видим что адрес входа равен 0x002051b0
-Загружаем самбу во флеш (комбинация с кнопкой tst и 10-и секундным ожиданием итп)
-Вызываем приложение Sam-ba boot assistant 2.10
-Выбираем закладку SRAM
-Указываем адрес начала 0x202000
-Выбираем файл xxx_sram.bin
-Делаем Send file
-Делаем Compare (должно совпадать)
-Внизу в окошке для команд пишем : go 0x002051b0 (это наш адрес входа)
-Наша программа должна сразу начать работать (моргает светодиод)!!!

-Чтоб повторно загрузить программу надо просто передернуть питание и перезагрузить самбу (на компе)
-Подозреваю, что есть какая то возможность проще вернуть управление к самбе но пока не изучал этот вопрос.

Спасибо за внимание, надеюсь это кому нибудь пригодиться.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
kumle
сообщение Sep 19 2011, 06:24
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 149
Регистрация: 15-12-09
Из: Москва
Пользователь №: 54 280



Вообще контроллеры SAM7S и SAM7X отличаются, может область RAM другая ?
Я вообще грузил в RAM только из-за того что ограничение по перезаписи самбы в моем контроллере.
Сейчас вообще wiggler собрал и работаю через jtag
Go to the top of the page
 
+Quote Post
Alexey K
сообщение Sep 19 2011, 11:08
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 14-07-11
Пользователь №: 66 220



Думаю неправильные параметры линкеру задаю. Поскольку тестовый проект для Keil собраля и похожим способом запустился. Придется купить PCI-LPT и спаять wiggller потому как задолбало передергивать питание.

Я с процессорами до этого не имел дел, больше vhdl и плис поэтому еще долго курить даташиты))

Сообщение отредактировал Alexey K - Sep 19 2011, 11:10
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 13:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01383 секунд с 7
ELECTRONIX ©2004-2016