|
AT91SAM7 управление памятью(samba) |
|
|
|
Jan 18 2012, 18:04
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 7-02-09
Пользователь №: 44 543

|
Добрый вечер. Я на форуме видел несколько похожих тем, но они не дают ответа на мои вопросы, по этому решил создать эту тему. Меня мучает некоторое непонимание... Смотрите, у микроконтроллера AT91SAM7 есть 4 основных блока адресации :
0x0000 0000 - ROM,RAM,FLASH - в зависимости от бита GPNVM и remap 0x0010 0000 - Flash 0x0020 0000 - SRAM 0x0030 0000 - ROM
Первое что мне не понятно это зачем вообще нужна команда remap, я так понимаю, что работа счетчика команд возмжна только в диапазоне адресов от 0x0000 0000 до 0x0010 0000, и по этому для того чтобы можно было выполнять код программы из Ram или Flash использ. комана remap, правильно?
Теперь, если например мы сделали ERASE, быт GPNVM очистился, что означает, что загрузка происходит из ROM. То есть начинается выполнятся загрузка из ROM и будет ждать пока я запущу прогр. samba и прошью плату? Хорошо, если я потом прошью ее, скажем у Flash, то есть по адресу 0x0010 0000 , то после сброса бит GPNVM установится автоматически и загрузка начнется с флеши, так?
Также, я заметил, что некоторые программы с примеров от атмела выполняют remapRam у функции инициализации Lowlevel...Выходит, если я прошил программу у Flash, она выполняется, а потом делается RemapRAm() и уже по начальному адрессу 0x0000 00xx мы проц выполняет команды из RAM, но прошивали же его у Flash , у RAM ничего же нету, кода программы или при вызове команды RemapRAM автомат. происходит копирование кода программы у RAM из Flash и дальнейшее ее выполнение, но тогда тратится же много ОЗУ, не могу понять.
Мне эти недопонимания застряли в голове и не дают покоя, если может ли кто-то, пожалуйста, объяснить, спасибо.
Сообщение отредактировал Twen - Jan 18 2012, 18:07
|
|
|
|
2 страниц
< 1 2
|
 |
Ответов
(15 - 20)
|
Feb 8 2012, 22:55
|
Гуру
     
Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448

|
Цитата(Twen @ Feb 9 2012, 02:46)  Эти слова меня удивили, честно говоря. Почему? Из "системы команд" загрузчика уже очевидно, что флеш он не пишет. Цитата(Twen @ Feb 9 2012, 02:46)  Получается мне нужно будет написать программку для слейва, например такую, если пришла команда x, то записать код у флеш...скомпилировать эту программку и отправить по протоколу X-Modem как файл, по адрессу начальном из таблицы 21.4(SAM7X256: 0x202000 - 0x210000 ).
Ну хорошо скажем зашил я у слейв вторичный загрузчик(программу обработки запросов от мастера), а какую мне потом команду нужно выполнить для выполнения этого кода из стартового адреса 0x202000, на стороне слейва. Вот эту - G0x202000,# ? Да, эту. Цитата(Twen @ Feb 9 2012, 02:46)  Когда у слейва будет запущена программа обработки запросов мастера, тогда мастер сможет посылать определенные команды(например записать данные такие-то во флеш или стереть, разблокировать флеш). Я правильно понимаю? Совершенно верно. Цитата(Twen @ Feb 9 2012, 02:46)  А заводская программа выходит загружает в область юзера RAM свои аплеты, в зависимости от команды , или только один аплет универсальный, который будет обслуживать все команды запроса? Возможно, заводская программа в RAM ничего и не держит, кроме векторов и переменных - не изучал. При программировании через SAM-BA, последняя загружает в RAM свой код (см. папку tcl_lib), и работает уже с ним.
|
|
|
|
|
Feb 9 2012, 16:11
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 7-02-09
Пользователь №: 44 543

|
Так вот, после запуска SAM-BA со стороны ПК я включил снифер в состояние прослушивания. Выбрал загрузка в RАМ, выбрал сам файл бинарный, который сам создал (в нем были аски символы 1234), выбрал адрес 0x0020 0000, после этого нажал кнопку Send...вот что я увидел: S00200000,00000004# C <SOH><SOH>ю1234<NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><NUL><DC2>n <ACK> <EOT> <ACK>
Значение после команды передачи файла =4 - кол. байт. Пробывал через терминал писать байт в RAM и читать , все отлично работает...пробывал записать у Flash значение, команда прошла, вернулся символ > , но когда прочитал то получил FF. Нашел статью одну небольшую, оказывается сам протокол boot loader-a не открытый, его просто подсмотрели частично...
Сообщение отредактировал Twen - Feb 10 2012, 09:35
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|