Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Протокол SAMBA?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
SpiritDance
Кто-нибудь видел описание протокола SAM-BA по dbgu для sam7s? Нужно заливать прошивку вместе со своим загрузчиком, попутно его конфигурируя. jtag на плате нет.
Сергей Борщ
Цитата(SpiritDance @ Apr 12 2007, 14:25) *
Кто-нибудь видел описание протокола SAM-BA по dbgu для sam7s?
Прямо в даташите. В разделе 22.5. Если получится запустить через DBGU - отпишите, я вчера пробовал - не пошло. У меня JTAG разведен, USB - нет. Молчит как рыба, хотя через JTAG вижу, что самба скопировалась во флеш и стартует.
gormih
Цитата(SpiritDance @ Apr 12 2007, 16:25) *
Кто-нибудь видел описание протокола SAM-BA по dbgu для sam7s? Нужно заливать прошивку вместе со своим загрузчиком, попутно его конфигурируя. jtag на плате нет.


Не понял, а зачем протокол? В клиенте SAM-BA под windows есть поддержка скриптов... Может этим пользоваться проще?
Сам же протокол действительно есть в даташите. У меня все работает через USB.
PrSt
Цитата(Сергей Борщ @ Apr 12 2007, 17:23) *
Прямо в даташите. В разделе 22.5. Если получится запустить через DBGU - отпишите, я вчера пробовал - не пошло. У меня JTAG разведен, USB - нет. Молчит как рыба, хотя через JTAG вижу, что самба скопировалась во флеш и стартует.


тут найдете исходник программы SAM-BA прошивцик под линукс и в иходнике можете все увидеть - http://projects.org.ua/new/index.php?mod=n...=show&id=43
(AMWSOFT)

.
АДИКМ
на ftp атмела лежат исходники.
vmp
Цитата(Сергей Борщ @ Apr 12 2007, 18:23) *
Прямо в даташите. В разделе 22.5. Если получится запустить через DBGU - отпишите, я вчера пробовал - не пошло. У меня JTAG разведен, USB - нет. Молчит как рыба, хотя через JTAG вижу, что самба скопировалась во флеш и стартует.


Прекрасно работает через DBGU. SAM7S256. И на отладочной плате, и в готовом устройстве (внешний генератор на 25 МГц). Начальный диалог с самбой можно провести и в терминалке - послать 0x80, 0x80, 0x23, на экране должна появится '>'. После нажатия 'V', '#' - появится версия самбы.
Порт в компьютере настроен на 115200, 8N1, без готовностей.

Собственно сама программа из флеши может только читать и писать ОЗУ и запускать на выполнение. Писать во флеш она не умеет. При работе нужно записать в ОЗУ загрузчик и запустить его. Далее этот загрузчик стирает флеш, принимает данные и пишет их во флеш. Загрузчик я использовал самописанный.
В основную программу можно вставить кусочек эмулятора самбы, который запускается по приему стартовой последовательности 0x80, 0x80, 0x23 и реализует требуемое подмножество системы команд. Это позволит избежать при работе 10-секундной паузы с замыканием TEST.
IEC
Цитата(АДИКМ @ Apr 13 2007, 03:35) *
на ftp атмела лежат исходники.

А как на него (ftp) попасть?
Airan
Цитата(vmp @ Apr 13 2007, 13:49) *
Прекрасно работает через DBGU. SAM7S256. И на отладочной плате, и в готовом устройстве (внешний генератор на 25 МГц). Начальный диалог с самбой можно провести и в терминалке - послать 0x80, 0x80, 0x23, на экране должна появится '>'. После нажатия 'V', '#' - появится версия самбы.
Порт в компьютере настроен на 115200, 8N1, без готовностей.

Собственно сама программа из флеши может только читать и писать ОЗУ и запускать на выполнение. Писать во флеш она не умеет. При работе нужно записать в ОЗУ загрузчик и запустить его. Далее этот загрузчик стирает флеш, принимает данные и пишет их во флеш. Загрузчик я использовал самописанный.
В основную программу можно вставить кусочек эмулятора самбы, который запускается по приему стартовой последовательности 0x80, 0x80, 0x23 и реализует требуемое подмножество системы команд. Это позволит избежать при работе 10-секундной паузы с замыканием TEST.


Тема интересная, но вот возникло пару вопросов:
- загрузчик лежит во флеше и перегружается в RAM только после комамандной последовательности 0x80, 0x80, 0x23 (тогда возникает вопрос успеет ли он переписать загрузчик в RAM?) или постоянно находится в RAM-е и реагирует на команды?
- инерено при этом шить через USB. Так вот нужно ли реализовывать интерфейс самбы для USB или можно иметь что-то своё? и где должен находиться обработчик USB-запросов(FLASH или RAM)?
vmp
Цитата(Airan @ Sep 14 2007, 16:28) *
Тема интересная, но вот возникло пару вопросов:
- загрузчик лежит во флеше и перегружается в RAM только после комамандной последовательности 0x80, 0x80, 0x23 (тогда возникает вопрос успеет ли он переписать загрузчик в RAM?) или постоянно находится в RAM-е и реагирует на команды?
- инерено при этом шить через USB. Так вот нужно ли реализовывать интерфейс самбы для USB или можно иметь что-то своё? и где должен находиться обработчик USB-запросов(FLASH или RAM)?

Загрузчика нет. Есть только программа, которая работает из флеша. Эта программа может принять загрузчик по любому из интерфейсов и поместить его а ОЗУ. Дальнейшее - зависит от загрузчика и его автора.
С USB на SAM7 не работал. Но по аналогии с UART - интерфейс повторять необязательно. Просто та программа, которая будет работать на PC, должна уметь работать с интерфейсом от SAMBA, чтобы передать загрузчик. Далее вся работа будет вестить с интерфейсом загрузчика. Загрузчик работает из ОЗУ.

Цитата
А как на него (ftp) попасть?

ftp://at91dist:distrib@81.80.104.162/
amw
Цитата(Airan @ Sep 14 2007, 15:28) *
Тема интересная, но вот возникло пару вопросов:
- загрузчик лежит во флеше и перегружается в RAM только после комамандной последовательности 0x80, 0x80, 0x23 (тогда возникает вопрос успеет ли он переписать загрузчик в RAM?) или постоянно находится в RAM-е и реагирует на команды?
- инерено при этом шить через USB. Так вот нужно ли реализовывать интерфейс самбы для USB или можно иметь что-то своё? и где должен находиться обработчик USB-запросов(FLASH или RAM)?

code.google.com/u/amwsoft
Программа называется samba. Смотрите исходники.
Все работает через SAM-BA протокол с его-же загрузчиком. Как через DBGU так и через USB. Программа расчитана на Linux, а в Linux USB SAM-BA виден как ttyACM - то есть COM порт.
Загрузчик Atmel не имеет функций работы с Flash. Потому в комплект входит программка, которая заливается в процессор до прошивки и выполняет ТОЛЬКО запись Flash.
vv95
Цитата(vmp @ Sep 14 2007, 17:06) *
Загрузчика нет. Есть только программа, которая работает из флеша. Эта программа может принять загрузчик по любому из интерфейсов и поместить его а ОЗУ. Дальнейшее - зависит от загрузчика и его автора.

- Т.е. я пишу вмето загрузчика прогу чтения флэш и читаю флэш память любого SAM контроллера в комп? Потом диссамблирую или заливаю "как есть" в другой чип.
Т.е. защиты у SAM нет никакой?.
vmp
Цитата(vv95 @ Sep 20 2007, 18:53) *
- Т.е. я пишу вмето загрузчика прогу чтения флэш и читаю флэш память любого SAM контроллера в комп? Потом диссамблирую или заливаю "как есть" в другой чип.
Т.е. защиты у SAM нет никакой?.


Да, сама SAMBA не защищена. smile.gif А ПО пользователя - защищено.

Ещё раз о том, как работает самба.
На SAM7S она запускается в 2 включения процессора:
1. С зажатым TEST - запускается некая программа из масочного ПЗУ, которая стирает флеш и переписывает из ПЗУ во флеш самбу.
2. С отпущенным TEST - запускается из флеша самба.
Т.е. пользовательская программа уже стерта.
vv95
vmp спасибо за уточнение, я почему-то считал что в ПЗУ находится сам загрузчик во флэш.
vmp
Цитата(vv95 @ Sep 21 2007, 10:47) *
vmp спасибо за уточнение, я почему-то считал что в ПЗУ находится сам загрузчик во флэш.

Тогда ещё уточнение. Речь шла только про SAM7S. В других самах - по другому.
CO2040
Обидно что такая актуальная тема заглохла с 2007 года. У меня уже пошел второй год, как пользователи моих приборов всю плешь проели с мольбами сделать наконец лоадер, позволяющий грузить новые версии ПО под windows 7, потому что это у нас, разработчиков электроники урчат 200-е Pentium MMX и стоит зоопарк древних ОС от MS-DOS и win95 до win2000, а обычные пользователи уже понемногу даже от windows XP отказываются в пользу win7. И вот тут получается что SAM-PROG не работает, а простого аналогичного загрузчика у Atmel нет, да и старых версий где был sam-prog надо еще поискать. Давать простым пользователям в руки sam-ba 2.12 нельзя, слишком сложно !!! Задолбают вопросами !!!
Да. главное - используемый камень AT91SAM7SE512.
Так вот, решил поднять протокол для программирования через USB посредством виртуального COM, которым видится устройство на компьютере. С inf-файлами разобрался, прибор обнаруживается и правильно ставится в любой ОС, хоть в XP, хоть в Vista, хоть в win7 (может даже и в win8 будет, только win8 я думаю 99.9% пользователей видели только в рекламе... что очень хорошо.) Определяется как COM10 или COM1x - какой-нибудь.
Как работать с таким виртуальным COM-портом ясно, используя исключительно стандартные API для работы с файлом.
А что касается протокола sam-ba для usb - нихрена не ясно !!! То что написано в даташите на AT91SAM7S/SE - это полное дерьмо и хрень, эти команды описаны для использования DBGU. В то же время при попытке найти что-то в сети по этому вопросу натыкаешься на ссылки ведущие к 404-й ошибке на сайте AT91SAM коммунити и подобных. Да даже в этой теме все линки как говно мамонта, ни один не работает (все ж 6 лет прошло).
Единственная табличка (очень близкая к правде) лежит тут :
http://www.varsanofiev.com/inside/at91_sam_ba.htm

Сравнить ее и то что написано в даташите и как говорится найти 10 отличий...
Итак что пройдено :
- прибор обнаруживается как COM-порт системой.
- прибор если подключен обнаруживается моей программой.
- я даю команду 'N'+'#' (посылаю байты 0x4E и 0x23) в ответ получаю 0x0A и 0x0D (начало строки и возврат каретки) - это то что в даташите у Атмела зовется 'character >' (а ведь многие почитав даташит - будут упорно ждать кода '>' т.е. 0x3E.)
- то же самое возвращается и при передаче последовательности байт 0x80, 0x80, 0x23 - но она в применении usb вряд ли имеет смысл, т.к. предназначается только для физического COM с целью измерения скорости передачи.
Поэтому инициализирующую команду даю именно из таблицы по ссылке, т.е. 0x4E (N).
Ясно, что если один раз дана команда инициализации то на повтор этой команды отклика не будет.
- Теперь вопрос а что собственно дальше ? А дальше ничего не отвечает, никакие команды чтения не работают ! Вот и сижу с этой единственной табличкой 'недокументированного протокола sam-ba usb' и перебираю все возможные комбинации в посылках. То адрес байтами как есть шлю, то в ascii его преобразую и запятую даже в ascii подставляю, то не подставляю - один черт не отвечает !!!

Может кто знает где можно найти хоть чуть больше информации в дополнении таблицы
http://www.varsanofiev.com/inside/at91_sam_ba.htm
или даже есть какие-то примеры работы.

Потому что многие применяют AT91SAM7S/SE в своих разработках, и наверняка как-то решают проблему обновления встроенного ПО своими средствами не из того что предоставляет Atmel. И да, тема актуальна, может еще у кого такая же проблема назревала годами - присоединяйтесь.
Я в свою очередь буду делиться тут тем, что получается у меня.
RabidRabbit
А я вот что-то сомневаюсь, что SAM7S поддерживает полноценный CDC через USB... Это моё мнение основано на чтении пунктов 21.5.3.1 и 21.5.3.2 даташита (6175M–ATARM–26-Oct-12) sm.gif Хотя, мож я и не прав, прям щас джейлинка под рукой нет, чтобы проверить sm.gif
Golikov A.
я так понял сейчас есть библиотека (dll) (так говорит сайт) которая эту самбу реализует, вместо сам-прога, который больше не тогось (так тоже говорит сайт). Так может если есть проблема сделать свою утилиту которая при помощи библиотеки все делает? Да и давать ее пользователю, если прочие варианты не устраивают...
редактор
Атмел не пользую, заглянул из любопытства. И вот моя мысль:
есть программные сниферы COM-портов (втом числе и виртуальных). Если устройство видится как COM-порт, может натравить на него такого зверя и записать лог при штатной работе. Может оказаться быстрее чем перебор возможных вариантов.
DmitryM
Кто мешает поднять свой CDC и написать простенькую утилиту обновления через терминал (Х-модем например)? Откуда привязка к сам-ба?
Или реализовать нормальный полноценный DFU в соответствии с USB.org.
CO2040
Цитата(Golikov A. @ May 15 2013, 11:18) *
я так понял сейчас есть библиотека (dll) (так говорит сайт) которая эту самбу реализует, вместо сам-прога, который больше не тогось (так тоже говорит сайт). Так может если есть проблема сделать свою утилиту которая при помощи библиотеки все делает? Да и давать ее пользователю, если прочие варианты не устраивают...

Здравствуйте. Во-первых это вариант куда более громоздкий и все эти библиотеки и апплеты уже пробовались. Как и сама sam-ba (которая сейчас атмел и предлагается как основная прога для прошивки). И результат неутешительный : на 2-х компьютерах из 4-х она затыкается точно так же как и мои программки. Подмечено, что затыкается там где платы ASUS и концентратор USB выполнен в чипсете SiS. Проблема в том что в моем основном рабочем компе именно такой чипсет, а там где sam-ba хорошо работала, то там работали и мои программы, которые я делал используя фирменный dll. Возможно будут работать и те, что сейчас делаю, но уже без dll, только не проверял пока. Атмеловская SAM-BA ведет себя так : появляется окошечко маленькое, где выбор портов для подключения в списке выбираю то что на usb, т.е. мой прибор который видится и опознается. Запускаю - и все пропадает, т.е. sam-ba.exe висит в диспетчере задач, но ни окна, ничего нет. Видимо также после команды инициализации заваливается. А в некоторых машинах все загружается, правда ругается конечно на память и периферию, т.е. прибор мой имеет не ту конфигурацию что eval kit, но все равно все работает, бинарник я могу во flash прошить.
Замечательный sam-prog, работал всегда и везде, независимо от чипсета, одна беда что ему нужна win2k или XP. Использовал он драйвер atm6124.sys который увы не идет уже на ОС выше XP. А вот CDC хоть в XP, хоть в висте работал во всех версиях sam-ba также плохо, в зависимости от того что стоит в хосте usb на компьютере. Судя по всему atmel не собирается решать эту проблему, sam-ba 2.12 со всеми патчами одинаково НЕ_работает там где не работают и мои программы, и там где не работали ее предыдущие версии. Вариант остается один - разбор протокола. сниферы COM это да, вещь, только вот найти приличный в свободном доступе пока не получалось.


когда разрабатывался этот прибор, на улице был 2007 год и тогда казалось что win XP будет вечно, и появившаяся vista совсем ей не была конкурентом и все ее меняли в своих новых ноутбуках на xp. И тогда было решено использовать бутлоадер, заложенный производителем микроконтроллера, уж очень привлекательно у Atmel это все выглядело. До этого момента и после я всегда писал все бутлоадеры сам ! И в тех проектах где это было сделано никаких проблем с чипсетами, windows7 или чем-то другим нет, все нормально поддерживается мной без милости производителя микроконтроллера. А тут как раз тот вариант, когда обратно уже не отиграть.


Цитата(DmitryM @ May 15 2013, 22:33) *
Кто мешает поднять свой CDC и написать простенькую утилиту обновления через терминал (Х-модем например)? Откуда привязка к сам-ба?
Или реализовать нормальный полноценный DFU в соответствии с USB.org.

ну это же и есть случай своего бутлоадера. Привязка к sam-ba не той, что на компе, а той, что внутри микроконтроллера. Потому что в тех многих сотнях приборах, что уже распроданы перепрошивка начинается со стирания бита GPNVM2 и попадания в загрузчик, который сидит в ROM. Вот мы и поднимаем протокол работы с ним. И пытаемся понять в чем же проблема потери работоспособности. И можно ли это чем-то вылечить или обойти.
А свой CDC или свой bulk, или даже hid - это все есть, но не к этой теме.
CO2040
ну вот, потестировал на других компьютерах - все работает ! И читается память и пишется и свою программку уже для прошивки flash сделал, загружаю и запускаю... Все прекрасно.
Проблема одна - что-то явно не то с самим интерфейсом в загрузчике, который в ROM у Atmel. Иначе они бы уже давно сделали так что и их sam-ba работала на любых машинах и была совсем нечувствительна к тому на чем сделан usb host.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.