|
Сделал свой программатор и озадачился протоколом STK, Просветите кто в теме |
|
|
|
Oct 20 2008, 15:28
|
Местный
  
Группа: Свой
Сообщений: 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-ок (Армами занимался) и упустил "бразды". А тут снова возникла потребность.
|
|
|
|
|
Oct 20 2008, 19:43
|
Местный
  
Группа: Свой
Сообщений: 405
Регистрация: 4-10-04
Пользователь №: 777

|
Цитата(BSV @ Oct 20 2008, 23:18)  А можно схемкой полюбопытствовать? Давно хотелось сделать изолированный программатор для AVR. Мне кроме двух оптопар между FT232 и ATMEGA что-то ничего в голову не пришло  но так разве что до 3.3 В можно. Поэтому особенно интересно какое решение Вы нашли для поддержки сдвига уровней в таком диапазоне. Схемку пока не выкладываю, т.к. не всё проверил (софт делаю) и может поменяю чего. А вообще Analog Devices рулит  ADuM120x, ADG330x. Ещё стоит изолированный DC/DC (вот его то пока не купил) для получения от USB "вторичного" напряжения, которое используется не только для питания контроллера, но может использоваться и для запитывания target.
|
|
|
|
|
Oct 20 2008, 19:58
|

Знающий
   
Группа: Свой
Сообщений: 541
Регистрация: 11-04-05
Из: Москва
Пользователь №: 4 045

|
Цитата(Dimonira @ Oct 20 2008, 23:43)  Схемку пока не выкладываю, т.к. не всё проверил (софт делаю) и может поменяю чего. А вообще Analog Devices рулит  ADuM120x, ADG330x. Ещё стоит изолированный DC/DC (вот его то пока не купил) для получения от USB "вторичного" напряжения, которое используется не только для питания контроллера, но может использоваться и для запитывания target. Ну, ADuM - понятно, дороговато только. Про ADG330x тут что-то нехорошее писали, применяли их раньше? Из собственных воспоминаний по даташиту - питание с одной стороны должно быть всегда больше чем с другой. А наличие вторичного источника многое объясняет, спасибо.
--------------------
Дурак, занимающий высокий пост, подобен человеку на вершине горы - все ему кажется маленьким, а всем остальным кажется маленьким он сам. /Законы Мерфи/
|
|
|
|
|
Oct 21 2008, 14:20
|

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

|
Цитата(Dimonira @ Oct 20 2008, 20:35)  Т.е. STK500 получается работает (шьёт и читает) шустрее чем AVRISP. У STK500 и кварц, как я понял 7.3728 МГц (у меня, кстати, такой же), что вдвое больше чем у AVRISP. Макс скорость ISP у них одинаковая ~1Mhz. STK500 просто дополнительно должен (и может): 1. генерить клок для таргет процессора (сокета), до 3 с хвостиком Mhz. 2. и клок для PP режима. в AVRISP кварц 3.6864Mhz. Насчет кварца в STK500 уточню вечером. Цитата Выходит, всё же лучше кастрированный STK500? Если Вам только ISP, то не лучше.
|
|
|
|
|
Oct 21 2008, 15:11
|
Местный
  
Группа: Свой
Сообщений: 405
Регистрация: 4-10-04
Пользователь №: 777

|
Цитата(defunct @ Oct 21 2008, 18:20)  Макс скорость ISP у них одинаковая ~1Mhz. Ну, я так понимаю, это определяется скоростью обмена 115200 бит/с. Цитата(defunct @ Oct 21 2008, 18:20)  STK500 просто дополнительно должен (и может): 1. генерить клок для таргет процессора (сокета), до 3 с хвостиком Mhz. 2. и клок для PP режима. Я у себя сделал как и в схеме Prottoss-а - вывел дополнительно вывод PB1 на 3 контакт 10-пинового ISP. Так что можно тоже клок генерить. В своё время я делал нечто такое и в байт-бластере (как Real рекомендовал). Один раз, но всё же, это спасло контроллер при неправильном прошитии фуза выбора генератора тактовой. Вот только пока я не очень въехал, завязывать ли как-то настройку этого клока с протоколом STK? Там есть какие-то опции, связанные с генерацией такта. Пока не разобрался. Есть мысли? Или жёстко его как-то задать? Хотя, надо же тогда увязывать с частотой клока SPI, так что наверное надо как-то увязать. Цитата(defunct @ Oct 21 2008, 18:20)  Если Вам только ISP, то не лучше. В принципе в части ISP там большой разницы вроде нет. Что-то там связано опять же с тактом работы SPI, у них вроде по-разному, ещё не вникал. Цитата(BSV @ Oct 20 2008, 23:58)  Ну, ADuM - понятно, дороговато только. Ну, извините. Сотня с чем-то рябчиков дорого? Нельзя экономить на инструментах. Хотите сделать нормальный инструмент, надо немного потратиться. А если хотите сделать себе одну-две штуки, дык вообще можете сэмплами заказать бесплатно (я пока так и сделал). Цитата(BSV @ Oct 20 2008, 23:58)  Про ADG330x тут что-то нехорошее писали, применяли их раньше? Я не применял. Видимо пришло время  Нехороших отзывов как-то не попадалось. Так что надеюсь на AD. Пока вроде не подводил. Цитата(BSV @ Oct 20 2008, 23:58)  Из собственных воспоминаний по даташиту - питание с одной стороны должно быть всегда больше чем с другой. А наличие вторичного источника многое объясняет, спасибо. Вот именно. Имеем 5 В питания, к которой подключаем ту "половину" ADG, которая хочет большего питания чем другая. А другую подключаем на внешнее "общение" по ISP. Внешнее питание получается и будет меньше или равно, как положено.
|
|
|
|
|
Oct 21 2008, 15:27
|

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

|
Цитата(Dimonira @ Oct 21 2008, 18:00)  Ну, я так понимаю, это определяется скоростью обмена 115200 бит/с. Да все так. ISP протокол избыточный, на 1 байт данных STK протокола в среднем приходится 4 байта ISP протокола. чтобы пользовать макс доступную скорость UART'a необходимо чтобы SPI работал чуть быстрее 4x115200 Hz. Цитата Так что можно тоже клок генерить. ... Вот только пока я не очень въехал, завязывать ли как-то настройку этого клока с протоколом STK? Или жёстко его как-то задать? IMHO константной частоты достаточно. (управление частотой этого клока из STK500 GUI не имеет практической ценности если не планируете оформить устройство как EVM с сокетами). STK500 кстати еще умеет напряжение питания таргета регулировать. В STK500 много того, что у Вас не будет реализовано в железе, и как по мне лучше полноценный клон простого устройства, чем неполноценный - сложного. Цитата Что-то там связано опять же с тактом работы SPI, у них вроде по-разному, ещё не вникал. Что Вы имеете в виду? SPI mode (CPHA/CPOL) не может отличаться!
|
|
|
|
|
Oct 21 2008, 19:16
|
Местный
  
Группа: Свой
Сообщений: 405
Регистрация: 4-10-04
Пользователь №: 777

|
Цитата(defunct @ Oct 21 2008, 19:27)  Что Вы имеете в виду? SPI mode (CPHA/CPOL) не может отличаться! Я имею в виду частоту работы SPI. Если почитать описание параметра PARAM_SCK_DURATION, то там видно отличие STK500 от AVRISP. Там по-разному задаётся параметр. Я пока до этого не дошёл, но наскоком понять не получилось. Сначала, когда я ещё не читал протокол, была мысль сделать программную настройку частоты работы SPI своими средствами: например, поддержав свои некие команды настройки, хранимые в EEPROM и меняемые, допустим, через терминальную программу. Меня подтолкнуло к этому обсуждение в ветке программатора Petka пожелания сделать пониженную частоту SPI. Зачем? Тем более, если реализовывать SPI на "железе" (мой случай), то изменение частоты возможно в широких пределах (не понимаю, зачем вообще делали SPI программно во многих реализациях, если он есть "железный", в чём "прикол"? да и на "железном" легко в обратную сторону подключиться и зашить контроллер программатора, как я сейчас и делаю). Вот и не решу как прикрутить настройку частоты обмена по SPI. Вот ещё что. STK500 может изменять и измерять напряжение Vtarget. Я завёл его на вход АЦП и тоже думаю - изменять то я не могу, а измерять могу. AVRISP не может ни то, ни другое. Может в режиме STK500 можно, допустим, при измерении его сообщить, а при попытке изменить, отказать, вернув ошибку или ещё как-то.
|
|
|
|
|
Oct 21 2008, 21:06
|

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

|
Цитата Насчет кварца в STK500 уточню вечером. STK500 - 7.37Mhz. Цитата(Dimonira @ Oct 21 2008, 22:16)  Я имею в виду частоту работы SPI. Если почитать описание параметра PARAM_SCK_DURATION, то там видно отличие STK500 от AVRISP. Там по-разному задаётся параметр. Я пока до этого не дошёл, но наскоком понять не получилось. возможно это из-за кварца. Цитата например, поддержав свои некие команды настройки, хранимые в EEPROM и меняемые, допустим, через терминальную программу. Некие "свои" команды - это плохая идея. А конфигурацию которую вам задаст напр. AVR-Studio надо запоминать и хранить в EEPROM'е само-собой. Цитата Меня подтолкнуло к этому обсуждение в ветке программатора Petka пожелания сделать пониженную частоту SPI. Стандартный протокол предусматривает возможность задать частоту SPI 600Hz (для девайсов работающих от часового кварца с фузом предделителя частоты на 8, т.е. для случая когда чип работает на 4Khz). Цитата Вот ещё что. STK500 может изменять и измерять напряжение Vtarget. Я завёл его на вход АЦП и тоже думаю - изменять то я не могу, а измерять могу. AVRISP не может ни то, ни другое. Может в режиме STK500 можно, допустим, при измерении его сообщить, а при попытке изменить, отказать, вернув ошибку или ещё как-то. А смысл? В STK500 заложено считывание Vtarget только для того чтобы была обратная связь (т.е. чтобы можно было не отходя от кассы проверить установилось ли то напряжение которое мы попросили). AVRISP используется для прошивки конкретных устройств где напряжение таргета и так известно, или в крайнем случае его можно единожды измерить тестером.
|
|
|
|
|
Oct 22 2008, 05:12
|
Местный
  
Группа: Свой
Сообщений: 405
Регистрация: 4-10-04
Пользователь №: 777

|
Цитата(BSV @ Oct 21 2008, 23:21)  Тут есть один тонкий момент - если от USB плату отключат, а от таргета нет? До свидания буфер? ХЗ. Думаю, что сейчас, когда возился с платой и подключениями, у меня так было и не раз. Но пока ничего не случилось. Возможно, что соотношение питаний важно для правильной работы драйвера. Именно работы, а не существования  При отключении от USB никакой работы быть не может, так что неважно, правильно транслирует уровни драйвер или нет. Главное, чтобы жил. Цитата(defunct @ Oct 22 2008, 01:06)  Некие "свои" команды - это плохая идея. Ну почему же? Если добавляется какой-то полезный функционал, которого нет в стандартном девайсе? Не хотите - не пользуетесь, это же ни к чему не принуждает. Цитата(defunct @ Oct 22 2008, 01:06)  А конфигурацию которую вам задаст напр. AVR-Studio надо запоминать и хранить в EEPROM'е само-собой. Не очень понятно что надо хранить? По описанию в протоколе, единственная хранимая настройка - полярность RESET. Хотя даже этого я ни в одном из "клонов" не видел. Цитата(defunct @ Oct 22 2008, 01:06)  Стандартный протокол предусматривает возможность задать частоту SPI 600Hz (для девайсов работающих от часового кварца с фузом предделителя частоты на 8, т.е. для случая когда чип работает на 4Khz). Я как-то упустил (сейчас в голове некая каша "варится"), есть ли требование по частоте работы SPI в режиме программирования в зависимости от частоты работы целевого кристалла? Что-то я такое видел, но не помню детали. Цитата(defunct @ Oct 22 2008, 01:06)  AVRISP используется для прошивки конкретных устройств где напряжение таргета и так известно, или в крайнем случае его можно единожды измерить тестером. Тестер у программиста скорее отсутствует чем присутствует. Имхо в случае траблов было бы неплохо оперативно знать состояние питания target.
|
|
|
|
|
Oct 22 2008, 06:44
|
Местный
  
Группа: Свой
Сообщений: 405
Регистрация: 4-10-04
Пользователь №: 777

|
Цитата(defunct @ Oct 22 2008, 01:06)  Стандартный протокол предусматривает возможность задать частоту 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?
|
|
|
|
|
Oct 22 2008, 16:18
|

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

|
Цитата(Dimonira @ Oct 22 2008, 08:12)  Не очень понятно что надо хранить? По описанию в протоколе, единственная хранимая настройка - полярность RESET. Хотя даже этого я ни в одном из "клонов" не видел. STK500 может хранить настройки наряжений таргета и Aref. Также вероятно должен хранить последнюю установленную скорость SPI. Насколько помню эти параметры не сбрасываются при вкл/откл питания. (уточню вечером). Цитата есть ли требование по частоте работы SPI в режиме программирования в зависимости от частоты работы целевого кристалла? Что-то я такое видел, но не помню детали. Частота SPI должна быть не выше 1/4 частоты целевого девайса. Цитата Тестер у программиста скорее отсутствует чем присутствует. Имхо в случае траблов было бы неплохо оперативно знать состояние питания target. У программиста который делает свои устройства сам - врятли нет тестера. Из отрицательных сторон (так сказать доп. хлопоты) - лишний пин на разъеме, плюс некоторые программаторы могут блокировать работу когда видять Vtaget 0. (программаторы всмысле soft работающий с STK). Цитата(Dimonira @ Oct 22 2008, 09:44)  Вот тогда и получается, что "железным" SPI такого не достичь. Тогда вылезает программная реализация с перебором пинов и отмериванием задержек. Так? Или я что-то недопонимаю? Я бы порекомендовал не заморачиваться программным SPI в первой реализации. Официальные прошивки AVRISP и те их не особо жаловали (по крайней мере версии 1.02-1.04 точно, на них пробовал) - установить давали, а на деле работало минимум 28.8k.
|
|
|
|
|
Oct 22 2008, 17:08
|
Местный
  
Группа: Свой
Сообщений: 405
Регистрация: 4-10-04
Пользователь №: 777

|
Цитата(defunct @ Oct 22 2008, 20:18)  STK500 может хранить настройки наряжений таргета и Aref. Также вероятно должен хранить последнюю установленную скорость SPI. Насколько помню эти параметры не сбрасываются при вкл/откл питания. (уточню вечером). А как можно это проверить? Я когда смотрел лог обмена, так софт вроде устанавливает кучу параметров, потом читает проверяет. Разве есть там возможность только прочитать "состояние"? Цитата(defunct @ Oct 22 2008, 20:18)  Из отрицательных сторон (так сказать доп. хлопоты) - лишний пин на разъеме, плюс некоторые программаторы могут блокировать работу когда видять Vtaget 0. (программаторы всмысле soft работающий с STK). Какой лишний пин? Напряжение target заводится на разъём ISP и на 10-пиновый и на 6-пиновый. А напряжение то я как раз измерять буду, т.е. как раз буду давать результат измерения на запрос. Или я не очень понял о чём речь? Цитата(defunct @ Oct 22 2008, 20:18)  Я бы порекомендовал не заморачиваться программным SPI в первой реализации. Официальные прошивки AVRISP и те их не особо жаловали (по крайней мере версии 1.02-1.04 точно, на них пробовал) - установить давали, а на деле работало минимум 28.8k. Т.е. получается, что частоты ниже "не востребованы"? А как вообще определяется что надо софту выставить? Это ручная настройка оператором или там какая-то автоматика в зависимости от чего-то? Цитата(BSV @ Oct 20 2008, 23:58)  Ну, ADuM - понятно, дороговато только. Про ADG330x тут что-то нехорошее писали, применяли их раньше? Из собственных воспоминаний по даташиту - питание с одной стороны должно быть всегда больше чем с другой. А наличие вторичного источника многое объясняет, спасибо. Возвращаясь к ценам. Прошлый раз наврал малость, на самом деле дешевле. Сегодня как раз ездил в Элтех забирать кое-какие деталюшки. Так вот ADuM1201 ~73р, ADG3304 ~57р, DC/DC-шка типа AM1DR-0505SH30Z (на 3kV оказалась существенно дешевле чем на 1kV) ~110р, а типа P6CG-0505ELF ~143р. Так что имхо не дорого. Самые большие траты - на изготовление печати с двусторонней маской и шелкографией с одной стороны. Но теперь будет дешевле, т.к. подготовки производства не надо. Правда наверное переделывать буду, есть некоторые мысли по улучшению.
|
|
|
|
|
Oct 22 2008, 17:09
|

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

|
Цитата(Dimonira @ Oct 22 2008, 19:49)  Какой лишний пин? Напряжение target заводится на разъём ISP и на 10-пиновый и на 6-пиновый. Стандартного разъема. Но в реальных устройствах бывает нежелательно либо некуда прилепить VTarget. Цитата А напряжение то я как раз измерять буду, т.е. как раз буду давать результат измерения на запрос. Или я не очень понял о чём речь? Речь о том, что например я редко где вывожу Vtarget и меня очень напрягает когда студия или какой-то другой программатор / отладчик начинает кривляться, мол шить ничего не буду т.к. у вас Vtarget 0. Свое неудобство устраняю так - вешаю вход Vtarget адаптера на его Vcc через резистор 510om и все остаются довольны. Кто сталкивался с подобным меня поймет. Цитата Т.е. получается, что частоты ниже "не востребованы"? В стандартных применениях - internal osc с заводскими настройками / шустрый кварц - да - не востребованы. Цитата А как вообще определяется что надо софту выставить? Это ручная настройка оператором или там какая-то автоматика в зависимости от чего-то? Ручная (если программатор не может связаться с МК он выдает сообщение чтобы проверили частоту).
|
|
|
|
|
Oct 25 2008, 17:31
|
Местный
  
Группа: Свой
Сообщений: 405
Регистрация: 4-10-04
Пользователь №: 777

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

кекс
     
Группа: Свой
Сообщений: 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 меняться не будет.
|
|
|
|
|
Oct 25 2008, 21:08
|
Местный
  
Группа: Свой
Сообщений: 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 имеет размерность в байт. Правильно?
|
|
|
|
|
Oct 25 2008, 22:05
|

кекс
     
Группа: Свой
Сообщений: 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 попытки. Не зачем мучить чип. Если все Ок то синхронизируется сразу.
|
|
|
|
|
Oct 25 2008, 22:54
|
Местный
  
Группа: Свой
Сообщений: 405
Регистрация: 4-10-04
Пользователь №: 777

|
Цитата(defunct @ Oct 26 2008, 02:05)  Дык мы же не знаем какой клок у тагет процессора. Студия ждет достаточно долго ~500ms. Не знаем, но как-то сомнительно, что целевой контроллер работает на 20 Гц тактовой. Я посчитал, что хотябы раз в 10 то уж побыстрее должен. Цитата(defunct @ Oct 26 2008, 02:05)  стоп, тут не задержка должна быть, а: 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). Да я не про это. Кстати, импульс не RESET делается, а SCK. Я про паузу между попытками синхронизации. Т.е. один раз попытался, не вышло, подождал и снова пробуешь. А время это задаётся Студией (протоколом). И задаётся оно равным 25 мс. Цитата(defunct @ Oct 26 2008, 02:05)  Это сильно много. Достаточно 3-4 попытки. Не зачем мучить чип. Если все Ок то синхронизируется сразу. Это количество задаётся протоколом, - параметр synchLoops команды CMD_ENTER_PROGMODE_ISP. А он передаётся равным 32. Так что я не придумываю, а просто следую протоколу, т.е. беру то значение, которое шлёт Студия. Я пробовал 64 только потому, что не мог понять почему не работает. ------------------------- Блин, с подтяжкой 10к по MISO с внешней стороны преобразователя уровней, программатор Prottoss-а и с этим экземпляром стал глючить - при верификации зашитого даёт ошибку по нулевому адресу. Пришлось подтяжку пока вынести на панельку с испытуемым контроллером Тини85, поскольку я её отключаю, когда шью сам программатор. ---------------------- Нет, всё-таки параметр RxStartAddr в команде CMD_SPI_MULTI стартует с нуля. Так реализовано и у Dopera, и у Tuxgraphics (Petka аналогично).
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|