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

 
 
> 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



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

 


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


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