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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> AT91SAM7 управление памятью(samba)
Twen
сообщение Jan 18 2012, 18:04
Сообщение #1


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

Группа: Участник
Сообщений: 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
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 18 2012, 18:11
Сообщение #2


Гуру
******

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



Цитата(Twen @ Jan 18 2012, 22:04) *
Первое что мне не понятно это зачем вообще нужна команда remap, я так понимаю, что
работа счетчика команд возмжна только в диапазоне адресов от 0x0000 0000 до 0x0010 0000, и по этому
для того чтобы можно было выполнять код программы из Ram или Flash использ. комана remap, правильно?

У счетчика команд никаких ограничений нет. В случае SAM7 remap в принципе не нужен, это наследие предыдущих продуктов (ну, разве только отыграть один такт на входе в прерывание можно, или несколько в случае FIQ).

Цитата(Twen @ Jan 18 2012, 22:04) *
Теперь, если например мы сделали ERASE, быт GPNVM очистился, что означает, что загрузка происходит из ROM. То есть начинается выполнятся загрузка из ROM и будет ждать пока я запущу прогр. samba и прошью плату?

Да.

Цитата(Twen @ Jan 18 2012, 22:04) *
Хорошо, если я прошью ее, скажем у Flash, то есть по адресу 0x0010 0000 , то после сброса бит GPNVM установится автоматически и загрузка начнется с флеши, так?

Нет, бит нужно установить вручную (в самбе есть соответствующая команда).

Цитата(Twen @ Jan 18 2012, 22:04) *
Также, я заметил, что некоторые программы с примеров от атмела выполняют remapRam у функции инициализации Lowlevel...Выходит, если я прошил программу у Flash, она выполняется, а потом делается RemapRAm() и уже по начальному адрессу 0x0000 00xx мы проц выполняет команды из RAM, но прошивали же его у Flash , у RAM ничего же нету, кода программы или при вызове команды RemapRAM автомат. происходит копирование кода программы у RAM из Flash и дальнейшее ее выполнение, но тогда тратится же много ОЗУ, не могу понять.

Можно выполнить remap, но при этом код оставить во флеш. Программа в таком случае собирается с учетом карты памяти после ремапа, а на старте до выполнения команды ремап не используется абсолютная адресация.
Но, повторюсь, все это просто не нужно.
Go to the top of the page
 
+Quote Post
sparcmaster
сообщение Jan 19 2012, 04:33
Сообщение #3


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

Группа: Свой
Сообщений: 93
Регистрация: 13-01-12
Из: Гатчина
Пользователь №: 69 333



Про remap популярно объясняется тут.
Go to the top of the page
 
+Quote Post
Twen
сообщение Jan 19 2012, 14:47
Сообщение #4


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

Группа: Участник
Сообщений: 163
Регистрация: 7-02-09
Пользователь №: 44 543



Спасибо, немного стало яснее.
Go to the top of the page
 
+Quote Post
_4afc_
сообщение Jan 20 2012, 09:25
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 262
Регистрация: 13-10-05
Из: Санкт-Петербург
Пользователь №: 9 565



Цитата(aaarrr @ Jan 18 2012, 21:11) *
Нет, бит нужно установить вручную (в самбе есть соответствующая команда).


В случае самбы с графическим интерфейсом и камня AT91SAM7Sххх - не нужно в ручную.
После снятия питания - следующая загрузка произойдёт из флэш.

Вот в AT91SAM3S - да. Надо перебрасывать.

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

Но по умолчанию - в поставке, до сих пор было как я описал.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 20 2012, 10:36
Сообщение #6


Гуру
******

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



Цитата(_4afc_ @ Jan 20 2012, 13:25) *
В случае самбы с графическим интерфейсом и камня AT91SAM7Sххх - не нужно в ручную.
После снятия питания - следующая загрузка произойдёт из флэш.

Так как в первом сообщении помянут бит GPNVM, очевидно, что речь идет не о SAM7S.
Go to the top of the page
 
+Quote Post
Twen
сообщение Jan 23 2012, 14:13
Сообщение #7


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

Группа: Участник
Сообщений: 163
Регистрация: 7-02-09
Пользователь №: 44 543



Цитата
Так как в первом сообщении помянут бит GPNVM, очевидно, что речь идет не о SAM7S.

Извините, что не уточнил - AT91SAM7X.

Чтобы не создавать отдельную тему, напишу здесь...Ходят слухи, что у atmel есть проблемы с аппаратным ethrtnet модулем, слышали ли вы об этом?

Сообщение отредактировал Twen - Jan 23 2012, 14:17
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 23 2012, 14:49
Сообщение #8


Гуру
******

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



Цитата(Twen @ Jan 23 2012, 18:13) *
Ходят слухи, что у atmel есть проблемы с аппаратным ethrtnet модулем, слышали ли вы об этом?

В режиме MII SAM7X128 и 256 работают совершенно нормально, проверено. RMII работоспособен только на 512.
Go to the top of the page
 
+Quote Post
Twen
сообщение Jan 28 2012, 08:06
Сообщение #9


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

Группа: Участник
Сообщений: 163
Регистрация: 7-02-09
Пользователь №: 44 543



Ок, спасибо, но я слышал, что вроде сталкивались с проблемой, которая возникала при приходе по эзернету нескольких идущих друг за другом кадров. Не знаю, на сколько это так...

Сообщение отредактировал Twen - Jan 28 2012, 08:09
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Jan 28 2012, 09:48
Сообщение #10


Гуру
******

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



Нет, такого не встречал, хотя с EMAC'ом работал весьма плотно.
Go to the top of the page
 
+Quote Post
Twen
сообщение Feb 8 2012, 14:27
Сообщение #11


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

Группа: Участник
Сообщений: 163
Регистрация: 7-02-09
Пользователь №: 44 543



Сегодня узнал, что нужно будет вплотную занятся изучением SAM-Ba программы(также протокола x-modem).
Выходит, что протокол X-modem используется программой SAM-BA только при передаче/приеме файлов , это значит что можно и не реализовывать его (X-Modem), если обращаться к памяти микроконтроллера командами записи/чтения слова/полуслова. Отсюда вытекает как достоинство так и недостаток. Достоинство - размер максимального файла для записи ограничивается только размером Flash памяти, а не RAM, так как не происходит копирование текущего кода программы в RAM. Недостаток - время программирования микроконтроллера увеличивается. Я правильно понимаю?

После установки программы Sam_Ba v2.11 в папке где установленная программа, есть папка "examples", в которой находятся исходники программы, написанные под Visual C ++ 6.0. Но мне необходимо производить прошивку микроконтроллера через мастера(такого же МК только ведущего), может кто-то встречал похожую реализацию, дабы не изобретать велосипед?

Сообщение отредактировал Twen - Feb 8 2012, 15:09
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 8 2012, 14:39
Сообщение #12


Гуру
******

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



Если писать по словам командами, то получится очень медленно и печально. Лучше сделать так:
1. Мастер записывает при помощи X-modem в RAM слейва небольшую программку для программирования флеш
2. Дальнейшее общение мастер производит уже с ней
Собственно, самба так и работает.
Go to the top of the page
 
+Quote Post
Twen
сообщение Feb 8 2012, 16:56
Сообщение #13


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

Группа: Участник
Сообщений: 163
Регистрация: 7-02-09
Пользователь №: 44 543



Блин я опять немного запутался, извиняйте, но я начну немного вернусь назад...
Цитата
если например мы сделали ERASE, быт GPNVM очистился, что означает, что загрузка происходит из ROM. То есть начинается выполнятся загрузка из ROM и будет ждать пока я запущу прогр. samba и прошью плату

Это так, загрузчик выполняется из ROM, потом перехожу на даташит SAM7x Series, пункт 21.3 Deviece Initialization:
1,2...6 - Copy code into SRAM,7...11 - Jump to Sam-Ba Boot sequence.
Вот, пункт шестой - копируем код у RAM(код загрузчика у ROM я так понял)...
Немного не понятно зачем его копировать туда, если он выполняется из ROM(пускай бы изROM бы и выполнялся, а у раме находились бы его какие-то переменные)...ааа наверное это связано с вектором прерываний. Выходит мы скопировали загрузчик у RAM, который выполнялся из ROM и потом загрузчик запустил выполнение кода из RAM, правильно?

А потом при записи с ПК файла в МК он пишется у выбранную нами область, кроме той где находится загрузчик.
Цитата
Лучше сделать так:
1. Мастер записывает при помощи X-modem в RAM слейва небольшую программку для программирования флеш
2. Дальнейшее общение мастер производит уже с ней
Собственно, самба так и работает.


Если вы говорите что собственно, самба так и работает, то для чего тогда писать для слейва прогу такую же, тогда использую аппаратный загрузик у слейве, а для мастера напишу свою.
(Извините, если что-то не так понял...)

Если кто-то реализовывал подобное, пишите)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 8 2012, 17:19
Сообщение #14


Гуру
******

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



Цитата(Twen @ Feb 8 2012, 20:56) *
1,2...6 - Copy code into SRAM,7...11 - Jump to Sam-Ba Boot sequence.
Вот, пункт шестой - копируем код у RAM(код загрузчика у ROM я так понял)...
Немного не понятно зачем его копировать туда, если он выполняется из ROM(пускай бы изROM бы и выполнялся, а у раме находились бы его какие-то переменные)...ааа наверное это связано с вектором прерываний. Выходит мы скопировали загрузчик у RAM, который выполнялся из ROM и потом загрузчик запустил выполнение кода из RAM, правильно?

Ну, это как бы внутренняя кухня загрузчика.

Цитата(Twen @ Feb 8 2012, 20:56) *
А потом при записи с ПК файла в МК он пишется у выбранную нами область, кроме той где находится загрузчик.

Область памяти, которую можно использовать под свой загрузчик, прописана в табличке в п.21.5

Цитата(Twen @ Feb 8 2012, 20:56) *
Если вы говорите что собственно, самба так и работает, то для чего тогда писать для слейва прогу такую же, тогда использую аппаратный загрузик у слейве, а для мастера напишу свою.

Этот "аппаратный загрузчик" не предназначен для записи флеш. Единственная его задача - позволить загрузить с хоста вторичный загрузчик (то что у самбы называется applet).

То есть вам нужно сделать три вещи:
Для слейва:
Написать прошивальщик со своим протоколом, который будет жить в дозволенной области RAM.
Для хоста:
Обеспечить загрузку этого прошивальщика через X-modem
Обеспечить взаимодействие с прошивальщиком для последующей записи флеш/GPNVM.
Go to the top of the page
 
+Quote Post
Twen
сообщение Feb 8 2012, 22:46
Сообщение #15


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

Группа: Участник
Сообщений: 163
Регистрация: 7-02-09
Пользователь №: 44 543



Завтра я установлю снифер, зайду у samb-ba и попытаюсь подсмотреть его действия.
Цитата
Этот "аппаратный загрузчик" не предназначен для записи флеш. Единственная его задача - позволить загрузить с хоста вторичный загрузчик (то что у самбы называется applet).

Эти слова меня удивили, честно говоря.

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

Получается мне нужно будет написать программку для слейва, например такую, если пришла команда x, то записать код у флеш...скомпилировать эту программку и отправить по протоколу X-Modem как файл, по адрессу начальном из таблицы 21.4(SAM7X256: 0x202000 - 0x210000 ).

Ну хорошо скажем зашил я у слейв вторичный загрузчик(программу обработки запросов от мастера), а какую мне потом команду нужно выполнить для выполнения этого кода из стартового адреса 0x202000, на стороне слейва. Вот эту - G0x202000,# ?

Когда у слейва будет запущена программа обработки запросов мастера, тогда мастер сможет посылать определенные команды(например записать данные такие-то во флеш или стереть, разблокировать флеш).
Я правильно понимаю?

Интересно получается, вы aaarrr меня просветили, спасибо большое, даташиты желают лучшего.
А заводская программа выходит загружает в область юзера RAM свои аплеты, в зависимости от команды , или только один аплет универсальный, который будет обслуживать все команды запроса?

Сообщение отредактировал Twen - Feb 8 2012, 22:57
Go to the top of the page
 
+Quote Post

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

 


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


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