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

 
 
> Сделал свой программатор и озадачился протоколом STK, Просветите кто в теме
Dimonira
сообщение Oct 20 2008, 15:28
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 405
Регистрация: 4-10-04
Пользователь №: 777



Сделал железяку программатора через USB на FT232 и ATMEGA8 с портом SPI, с изоляцией и со сдвигом уровней в диапазоне 1.15-5.5В (раньше через байт-бластер шил через LPT и AvReal, а теперь нотбук, у него нету LPT). Теперь занялся писанием софта контроллера программатора. Посмотрел (достаточно бегло) протокол STK500 v2 (AVR068), варианты реализаций от Doper, Prottoss, Tuxgraphics. И вот что-то не въезжаю, если реализовывать именно STK500 v2, ведь железо (моё в частности) не может ни параллельное программирование, ни HV, ни многие опции настроек поддерживать. Тогда некий кострат получится. А в описании протокола STK500 почему-то ещё упоминается про железо AVRISP (там и строчка "отзыва" соответствующая), который поменьше может. В чём разница то (по железу)? Может надо как раз его реализовывать? В общем какой протокол сейчас лучше запихать в программатор (типа моего)? Хотелось бы, чтобы протокол не привязывался к конкретным чипам (как AVR910).
Просто я последнее время отошёл от AVR-ок (Армами занимался) и упустил "бразды". А тут снова возникла потребность.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Dimonira
сообщение Oct 25 2008, 17:31
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 405
Регистрация: 4-10-04
Пользователь №: 777



Байда какая-то. Не входит в режим программирования и всё тут. Посмотрел осциллографом, все сигналы на программируемый контроллер (Тини85) приходят, но на его линии MISO железно стоит единица и всё. Ноль реакции.
Спаял по-быстрому второй программатор (подумал мало ли что с железом), - те же яйца.
Кстати, второй программатор почему-то не захотел программироваться программатором Prottoss-а, тоже не мог войти в режим программирования. Зато AvReal-ом (байт-бластер с параллельного порта настольного компьютера) зашился влёт без проблем.
Видимо я что-то недопонимаю. Вроде сделал аналогично тому как сделано у других, но в режим программирования не входит. В чём может быть дело?
И, кстати, ещё такой вопрос: пока не наступила синхронизация (не вошёл в режим программирования), контроллер будет выдавать хотябы что-то с MISO или нет?
Go to the top of the page
 
+Quote Post
defunct
сообщение Oct 25 2008, 20:32
Сообщение #3


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Dimonira @ Oct 25 2008, 20:31) *
И, кстати, ещё такой вопрос: пока не наступила синхронизация (не вошёл в режим программирования), контроллер будет выдавать хотябы что-то с MISO или нет?

Что значит пока не наступила синхронизация?
алгоритм программирования следующий:
1. Установить резет в 1 и 100ms подождать.
2. Установить резет в 0 и 20ms подождать.
3. послать последовательность 0xAC 0x53 0x00 0x00 (вход в режим программирования).
4. послать любую комнаду на которую чип должен откликнуться, например чтение сигнатуры, если чип откликнулся правильно - то вот она синхронизация. Для синхронизации можно использоваться младший байт сигнатуры который по адресу 0, он должен быть всегда 0x1E.
0x000: 0x1E (indicates manufactured by Atmel).

пункт 4 можно оформить например так:

Код
long readSignature( char len )
{
    long signature = 0;
    len &= 0x3;

    do
        spiTransfer( 0x30 );
        spiTransfer( 0x00 );
        spiTransfer( len );
        signature <<= 8;
        signature |= spiTransfer( 0x00); // <-- read signature (здесь гарантировано на MISO должен меняться сигнал).
    while(len--);
    return signature;
}


До тех пор пока вы не пошлете чипу команду на которую он должен слать ответ, ничего на MISO меняться не будет.
Go to the top of the page
 
+Quote Post
Dimonira
сообщение Oct 25 2008, 21:08
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 405
Регистрация: 4-10-04
Пользователь №: 777



Заработало! Пока читаю сигнатуры, фузы. Остальное не пробовал.
Как иногда бывает, сказалось одновременное наличие нескольких факторов, поэтому и возник клинч:
1. Я пытался работать с новой Тини85 на максимальной скорости SPI для AVRISP = 960кГц. А она, когда новая, настроена на внутренний RC-генератор 8МГц, но и ещё с делителем на 8, т.е. итого на 1 МГц. Так что работать надо было на 230кГц или ниже.
2. Я ошибочно полагал или скорее не доглядел (и в чужих исходниках), что номер байта, который надо запомнить при обмене по SPI нумеруется не с нуля, как обычно подразумевается в Си, а (в протоколе STK500) нумеруется начиная с единицы. Отловил программно. Это было и для команды CMD_ENTER_PROGMODE_ISP (pollIndex), и для команд чтения битов (параметр RetAddr).
3. Оказалось, что при использовании преобразователя уровней (у меня ADG3304) надо сделать подтяжку MISO на "наружной" стороне, т.е. на стороне программируемого контроллера. Возможно, подтяжку на том же выводе контроллера программатора тогда делать не обязательно (имеется в виду программно). Потом проверю.

Возникли новые вопросы:
Цитата(defunct @ Oct 26 2008, 00:32) *
Что значит пока не наступила синхронизация?
алгоритм программирования следующий:
1. Установить резет в 1 и 100ms подождать.

Зачем так долго ждать? В даташитах вроде пишется о более чем двух клоках тактовой частоты (если мне не изменяет память). У себя я сделал 10 мс.
Тут ещё вот какая завязка. При своих экспериментах с процедурой входа в режим программирования, я обнаружил, что Студия довольно-таки жёстко следит за временем исполнения своих команд. А времена она задаёт в параметрах этих команд. Я в цикле попыток синхронизации вставил задержку cmdexeDelay между 4-х байтными посылками (хотя может я и не так понял протокол, у других я видел вставление этой задержки в цикл только у одного, да и вообще с задержками у разных вариантов полный раздрай, видимо, из-за того, что протокол написан нечётко и не подробно). И когда для пробы увеличил количество циклов попыток с 32 до 64, то тут же после этого Студия "потеряла контроль" с программатором, видимо не получив ответ вовремя. Так что с "лошадиными" задержками надо тоже быть осторожным.

Ещё вопрос по команде CMD_SPI_MULTI. У неё тоже в параметрах есть стартовый адрес байта (RxStartAddr), с которого надо начать запоминание считываемых байтов для выдачи в хост. Так вот он с нуля или с единицы отсчитывается? Если принять аналогию с тем, что я описал выше (п.2), то тоже наверное с единицы. Тем более, что параметры количества передаваемых (NumTx) и принимаемых (NumRx) байт задаются в диапазоне 0-255. Т.е. 256 никак не может быть, а параметр RxStartAddr имеет размерность в байт. Правильно?
Go to the top of the page
 
+Quote Post
defunct
сообщение Oct 25 2008, 22:05
Сообщение #5


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Dimonira @ Oct 26 2008, 00:08) *
Зачем так долго ждать? В даташитах вроде пишется о более чем двух клоках тактовой частоты (если мне не изменяет память). У себя я сделал 10 мс.

Дык мы же не знаем какой клок у тагет процессора. Студия ждет достаточно долго ~500ms.

Цитата
Я в цикле попыток синхронизации вставил задержку cmdexeDelay между 4-х байтными посылками
стоп, тут не задержка должна быть, а:
Whether the echo
is correct or not, all four bytes of the instruction must be transmitted. If the 0x53
did not echo back, give RESET a positive pulse and issue a new Programming
Enable command
. понятно что "1" пульс должен обладать некой длительностью, и ее можно сокращать либо увеличивать по вкусу (если второе тогда сократить изначальные 100ms до 1ms и увеличивать с шагом 20ms).

Цитата
И когда для пробы увеличил количество циклов попыток с 32 до 64, то тут же после этого Студия "потеряла контроль" с программатором, видимо не получив ответ вовремя. Так что с "лошадиными" задержками надо тоже быть осторожным.

Это сильно много. Достаточно 3-4 попытки. Не зачем мучить чип. Если все Ок то синхронизируется сразу.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Dimonira   Сделал свой программатор и озадачился протоколом STK   Oct 20 2008, 15:28
- - defunct   Цитата(Dimonira @ Oct 20 2008, 18:28) А в...   Oct 20 2008, 15:53
- - Dimonira   Посмотрел в протоколе описание параметра PARAM_SCK...   Oct 20 2008, 17:35
|- - defunct   Цитата(Dimonira @ Oct 20 2008, 20:35) Т.е...   Oct 21 2008, 14:20
|- - Dimonira   Цитата(defunct @ Oct 21 2008, 18:20) Макс...   Oct 21 2008, 15:11
|- - defunct   Цитата(Dimonira @ Oct 21 2008, 18:00) Ну,...   Oct 21 2008, 15:27
||- - Dimonira   Цитата(defunct @ Oct 21 2008, 19:27) Что ...   Oct 21 2008, 19:16
||- - defunct   ЦитатаНасчет кварца в STK500 уточню вечером. STK50...   Oct 21 2008, 21:06
||- - Dimonira   Цитата(defunct @ Oct 22 2008, 01:06) Стан...   Oct 22 2008, 06:44
|- - BSV   Цитата(Dimonira @ Oct 21 2008, 19:11) Вот...   Oct 21 2008, 19:21
|- - Dimonira   Цитата(BSV @ Oct 21 2008, 23:21) Тут есть...   Oct 22 2008, 05:12
|- - defunct   Цитата(Dimonira @ Oct 22 2008, 08:12) Не ...   Oct 22 2008, 16:18
|- - Dimonira   Цитата(defunct @ Oct 22 2008, 20:18) STK5...   Oct 22 2008, 17:08
|- - defunct   Цитата(Dimonira @ Oct 22 2008, 19:49) Как...   Oct 22 2008, 17:09
|- - Dimonira   Мда. Вчера поздним вечером был пробный запуск. Ком...   Oct 22 2008, 17:29
|- - defunct   Цитата(Dimonira @ Oct 22 2008, 20:29) А в...   Oct 23 2008, 10:42
- - BSV   Цитата(Dimonira @ Oct 20 2008, 19:28) с и...   Oct 20 2008, 19:18
|- - Dimonira   Цитата(BSV @ Oct 20 2008, 23:18) А можно ...   Oct 20 2008, 19:43
|- - BSV   Цитата(Dimonira @ Oct 20 2008, 23:43) Схе...   Oct 20 2008, 19:58
- - Dimonira   Хорошо, попробую. У меня просто нет готовой платки...   Oct 23 2008, 15:37
- - Dimonira   Цитата(defunct @ Oct 26 2008, 02:05) Дык ...   Oct 25 2008, 22:54


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

 


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


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