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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Монитор SAM-BA, Вредители навредили?
DpInRock
сообщение Mar 25 2009, 16:44
Сообщение #1


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Спаял наконец AT9SAM9261 плату.
И обнаружил следущую вещь.
1. Система команд SAM-BA в даташите неполная. Команда G (jump to address) может иметь параметр, который отвечает за REMAP.
Т.е. делать ремап или не делать.
Пример.
G00000# - делает джамп без ремапа, т.е. моментально вылазит BootRom/
G00000,1# - делает ремап. Программа стартует, загрузчик вырубается.
2. В Самбе уже под виндами в юзергайде неправильно описали команду send_file. Почему-то не указали параметр, который также отвечает за ремап. Т.е. сама программа подсказывает, что одного параметра не хватает. И этот параметр зовется remap.

Вопрос. Кто с этим сталкивался. Чего-нибудь еще там забыли сказать важного?
Или это я глючу после пайки деталей 0204?


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 25 2009, 21:08
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(DpInRock @ Mar 25 2009, 19:44) *
Чего-нибудь еще там забыли сказать важного?

Весьма вероятно. SAM-BA - программа минимальной работоспособности, поэтому лучше не искать новые сюрпризы, а быстрее переходить на свое ПО.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Mar 25 2009, 22:48
Сообщение #3


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Так бог с ней виндовской самбой. Тут странности с прцессорным монитором, который начального загрузчика изображает.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 25 2009, 22:54
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Ну, и его туда же: dataflash->свой загрузчик->...
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Mar 26 2009, 13:34
Сообщение #5


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



AAARRR, вы умный. Как поступить.
Компилятор п адресу сброса ставит команду перехода LDR PC. Скажем, по адресу 244. А он находится, еще в области ПЗУ. Команда G монитора как-то не хочет делать ремап перед джампом. НЕ желает.
Программа оттранслированная на неремапленные адреса - работает.

Или команда G делает ремап перед джампом, но я что-то не так делаю?


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 26 2009, 14:30
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Что-то я не очень понимаю ваши затруднения. Если у Вас внешняя флеш, то зачем команда G? Просто загружаетесь с нее при BMS=0. Или программа загружается во внутреннюю SRAM?
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Mar 26 2009, 15:00
Сообщение #7


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Программа грузится в внутреннюю SRAM. Флэши пока нет. Чтобы что-то во флэш записаить - надо все равно какую-то программу грузить. Либо отдельным программатором. А это неудбно очень.

Так вот. Загрузить я могу с адреса 30 0000. Это как раз SRAM. Но проограмма транслируется на адреса 0-26000. Т.е на уже ремапленные.
А первой командой компилятор ставит загрузки PC из таблицы, где указан адрес 224. Т.е. на уже ремапленный. А кто проц ремапить будет? Без ремапа проц идет по адресу 224, а там его поджидает ROM. И привет.

Вот собираюсь узнать как разместить процедуру по абсолютному адресу. Она будет ремапить и джампить на 0.
Т.е. загрузка по 30 0000. Далее выплнение команды Gxxxxxx - где xxxxx - адрес хитрой процедуры. Ну а дале - будет все нормально. Проц ремапится и начнет выполнятся начальный старт.
Так удобн отладку делать. Сразу в память. Эта же программа вполне будет работать и из флэша. Ибо Атмел уверяет, что при загрузке из флэша загрузчик ремап делает.

Программа грузится в внутреннюю SRAM. Флэши пока нет. Чтобы что-то во флэш записаить - надо все равно какую-то программу грузить. Либо отдельным программатором. А это неудбно очень.

Так вот. Загрузить я могу с адреса 30 0000. Это как раз SRAM. Но проограмма транслируется на адреса 0-26000. Т.е на уже ремапленные.
А первой командой компилятор ставит загрузки PC из таблицы, где указан адрес 224. Т.е. на уже ремапленный. А кто проц ремапить будет? Без ремапа проц идет по адресу 224, а там его поджидает ROM. И привет.

Вот собираюсь узнать как разместить процедуру по абсолютному адресу. Она будет ремапить и джампить на 0.
Т.е. загрузка по 30 0000. Далее выплнение команды Gxxxxxx - где xxxxx - адрес хитрой процедуры. Ну а дале - будет все нормально. Проц ремапится и начнет выполнятся начальный старт.
Так удобн отладку делать. Сразу в память. Эта же программа вполне будет работать и из флэша. Ибо Атмел уверяет, что при загрузке из флэша загрузчик ремап делает.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 26 2009, 15:58
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Можно немного подправить стартап, и ремапить самой загружаемой программой. Для этого по нулевому адресу меняем ldr pc, ... на b ..., затем ремапим процессор и делаем финт ушами:
Код
        bic        pc, pc, #0x300000
        nop


Ну а саму программу линкуем под нулевой адрес, естественно.

UPD: И кэш инструкций надо не забыть грохнуть сначала.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Mar 26 2009, 17:10
Сообщение #9


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Надеюсь отыщу как убивать кэш. Вроде мелькало где-то.

Вообще это тогда будет частный случай. Если эту же программу проц будет грузить из флэша будет облом. Он ремап сам делает перед джампом на 0. Ну, так уверяет даташит. Прямым текстом.

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

Хотя первой можно поставить команду которая идет по относительному адресу. А ей будет все равно ремаплено или нет. А уж дальше разбираться.
Но все это как-то странно. У атмела на этот счет ни гугу. Типа, чтоб сами разбирались?


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 26 2009, 17:24
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(DpInRock @ Mar 26 2009, 20:10) *
Надеюсь отыщу как убивать кэш. Вроде мелькало где-то.

Код
        mrc        p15, 0, r0, c1, c0, 0    ; read CP15 register 1 into r0
        bic        r0, r0, #0x01            ; clear MMU enable
        bic        r0, r0, #(0x01 << 0x0c)    ; disable I Cache
        bic        r0, r0, #(0x01 << 0x02)    ; disable D Cache
        mcr        p15, 0, r0, c1, c0, 0    ; write value back


Цитата(DpInRock @ Mar 26 2009, 20:10) *
Вообще это тогда будет частный случай. Если эту же программу проц будет грузить из флэша будет облом. Он ремап сам делает перед джампом на 0. Ну, так уверяет даташит. Прямым текстом.

Не будет он делать ремап, если это внешняя флеш (не dataflash). Состояние ремапа всегда можно проверить.

Цитата(DpInRock @ Mar 26 2009, 20:10) *
У атмела на этот счет ни гугу. Типа, чтоб сами разбирались?

У Атмела remap - это просто старая традиция. Ну, и разбираться там особо нечего.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Mar 26 2009, 17:58
Сообщение #11


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Как раз датафлэш у меня. Ничего особенного. И загрузчик, обнаруживая прогу в датафлэш закачивает ее, делает ремап и джамп.
Это вроде точно (типа, так написано).


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 26 2009, 18:01
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(DpInRock @ Mar 26 2009, 20:58) *
Это вроде точно (типа, так написано).

Да, это точно. Тогда проверяйте состояние ремапа и переключайте только когда это необходимо.
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Mar 26 2009, 18:41
Сообщение #13


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



Совсем просто расположить функцию по адресу как-то тяжело.
Решил дело проще.

#pragma location=0x200
unsigned long q[5]={code1, code2, code3,code4,code5};
Где сразу забью код кманд ремапа и джампа.
Потом этот массив можно и использовать повторно. Для чего-нибудь.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
DpInRock
сообщение Mar 26 2009, 19:58
Сообщение #14


Гуру
******

Группа: Участник
Сообщений: 2 254
Регистрация: 4-05-07
Из: Moscow
Пользователь №: 27 515



А оказалось еще проще.

Закачал себе 5.4 ИАР. И там в стартапе для 9261 в комментариях к этому джаму по нулевому адресу написан кммент, типа засунь сюда относительный джам, ежели требуется ремап. Вот спасибо иаровцам.

Теперь придется смотреть систему команд. Понятия не имею как выглядит этот относительный джамп.


--------------------
On the road again (Canned Heat)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 26 2009, 20:45
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(DpInRock @ Mar 26 2009, 22:58) *
Теперь придется смотреть систему команд. Понятия не имею как выглядит этот относительный джамп.

b <метка> Но систему команд изучите обязательно.
Go to the top of the page
 
+Quote Post

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

 


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


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