Обидно что такая актуальная тема заглохла с 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. И да, тема актуальна, может еще у кого такая же проблема назревала годами - присоединяйтесь.
Я в свою очередь буду делиться тут тем, что получается у меня.