Перейти к содержанию
    

Сделал свой программатор и озадачился протоколом STK

Сделал железяку программатора через USB на FT232 и ATMEGA8 с портом SPI, с изоляцией и со сдвигом уровней в диапазоне 1.15-5.5В (раньше через байт-бластер шил через LPT и AvReal, а теперь нотбук, у него нету LPT). Теперь занялся писанием софта контроллера программатора. Посмотрел (достаточно бегло) протокол STK500 v2 (AVR068), варианты реализаций от Doper, Prottoss, Tuxgraphics. И вот что-то не въезжаю, если реализовывать именно STK500 v2, ведь железо (моё в частности) не может ни параллельное программирование, ни HV, ни многие опции настроек поддерживать. Тогда некий кострат получится. А в описании протокола STK500 почему-то ещё упоминается про железо AVRISP (там и строчка "отзыва" соответствующая), который поменьше может. В чём разница то (по железу)? Может надо как раз его реализовывать? В общем какой протокол сейчас лучше запихать в программатор (типа моего)? Хотелось бы, чтобы протокол не привязывался к конкретным чипам (как AVR910).

Просто я последнее время отошёл от AVR-ок (Армами занимался) и упустил "бразды". А тут снова возникла потребность.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А в описании протокола STK500 почему-то ещё упоминается про железо AVRISP (там и строчка "отзыва" соответствующая), который поменьше может. В чём разница то (по железу)?

Разница в том что AVRISP не поддерживает HVSP/HVPP. По железу это только ISP программатор.

Т.е. это как раз то что Вам нужно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Посмотрел в протоколе описание параметра PARAM_SCK_DURATION и вроде получается, что STK500 работает на бОльшей частоте SCK нежели AVRISP. Т.е. STK500 получается работает (шьёт и читает) шустрее чем AVRISP. У STK500 и кварц, как я понял 7.3728 МГц (у меня, кстати, такой же), что вдвое больше чем у AVRISP.

Выходит, всё же лучше кастрированный STK500? Просто не "включать" его в нерабочие режимы и всё.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

с изоляцией и со сдвигом уровней в диапазоне 1.15-5.5В
А можно схемкой полюбопытствовать? Давно хотелось сделать изолированный программатор для AVR. Мне кроме двух оптопар между FT232 и ATMEGA что-то ничего в голову не пришло :05: но так разве что до 3.3 В можно. Поэтому особенно интересно какое решение Вы нашли для поддержки сдвига уровней в таком диапазоне.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А можно схемкой полюбопытствовать? Давно хотелось сделать изолированный программатор для AVR. Мне кроме двух оптопар между FT232 и ATMEGA что-то ничего в голову не пришло :05: но так разве что до 3.3 В можно. Поэтому особенно интересно какое решение Вы нашли для поддержки сдвига уровней в таком диапазоне.

Схемку пока не выкладываю, т.к. не всё проверил (софт делаю) и может поменяю чего.

А вообще Analog Devices рулит :) ADuM120x, ADG330x.

Ещё стоит изолированный DC/DC (вот его то пока не купил) для получения от USB "вторичного" напряжения, которое используется не только для питания контроллера, но может использоваться и для запитывания target.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Схемку пока не выкладываю, т.к. не всё проверил (софт делаю) и может поменяю чего.

А вообще Analog Devices рулит :) ADuM120x, ADG330x.

Ещё стоит изолированный DC/DC (вот его то пока не купил) для получения от USB "вторичного" напряжения, которое используется не только для питания контроллера, но может использоваться и для запитывания target.

Ну, ADuM - понятно, дороговато только. Про ADG330x тут что-то нехорошее писали, применяли их раньше? Из собственных воспоминаний по даташиту - питание с одной стороны должно быть всегда больше чем с другой. А наличие вторичного источника многое объясняет, спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Т.е. STK500 получается работает (шьёт и читает) шустрее чем AVRISP. У STK500 и кварц, как я понял 7.3728 МГц (у меня, кстати, такой же), что вдвое больше чем у AVRISP.

Макс скорость ISP у них одинаковая ~1Mhz.

 

STK500 просто дополнительно должен (и может):

1. генерить клок для таргет процессора (сокета), до 3 с хвостиком Mhz.

2. и клок для PP режима.

 

в AVRISP кварц 3.6864Mhz.

Насчет кварца в STK500 уточню вечером.

 

Выходит, всё же лучше кастрированный STK500?

Если Вам только ISP, то не лучше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Макс скорость ISP у них одинаковая ~1Mhz.

Ну, я так понимаю, это определяется скоростью обмена 115200 бит/с.

STK500 просто дополнительно должен (и может):

1. генерить клок для таргет процессора (сокета), до 3 с хвостиком Mhz.

2. и клок для PP режима.

Я у себя сделал как и в схеме Prottoss-а - вывел дополнительно вывод PB1 на 3 контакт 10-пинового ISP. Так что можно тоже клок генерить. В своё время я делал нечто такое и в байт-бластере (как Real рекомендовал). Один раз, но всё же, это спасло контроллер при неправильном прошитии фуза выбора генератора тактовой. Вот только пока я не очень въехал, завязывать ли как-то настройку этого клока с протоколом STK? Там есть какие-то опции, связанные с генерацией такта. Пока не разобрался. Есть мысли? Или жёстко его как-то задать? Хотя, надо же тогда увязывать с частотой клока SPI, так что наверное надо как-то увязать.

Если Вам только ISP, то не лучше.

В принципе в части ISP там большой разницы вроде нет. Что-то там связано опять же с тактом работы SPI, у них вроде по-разному, ещё не вникал.

 

Ну, ADuM - понятно, дороговато только.

Ну, извините. Сотня с чем-то рябчиков дорого? Нельзя экономить на инструментах. Хотите сделать нормальный инструмент, надо немного потратиться. А если хотите сделать себе одну-две штуки, дык вообще можете сэмплами заказать бесплатно (я пока так и сделал).

Про ADG330x тут что-то нехорошее писали, применяли их раньше?

Я не применял. Видимо пришло время :) Нехороших отзывов как-то не попадалось. Так что надеюсь на AD. Пока вроде не подводил.

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

Вот именно. Имеем 5 В питания, к которой подключаем ту "половину" ADG, которая хочет большего питания чем другая. А другую подключаем на внешнее "общение" по ISP. Внешнее питание получается и будет меньше или равно, как положено.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну, я так понимаю, это определяется скоростью обмена 115200 бит/с.

Да все так.

ISP протокол избыточный, на 1 байт данных STK протокола в среднем приходится 4 байта ISP протокола.

чтобы пользовать макс доступную скорость UART'a необходимо чтобы SPI работал чуть быстрее 4x115200 Hz.

 

Так что можно тоже клок генерить.

...

Вот только пока я не очень въехал, завязывать ли как-то настройку этого клока с протоколом STK?

Или жёстко его как-то задать?

IMHO константной частоты достаточно. (управление частотой этого клока из STK500 GUI не имеет практической ценности если не планируете оформить устройство как EVM с сокетами). STK500 кстати еще умеет напряжение питания таргета регулировать.

 

В STK500 много того, что у Вас не будет реализовано в железе, и как по мне лучше полноценный клон простого устройства, чем неполноценный - сложного.

 

Что-то там связано опять же с тактом работы SPI, у них вроде по-разному, ещё не вникал.

Что Вы имеете в виду? SPI mode (CPHA/CPOL) не может отличаться!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Что Вы имеете в виду? SPI mode (CPHA/CPOL) не может отличаться!

Я имею в виду частоту работы SPI. Если почитать описание параметра PARAM_SCK_DURATION, то там видно отличие STK500 от AVRISP. Там по-разному задаётся параметр. Я пока до этого не дошёл, но наскоком понять не получилось. Сначала, когда я ещё не читал протокол, была мысль сделать программную настройку частоты работы SPI своими средствами: например, поддержав свои некие команды настройки, хранимые в EEPROM и меняемые, допустим, через терминальную программу. Меня подтолкнуло к этому обсуждение в ветке программатора Petka пожелания сделать пониженную частоту SPI. Зачем? Тем более, если реализовывать SPI на "железе" (мой случай), то изменение частоты возможно в широких пределах (не понимаю, зачем вообще делали SPI программно во многих реализациях, если он есть "железный", в чём "прикол"? да и на "железном" легко в обратную сторону подключиться и зашить контроллер программатора, как я сейчас и делаю). Вот и не решу как прикрутить настройку частоты обмена по SPI.

 

Вот ещё что. STK500 может изменять и измерять напряжение Vtarget. Я завёл его на вход АЦП и тоже думаю - изменять то я не могу, а измерять могу. AVRISP не может ни то, ни другое. Может в режиме STK500 можно, допустим, при измерении его сообщить, а при попытке изменить, отказать, вернув ошибку или ещё как-то.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот именно. Имеем 5 В питания, к которой подключаем ту "половину" ADG, которая хочет большего питания чем другая. А другую подключаем на внешнее "общение" по ISP. Внешнее питание получается и будет меньше или равно, как положено.
Тут есть один тонкий момент - если от USB плату отключат, а от таргета нет? До свидания буфер?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Насчет кварца в STK500 уточню вечером.

STK500 - 7.37Mhz.

 

Я имею в виду частоту работы SPI. Если почитать описание параметра PARAM_SCK_DURATION, то там видно отличие STK500 от AVRISP. Там по-разному задаётся параметр. Я пока до этого не дошёл, но наскоком понять не получилось.

возможно это из-за кварца.

 

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

Некие "свои" команды - это плохая идея.

А конфигурацию которую вам задаст напр. AVR-Studio надо запоминать и хранить в EEPROM'е само-собой.

 

Меня подтолкнуло к этому обсуждение в ветке программатора Petka пожелания сделать пониженную частоту SPI.

Стандартный протокол предусматривает возможность задать частоту SPI 600Hz (для девайсов работающих от часового кварца с фузом предделителя частоты на 8, т.е. для случая когда чип работает на 4Khz).

 

Вот ещё что. STK500 может изменять и измерять напряжение Vtarget. Я завёл его на вход АЦП и тоже думаю - изменять то я не могу, а измерять могу. AVRISP не может ни то, ни другое. Может в режиме STK500 можно, допустим, при измерении его сообщить, а при попытке изменить, отказать, вернув ошибку или ещё как-то.

А смысл? В STK500 заложено считывание Vtarget только для того чтобы была обратная связь (т.е. чтобы можно было не отходя от кассы проверить установилось ли то напряжение которое мы попросили). AVRISP используется для прошивки конкретных устройств где напряжение таргета и так известно, или в крайнем случае его можно единожды измерить тестером.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тут есть один тонкий момент - если от USB плату отключат, а от таргета нет? До свидания буфер?

ХЗ. Думаю, что сейчас, когда возился с платой и подключениями, у меня так было и не раз. Но пока ничего не случилось. Возможно, что соотношение питаний важно для правильной работы драйвера. Именно работы, а не существования :) При отключении от USB никакой работы быть не может, так что неважно, правильно транслирует уровни драйвер или нет. Главное, чтобы жил.

 

Некие "свои" команды - это плохая идея.

Ну почему же? Если добавляется какой-то полезный функционал, которого нет в стандартном девайсе? Не хотите - не пользуетесь, это же ни к чему не принуждает.

А конфигурацию которую вам задаст напр. AVR-Studio надо запоминать и хранить в EEPROM'е само-собой.

Не очень понятно что надо хранить? По описанию в протоколе, единственная хранимая настройка - полярность RESET. Хотя даже этого я ни в одном из "клонов" не видел.

Стандартный протокол предусматривает возможность задать частоту SPI 600Hz (для девайсов работающих от часового кварца с фузом предделителя частоты на 8, т.е. для случая когда чип работает на 4Khz).

Я как-то упустил (сейчас в голове некая каша "варится"), есть ли требование по частоте работы SPI в режиме программирования в зависимости от частоты работы целевого кристалла? Что-то я такое видел, но не помню детали.

AVRISP используется для прошивки конкретных устройств где напряжение таргета и так известно, или в крайнем случае его можно единожды измерить тестером.

Тестер у программиста скорее отсутствует чем присутствует. Имхо в случае траблов было бы неплохо оперативно знать состояние питания target.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Стандартный протокол предусматривает возможность задать частоту SPI 600Hz

Вот тогда и получается, что "железным" SPI такого не достичь. Тогда вылезает программная реализация с перебором пинов и отмериванием задержек. Так? Или я что-то недопонимаю?

 

Да, кажись начинаю въезжать.

Получается что для AVRISP на частоте 3.68МГц, SPI работает при значении параметра sck_dur=0..3 на "железе", а дальше программно. Для sck_dur=0..3 как раз получаем при SPI2X=0 и 4-х вариантах бит SPR[1:0] делители тактовой на 4, 16, 64, 128, что даёт частоты 921600, 230400, 57600, 28800. Как раз они указаны в формуле расчёта значений параметра PARAM_SCK_DURATION. Для остальных же sck_dur указана формула для расчёта, видимо, завязанная на их программную реализацию SPI. Пока не пойму что это за реализация, что такая странная формула вычисления параметра от частоты SPI (freq):

ceil(1/(2 * B * freq * T_AVRISP) - 10/B),

где B=12.; T_AVRISP=1/3686400Гц.

Может где-то эта реализация приведена в документации Atmel?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не очень понятно что надо хранить? По описанию в протоколе, единственная хранимая настройка - полярность RESET. Хотя даже этого я ни в одном из "клонов" не видел.

STK500 может хранить настройки наряжений таргета и Aref. Также вероятно должен хранить последнюю установленную скорость SPI. Насколько помню эти параметры не сбрасываются при вкл/откл питания. (уточню вечером).

 

есть ли требование по частоте работы SPI в режиме программирования в зависимости от частоты работы целевого кристалла? Что-то я такое видел, но не помню детали.

Частота SPI должна быть не выше 1/4 частоты целевого девайса.

 

Тестер у программиста скорее отсутствует чем присутствует. Имхо в случае траблов было бы неплохо оперативно знать состояние питания target.
У программиста который делает свои устройства сам - врятли нет тестера.

Из отрицательных сторон (так сказать доп. хлопоты) - лишний пин на разъеме, плюс некоторые программаторы могут блокировать работу когда видять Vtaget 0. (программаторы всмысле soft работающий с STK).

 

Вот тогда и получается, что "железным" SPI такого не достичь. Тогда вылезает программная реализация с перебором пинов и отмериванием задержек. Так? Или я что-то недопонимаю?

Я бы порекомендовал не заморачиваться программным SPI в первой реализации. Официальные прошивки AVRISP и те их не особо жаловали (по крайней мере версии 1.02-1.04 точно, на них пробовал) - установить давали, а на деле работало минимум 28.8k.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...