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

 
 
> Программирование AVR через JTAG, Кто-нибудь имеет информацию конкретно о протоколе JTAG для AVR?
Polaris
сообщение Mar 13 2008, 11:15
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964



Уважаемые знатоки!

С целью уменьшения числа коннекторов на плате озаботился следующим вопросом - можно ли программировать AVR через JTAG? Причем интересует не использование сторонних отладчиков, а конкретно протокол общения непосредственно с AVR - то есть, мне не нужен протокол работы JTAG ICE, я хочу попытаться реализовать программирование на логическом уровне. С чем это связано? Сейчас на платах устройств приходится иметь два коннектора - один под JTAG для отладки (а серии у нас небольшие, изменения в прошивке частые, поэтому отказаться от возможности отладки не могу), второй - под SPI, чтобы можно было шить устройства в партии. Причем шить не только с компьютера, но и в тестирующем устройстве, которое само сделано на AVR, в нем хранится актуальная прошивка, которая и загружается в контролируемое изделие, для нас это очень удобно. Но в итоге имеем на плате один лишний разъем, который занимает место, портит внешний вид и так далее. Хотелось бы свести программирование AVR к работе через JTAG. Я так полагаю, что раз JTAG ICE это умеет делать, то задача вполне реальная. Вопрос в том, что ковыряться в прошивке JTAG ICE не хочется, времени не хватает, а никто под эту задачу ресурсов не выделит sad.gif Возможно, что где-то в сети уже есть наработки. Сам я попробовал искать, но слишком уж много хлама, после нескольких десятков сайтов с одними и теми же клонами JTAG ICE и одной и той же прошивкой в хексе, я это дело бросил.
Надеюсь, что найдется человек, который укажет, где этот протокол можно взять. С остальным я справлюсь сам.

Заранее благодарен.
Go to the top of the page
 
+Quote Post
3 страниц V   1 2 3 >  
Start new topic
Ответов (1 - 42)
Qwertty
сообщение Mar 13 2008, 11:35
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Цитата(Polaris @ Mar 13 2008, 14:15) *
Надеюсь, что найдется человек, который укажет, где этот протокол можно взять. С остальным я справлюсь сам.

Например в книге Евстифеев "Микроконтроллеры AVR семейств Tiny и Mega фирмы ATMEL"
Находится в сети за 5 минут.
Go to the top of the page
 
+Quote Post
Igor26
сообщение Mar 13 2008, 11:39
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 10-02-05
Пользователь №: 2 544



Цитата(Polaris @ Mar 13 2008, 14:15) *
Уважаемые знатоки!

С целью уменьшения числа коннекторов на плате озаботился следующим вопросом - можно ли программировать AVR через JTAG? Причем интересует не использование сторонних отладчиков, а конкретно протокол общения непосредственно с AVR - то есть, мне не нужен протокол работы JTAG ICE, я хочу попытаться реализовать программирование на логическом уровне. С чем это связано? Сейчас на платах устройств приходится иметь два коннектора - один под JTAG для отладки (а серии у нас небольшие, изменения в прошивке частые, поэтому отказаться от возможности отладки не могу), второй - под SPI, чтобы можно было шить устройства в партии. Причем шить не только с компьютера, но и в тестирующем устройстве, которое само сделано на AVR, в нем хранится актуальная прошивка, которая и загружается в контролируемое изделие, для нас это очень удобно. Но в итоге имеем на плате один лишний разъем, который занимает место, портит внешний вид и так далее. Хотелось бы свести программирование AVR к работе через JTAG. Я так полагаю, что раз JTAG ICE это умеет делать, то задача вполне реальная. Вопрос в том, что ковыряться в прошивке JTAG ICE не хочется, времени не хватает, а никто под эту задачу ресурсов не выделит sad.gif Возможно, что где-то в сети уже есть наработки. Сам я попробовал искать, но слишком уж много хлама, после нескольких десятков сайтов с одними и теми же клонами JTAG ICE и одной и той же прошивкой в хексе, я это дело бросил.
Надеюсь, что найдется человек, который укажет, где этот протокол можно взять. С остальным я справлюсь сам.

Заранее благодарен.

DS на Мега128 начиная со страницы 306.Programming Via JTAG specific
JTAG Interface

P.S. Чтоб не ставить разъем JTAG на плату, я в процессе отладки устройства напиваю МГТФом JTAG-разъём непосредственно к ножкам процессора. Одна плата ведь у программиста есть всегда. Ну и пусть JTAG-разъём на проводах болтается!
Go to the top of the page
 
+Quote Post
defunct
сообщение Mar 13 2008, 11:45
Сообщение #4


кекс
******

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



Цитата
можно ли программировать AVR через JTAG?

Можно

Цитата(Igor26 @ Mar 13 2008, 13:39) *
P.S. Чтоб не ставить разъем JTAG на плату, я в процессе отладки устройства напиваю МГТФом JTAG-разъём непосредственно к ножкам процессора. Одна плата ведь у программиста есть всегда. Ну и пусть JTAG-разъём на проводах болтается!

Я напротив предусматриваю JTAG разъем на всех устройствах.
Занимает не так уж и много места на плате - всего 6 пинов (TDO, TDI, TMS, TCK, Vcc, GND).
В конечных устройствах просто не запаиваются разъемы.

Болтающиеся на МГФе конструкции - ненадежные (даже для программиста) ;>
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Mar 13 2008, 11:52
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Если оставить только JTAG, то его будет не отключить smile.gif Мало ли ног будет не хватать...
Go to the top of the page
 
+Quote Post
Polaris
сообщение Mar 13 2008, 12:16
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964



Цитата(Igor26 @ Mar 13 2008, 13:39) *
DS на Мега128 начиная со страницы 306.Programming Via JTAG specific
JTAG Interface

P.S. Чтоб не ставить разъем JTAG на плату, я в процессе отладки устройства напиваю МГТФом JTAG-разъём непосредственно к ножкам процессора. Одна плата ведь у программиста есть всегда. Ну и пусть JTAG-разъём на проводах болтается!

Да, действительно все описано!
Спасибо большое, буду разбираться!
Go to the top of the page
 
+Quote Post
sensor_ua
сообщение Mar 13 2008, 13:07
Сообщение #7


Профессионал
*****

Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387



Вообще-то такое уже делалось
http://home.telkomsa.net/antera/
http://spijtag.com/ru/taxonomy_menu/22/30/31
и чуть-чуть другое - RabbitISP
http://www-robotics.usc.edu/~ahoward/downl...isp-0.1-src.tgz

Кроме того существует тулза от Atmel для программирования через JTAG ICE -
Прикрепленные файлы
Прикрепленный файл  jtag_programmer.zip ( 503.61 килобайт ) Кол-во скачиваний: 127
 


--------------------
aka Vit
Go to the top of the page
 
+Quote Post
Igor26
сообщение Mar 14 2008, 07:31
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 10-02-05
Пользователь №: 2 544



Цитата
Я напротив предусматриваю JTAG разъем на всех устройствах.
Занимает не так уж и много места на плате - всего 6 пинов (TDO, TDI, TMS, TCK, Vcc, GND).
В конечных устройствах просто не запаиваются разъемы.

Болтающиеся на МГФе конструкции - ненадежные (даже для программиста) ;>

Если жесткие требования по габаритам, тогда ставить JTAG-разъём не пойдет. Вот на такие девайсы разъем на МГТФе - самое оно. Ну отвалился провод раз в месяц, ну подпаял его на место, делов то! Опять же, если в конечном устройстве используются все каналы АЦП, то JTAG работать не будет. Но это легко обходится.
А вообще JTAG вещь часто просто не заменимая. И при отладке программы, и при ремонте сложного устройства. Лично я не ставлю этот разъем только в случае озвученном выше(габариты), в сложных устройствах ставлю ВСЕГДА.
Go to the top of the page
 
+Quote Post
GDI
сообщение Mar 14 2008, 11:49
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Внесу свое имхо... заливать прошивку можно и через бутлоадер, т.е. через любой(!) интерфейс. на avrfreaks.net я встречал 1-wire бутлоадер, т.е. для него нужно вообще всего 2 провода, там была и программа для ПК. Т.е. можно оставить разъем JTAG и заливать через него программу при производстве и для отладки, а обновлять прошивку через бутлоадер.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
Polaris
сообщение Mar 17 2008, 16:03
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964



Цитата(GDI @ Mar 14 2008, 13:49) *
Внесу свое имхо... заливать прошивку можно и через бутлоадер, т.е. через любой(!) интерфейс. на avrfreaks.net я встречал 1-wire бутлоадер, т.е. для него нужно вообще всего 2 провода, там была и программа для ПК. Т.е. можно оставить разъем JTAG и заливать через него программу при производстве и для отладки, а обновлять прошивку через бутлоадер.

А каким образом в изначально девственно чистом кристалле материализуется бутлоадер??

Цитата(sensor_ua @ Mar 13 2008, 15:07) *
Вообще-то такое уже делалось
http://home.telkomsa.net/antera/
http://spijtag.com/ru/taxonomy_menu/22/30/31
и чуть-чуть другое - RabbitISP
http://www-robotics.usc.edu/~ahoward/downl...isp-0.1-src.tgz

Кроме того существует тулза от Atmel для программирования через JTAG ICE -

Спасибо за ссылки!
Через JTAG ICE рассматривать буду в последнюю очередь по указанном выше причинам...
Go to the top of the page
 
+Quote Post
GDI
сообщение Mar 18 2008, 07:17
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



Цитата
А каким образом в изначально девственно чистом кристалле материализуется бутлоадер??


Цитата
Т.е. можно оставить разъем JTAG и заливать через него программу при производстве


Внимательнее читать надо... а смысл всего мною ранее написанного сводится к тому, что не надо реализовывать отдельно программу и прошивку другого контроллера для того чтобы прошивать целевую систему используя JTAG, для этого придумали бутлоадеры. Т.е. чтобы
Цитата
шить не только с компьютера, но и в тестирующем устройстве, которое само сделано на AVR, в нем хранится актуальная прошивка, которая и загружается в контролируемое изделие
вам нужен бутлоадер исходники которых открыты и в великом множестве лежат на просторах интернет.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
Polaris
сообщение Mar 18 2008, 08:12
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964



Цитата(GDI @ Mar 18 2008, 09:17) *
Внимательнее читать надо... а смысл всего мною ранее написанного сводится к тому, что не надо реализовывать отдельно программу и прошивку другого контроллера для того чтобы прошивать целевую систему используя JTAG, для этого придумали бутлоадеры. Т.е. чтобы вам нужен бутлоадер исходники которых открыты и в великом множестве лежат на просторах интернет.

Это Вы внимательнее читайте. Откуда в чистом фабричном кристалле появится бутлоадер без использования сторонних средств программирования? Об этом и речь в теме. Как с минимальными затратами ресурсов загрузить в кристалл тот же Ваш бутлоадер. И исходники бутлоадеров мне не нужны, у меня свой есть, позволяет квалификация. Вас, извините, про Фому спросили, а Вы про Ерему.
Go to the top of the page
 
+Quote Post
GDI
сообщение Mar 18 2008, 08:40
Сообщение #13


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



На то и форум, чтобы предлагать и другие пути решения проблем, т.е. говорить и "про Ерёму"... smile.gif


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
Polaris
сообщение Mar 18 2008, 09:13
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964



Цитата(GDI @ Mar 18 2008, 10:40) *
На то и форум, чтобы предлагать и другие пути решения проблем, т.е. говорить и "про Ерёму"... smile.gif

Сорри, что-то я нервный с утра smile.gif Но вообще мне именно по голому кристаллу решение интересно. Так, чтобы и отлаживать, и писать можно было. А то плата может с два спичечных коробка быть, и требовать два немелких разъема
Go to the top of the page
 
+Quote Post
GDI
сообщение Mar 18 2008, 09:47
Сообщение #15


Профессионал
*****

Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008



У нас видал подобную плату, как раз с 2 коробка, так там стоит для программирования какой то мелкий разъем на 10 контактов с ключем, но размером как 4 пина обычного IDC, модель разъема к сожалению подсказать не могу, т.к. у меня нет доступа к документации на плату.


--------------------
http://www.embedders.org Блоги разработчиков электроники.
Go to the top of the page
 
+Quote Post
Diusha
сообщение Jan 4 2009, 14:55
Сообщение #16


Вечный студент
****

Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262



А не знает ли кто, с какой частотой на АВР можно гнать сигналы? В ДШ ЖТАГовских характеристик нет sad.gif

Кстати, Polaris, получилось?
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jan 4 2009, 19:40
Сообщение #17


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



В этом смысле DBW класс!!!
Один 6 pin разъём и на программирование и на отладку и ног у однокристалки не отнимает. И в режиме отладки работает устойчиво.
Go to the top of the page
 
+Quote Post
rvk
сообщение Jan 5 2009, 08:31
Сообщение #18


Частый гость
**

Группа: Свой
Сообщений: 165
Регистрация: 13-05-06
Из: Камышин
Пользователь №: 17 067



Цитата(Diusha @ Jan 4 2009, 17:55) *
А не знает ли кто, с какой частотой на АВР можно гнать сигналы? В ДШ ЖТАГовских характеристик нет sad.gif

Кстати, Polaris, получилось?

Для JTAG ICE в IAR стоит максимум 540KHz, а на практике JTAG ICE MKII однозначно быстрее работает.
Можно предположить что в районе 1MHz.
Go to the top of the page
 
+Quote Post
Diusha
сообщение Jan 5 2009, 15:05
Сообщение #19


Вечный студент
****

Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262



Цитата(rvk @ Jan 5 2009, 11:31) *
Для JTAG ICE в IAR стоит максимум 540KHz, а на практике JTAG ICE MKII однозначно быстрее работает.
Можно предположить что в районе 1MHz.

Cпасибо! Уже информация
Go to the top of the page
 
+Quote Post
Diusha
сообщение Jan 6 2009, 04:47
Сообщение #20


Вечный студент
****

Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262



Сразу оговорюсь: JTAG ICE и т.п. просьба не предлагать, мне надо свое

В ДШ программирование по JTAG описано (мягко говоря) сжато, есть неоднозначности. Короче, не получилось.
Вообще, связь с АВРкой есть: (1) при записи команды в Instruction Register (TAP в состоянии Shift-IR) с TDO читается 0х01, как и должно быть; (2) чип нормально ресетится и выходит из этого состояния соотв. командами.

А теперь пытаюсь что-нибудь прочитать из чипа (Flash, EEPROM, Signature). Дейсвую по ДШ:
Цитата
28.7.13 Entering Programming Mode
1. Enter JTAG instruction AVR_RESET and shift 1 in the Reset Register.
2. Enter instruction PROG_ENABLE and shift 0b1010_0011_0111_0000 in the Program-
ming Enable Register

Цитата
28.7.23 Reading the Signature Bytes
1. Enter JTAG instruction PROG_COMMANDS.
2. Enable Signature byte read using programming instruction 9a.
3. Load address 0x00 using programming instruction 9b.
4. Read first signature byte using programming instruction 9c.

Цитата
28.7.14 Leaving Programming Mode
1. Enter JTAG instruction PROG_COMMANDS.
2. Disable all programming instructions by using no operation instruction 11a.
3. Enter instruction PROG_ENABLE and shift 0b0000_0000_0000_0000 in the program-
ming Enable Register.
4. Enter JTAG instruction AVR_RESET and shift 0 in the Reset Register.


Вопросы:

1. Каким концом в регистр PROG_COMMANDS (0x5) надо совать команды, которые даны в таблице «JTAG Programming Instruction», т.е. 1-й бит слева или справа? Пробовал по-всякому. Самое смешное, какое-то шевеление (но не то) появилось, когда (случайно) «9a. Enter Signature Byte Read» я посылал первым левый бит, а все остальное – 1-м правый

2. Запись в таблице в графе "TDI Sequence" (в одной ячейке) вроде
0100011_10000000
0110001_10000000
0110011_10000000
0110011_10000000
следует понимать, что отправлять надо все приведенные TDI Sequence или любую из них?

3. А может я вообще что-то не так делаю?
Go to the top of the page
 
+Quote Post
rvk
сообщение Jan 6 2009, 05:29
Сообщение #21


Частый гость
**

Группа: Свой
Сообщений: 165
Регистрация: 13-05-06
Из: Камышин
Пользователь №: 17 067



Цитата(Diusha @ Jan 6 2009, 07:47) *
1. Каким концом в регистр PROG_COMMANDS (0x5) надо совать команды, которые даны в таблице «JTAG Programming Instruction», т.е. 1-й бит слева или справа? Пробовал по-всякому. Самое смешное, какое-то


As a definition in this datasheet, the LSB is shifted in and out first of all Shift Registers.

То есть младший бит первый.
Go to the top of the page
 
+Quote Post
Diusha
сообщение Jan 6 2009, 07:42
Сообщение #22


Вечный студент
****

Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262



Цитата(rvk @ Jan 6 2009, 08:29) *
As a definition in this datasheet, the LSB is shifted in and out first of all Shift Registers.

То есть младший бит первый.

Но никто не говорил, с какого конца в записи 0110001_10000000 младший. Т.е. нигде не сказано, что эту запись следует воспринимать как двоичное число, а не просто последовательность, как, например
Цитата
• At the TMS input, apply the sequence 1, 1, 0, 0 at the rising edges of TCK...

В данном случае "младший бит" слева
Go to the top of the page
 
+Quote Post
rvk
сообщение Jan 6 2009, 09:02
Сообщение #23


Частый гость
**

Группа: Свой
Сообщений: 165
Регистрация: 13-05-06
Из: Камышин
Пользователь №: 17 067



Младший справа по тексту однозначно. Поэтому число 0110001_10000000 должно вдвигаться в проц в таком порядке,
(последовательность слева направо, левый ноль первый). Уж не знаю как еще сказать поточнее.
Итак слева направо последовательность вдвигания в JTAG:
первый бит 0 0 0 0 0 0 0 1 1 0 0 0 1 1 0 последний бит
Думаю вот так. Как вариант можно взять JTAG_ICE подключить его к процессору, и используя документ http://www.atmel.com/dyn/resources/prod_do...nts/doc2524.pdf это описание протокола между AVRSTUDIO и JTAG_ICE, подавать ему свои команды, и смотреть,что выдается на процессор.

Насчет справа слева, есть разница. Когда приводится просто число 0110001, младший бит справа, а когда стоит слово sequence,
что означает последовательность, тогда 1,0,0,1 первая цифра слева и есть то что вводится первым. Думаю в русском тексте
тоже все также примерно строится...

Сообщение отредактировал rvk - Jan 6 2009, 09:13
Go to the top of the page
 
+Quote Post
Diusha
сообщение Jan 6 2009, 09:43
Сообщение #24


Вечный студент
****

Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262



Цитата(rvk @ Jan 6 2009, 12:02) *
Младший справа по тексту однозначно.

Вы это знаете (если да, то откуда?) или предполагаете?

Цитата(rvk @ Jan 6 2009, 12:02) *
Как вариант можно взять JTAG_ICE ...

Взять негде

Цитата(rvk @ Jan 6 2009, 12:02) *
Насчет справа слева, есть разница. Когда приводится просто число 0110001, младший бит справа, а когда стоит слово sequence,
что означает последовательность, тогда 1,0,0,1 первая цифра слева и есть то что вводится первым.

Беда в том, что в таблице написно "0110001_10000000", о том, что это число нигде не сказано, графа называется "TDI Sequence"
Go to the top of the page
 
+Quote Post
singlskv
сообщение Jan 6 2009, 11:47
Сообщение #25


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(Diusha @ Jan 6 2009, 07:47) *
Сразу оговорюсь: JTAG ICE и т.п. просьба не предлагать, мне надо свое

А Byte Blaster хотя бы есть ?

Можете скачать вот эти исходники:
http://www.urjtag.org/
это реинкарнация вот этого:
http://openwince.sourceforge.net/jtag/

Вам от туда понадобятся TAP драйвер и описание регистров mega128.
Ну и при наличии Byte Blaster, Вы можете просто потренироваться давать
разные команды из командной строки.
Go to the top of the page
 
+Quote Post
Diusha
сообщение Jan 6 2009, 13:04
Сообщение #26


Вечный студент
****

Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262



Цитата(singlskv @ Jan 6 2009, 14:47) *
А Byte Blaster хотя бы есть ?
... Вы можете просто потренироваться давать
разные команды

Нету. Команды я и без него могу давать. Вопрос-то в другом
Go to the top of the page
 
+Quote Post
Polaris
сообщение Jan 6 2009, 13:09
Сообщение #27


Местный
***

Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964



Цитата(Diusha @ Jan 4 2009, 16:55) *
А не знает ли кто, с какой частотой на АВР можно гнать сигналы? В ДШ ЖТАГовских характеристик нет sad.gif

Кстати, Polaris, получилось?


Да, получилось, пока окончательно не отладил, потому что все делается в фоновом режиме (задача не основная, делается для собственного удобства), плюс там полный комплекс, пишется и по JTAG и по SPI, протокол STK500, плюс интерфейсная часть на компе со складированием прошивок и результатов в базу, но можно запустить AVR Studio, прошить через STK500 как бы (на самом деле через JTAG) фузы, считать сигнатуры, прошить флэш и EEPROM. Могу сбросит часть исходников, касающихся непосредственно работы с JTAG.
Go to the top of the page
 
+Quote Post
Diusha
сообщение Jan 6 2009, 13:17
Сообщение #28


Вечный студент
****

Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262



Polaris,
может Вы тогда сможете ответить на мои вопросы?
Эх, не знаю, как дать ссылку непосредственно на пост... Короче, в этой ветке, послано сегодня в 7:47
Go to the top of the page
 
+Quote Post
Polaris
сообщение Jan 6 2009, 13:19
Сообщение #29


Местный
***

Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964



Цитата(Diusha @ Jan 6 2009, 15:17) *
Polaris,
может Вы тогда сможете ответить на мои вопросы?
Эх, не знаю, как дать ссылку непосредственно на пост... Короче, в этой ветке, послано сегодня в 7:47

Сейчас не смогу ответить, все исходники и доки на работе, а по памяти врать не хочу smile.gif Восьмого выйду на работу - отвечу. И куски кода с вычитыванием тоже смогу послать.
Go to the top of the page
 
+Quote Post
Diusha
сообщение Jan 6 2009, 13:27
Сообщение #30


Вечный студент
****

Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262



Цитата(Polaris @ Jan 6 2009, 16:19) *
Восьмого выйду на работу - отвечу. И куски кода с вычитыванием тоже смогу послать.

ОК, спасибо, буду ждать!
Go to the top of the page
 
+Quote Post
Maik-vs
сообщение Jan 7 2009, 11:11
Сообщение #31


Местный
***

Группа: Участник
Сообщений: 246
Регистрация: 4-12-06
Пользователь №: 23 101



Цитата(Polaris @ Mar 13 2008, 14:15) *
Уважаемые знатоки!

С целью уменьшения числа коннекторов на плате озаботился следующим вопросом - можно ли программировать AVR через JTAG?
...

Почему нельзя разъём для программирования использовать в целевой системе как рабочий? Я программирую через SPI, и потом этот разъём работает в устройстве, ноги-то обычные. Только одна нога - ресет - остаётся висеть. Конечно, на них выводятся "не рискованные" сигналы, чтобы часом не пожечь.
Go to the top of the page
 
+Quote Post
Diusha
сообщение Jan 9 2009, 12:59
Сообщение #32


Вечный студент
****

Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262



Цитата(Polaris @ Jan 6 2009, 16:19) *
Восьмого выйду на работу - отвечу. И куски кода с вычитыванием тоже смогу послать.

Я прошу прощения за назойливость, но уже девятое...
Go to the top of the page
 
+Quote Post
_kp
сообщение Jan 11 2009, 14:05
Сообщение #33





Группа: Новичок
Сообщений: 1
Регистрация: 14-03-07
Пользователь №: 26 160



Есть, еще не упомянутый тут, кроссплатформенный пакет cdk-avr-tools,
в котором есть программатор через JTAG - javr.
В программаторе есть консольный интерактивный и пакетный режимы. Быстро и надежно работает, но без украшательств.

В сборке cdk-avr-tools-6.1-20060625.src.rpm есть и исходники и документация и готовые бинарники под windows и linux.

Простейший jtag программатор - кабель из нескольких проводов в LPT порт (но же altera-byte-blaster)

Сообщение отредактировал _kp - Jan 11 2009, 14:07
Go to the top of the page
 
+Quote Post
Polaris
сообщение Jan 11 2009, 21:58
Сообщение #34


Местный
***

Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964



Цитата(Diusha @ Jan 9 2009, 14:59) *
Я прошу прощения за назойливость, но уже девятое...

Извините sad.gif У нас Интернета в связи с праздниками не было, надеюсь, что завтра появится. На крайний случай возьму флэшку, отправлю из дома.
Go to the top of the page
 
+Quote Post
Polaris
сообщение Jan 13 2009, 07:18
Сообщение #35


Местный
***

Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964



Цитата(Diusha @ Jan 6 2009, 06:47) *
1. Каким концом в регистр PROG_COMMANDS (0x5) надо совать команды, которые даны в таблице «JTAG Programming Instruction», т.е. 1-й бит слева или справа? Пробовал по-всякому. Самое смешное, какое-то шевеление (но не то) появилось, когда (случайно) «9a. Enter Signature Byte Read» я посылал первым левый бит, а все остальное – 1-м правый

2. Запись в таблице в графе "TDI Sequence" (в одной ячейке) вроде
0100011_10000000
0110001_10000000
0110011_10000000
0110011_10000000
следует понимать, что отправлять надо все приведенные TDI Sequence или любую из них?

3. А может я вообще что-то не так делаю?


1. За отправку команд у меня отвечает такая функция:
void Send_Instruction(TWord size, TByte data)
{
TMS_Low(); // Run-Test / Idle
TMS_Low(); // Run-Test / Idle
TMS_High(); // Select DR-Scan
TMS_High(); // Select IR-Scan
TMS_Low(); // Capture IR
TMS_Low(); // Shift IR
Shift_Data_Array(size, &data);
TMS_High(); // Update-IR -> New Instruction in Effect
TMS_Low(); // Run-Test / Idle
TMS_Low(); // Run-Test / Idle
}

Использую я ее так например: Send_Instruction(4,IDCODE);

Судя по тому, что я написал в Shift_Data_Array() такое:
...
if (bd&0x01)
macBitOn(PORT_JTAG,pinTDI);
else
macBitOff(PORT_JTAG,pinTDI);

JTAG_Delay();
macBitOn(PORT_JTAG,pinTCK);
JTAG_Delay();
macBitOff(PORT_JTAG,pinTCK);
bd>>=1;
...
первым идет младший бит.

2. Нужно подавать все указанные последовательности

Вот, например, чтение сигнатуры чипа:
void JTAG_ReadSign(TByte *sign)
{
TWord temp=0;
TWord key;
TByte ix;
TWord x[]={0x2308, 0x0300, 0x3200, 0x3300};

Send_Instruction(4,PROG_COMMANDS);
//enter reading signature mode
Send_Data_Output(15,(TByte *)&x[0],(TByte *)&temp);
for (ix=0; ix<3; ix++)
{
key = x[1]|(TWord)ix;
Send_Data_Output(15,(TByte *)&key,(TByte *)&temp);
//read signature byte
Send_Data_Output(15,(TByte *)&x[2],(TByte *)&temp);
Send_Data_Output(15,(TByte *)&x[3],(TByte *)&temp);
*sign++=(TByte)(temp&0xff);
}
}
Go to the top of the page
 
+Quote Post
Diusha
сообщение Jan 15 2009, 16:36
Сообщение #36


Вечный студент
****

Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262



Цитата(Polaris @ Jan 13 2009, 10:18) *
JTAG_Delay();

А это сколько? И из каких соображений?

Цитата(Polaris @ Jan 13 2009, 10:18) *
Судя по тому, что я написал в Shift_Data_Array() такое:
...
первым идет младший бит.

Тогда не очень понятно такое:
TDI Sequence: 0110011_00000000 (в частности, 2-я часть инструкции 9с)
TDO Sequence: xxxxxxx_oooooooo
Получается, мы в чип загоняем нули и в это время читаем из него данные, а потом уже качаем в него код (0110011). Зачем чипу этот код, когда мы уже все, что хотели, от него получили ??
Go to the top of the page
 
+Quote Post
Polaris
сообщение Jan 16 2009, 07:49
Сообщение #37


Местный
***

Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964



Цитата(Diusha @ Jan 15 2009, 18:36) *
А это сколько? И из каких соображений?

Из таких:
void JTAG_Delay(void)
{
}
smile.gif Ввел на всякий случай, в документации ничего не нашел, плохо искал, видимо.
Цитата(Diusha @ Jan 15 2009, 18:36) *
Тогда не очень понятно такое:
TDI Sequence: 0110011_00000000 (в частности, 2-я часть инструкции 9с)
TDO Sequence: xxxxxxx_oooooooo
Получается, мы в чип загоняем нули и в это время читаем из него данные, а потом уже качаем в него код (0110011). Зачем чипу этот код, когда мы уже все, что хотели, от него получили ??

Подозреваю, что адрес байта сигнатуры зависит от заданного в команде 9b, а команда 9c только вытаскивает байт сигнатуры и подтверждает окончание чтения, так что по логике противоречий нет. Кстати, вычитываются байты тоже младшим вперед.
Go to the top of the page
 
+Quote Post
Diusha
сообщение Jan 17 2009, 05:10
Сообщение #38


Вечный студент
****

Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262



Цитата(Polaris @ Jan 16 2009, 10:49) *
void JTAG_Delay(void)
{
}
smile.gif Ввел на всякий случай, в документации ничего не нашел, плохо искал, видимо.
Да я вот тоже не нашел, поэтому и спросил sad.gif

Спасибо, Polaris!
Главные вопросы я выяснил, теперь остается понять, почему не работает.
Возможно, еще придется вернуться к этой теме с Вашего позволения
Go to the top of the page
 
+Quote Post
Diusha
сообщение Jan 17 2009, 11:42
Сообщение #39


Вечный студент
****

Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262



Все-таки вопросы продолжаются… не работает…

1. (На всякий случай) В Programming Enable Register 0хА370 тоже загоняется младшим вперед?

2.
Цитата
23.4 TAP Controller

• At the TMS input, apply the sequence 1, 1, 0, 0 at the rising edges of TCK to enter the Shift
Instruction Register – Shift-IR state. While in this state, shift the four bits of the JTAG
instructions into the JTAG Instruction Register from the TDI input at the rising edge of TCK. The TMS input must be held low during input of the 3 LSBs in order to remain in the Shift-IR
state. The MSB of the instruction is shifted in when this state is left by setting TMS high.

Насколько я понял, 3 мл. бита вгоняем при TMS=0, а 4-й – при TMS=1, т.е при этом мы выпрыгиваем из Shift-IR в Exit-IR.
Далее
Цитата
• Apply the TMS sequence 1, 1, 0 to re-enter the Run-Test/Idle state…

А приведена последовательность (1,1,0) как будто мы еще в Shift-IR ––???

3.
Цитата
26.10.4 PROG_COMMANDS ($5)

• Run-Test/Idle: One clock cycle is generated, executing the applied command (not always
required, see Table 26-15 below).

Но в указанной таблице об этом ничего не говорится
У Вас void Send_Instruction( начинается с
TMS_Low(); // Run-Test / Idle
TMS_Low(); // Run-Test / Idle

– как я понимаю, это 2 клока при TMS=0. Связано ли это с вышеприведенной цитатой? Откуда инфа?
Go to the top of the page
 
+Quote Post
Polaris
сообщение Jan 17 2009, 12:40
Сообщение #40


Местный
***

Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964



Цитата(Diusha @ Jan 17 2009, 07:10) *
Да я вот тоже не нашел, поэтому и спросил sad.gif

Спасибо, Polaris!
Главные вопросы я выяснил, теперь остается понять, почему не работает.
Возможно, еще придется вернуться к этой теме с Вашего позволения

Говорю навскидку, потому что опять же не на работе smile.gif У меня довольно длительное время не получалось считать верную сигнатуру чипа по не вполне понятной причине. В итоге победил это следующим образом: установил, что правильная сигнатура считывается только после подачи в самом начале команды входа в режим программирования. Нашел это эмпирическим путем, после этого пошло все как по маслу. Если кто-то увидел указание на это в документации, ткните меня, пожалуйста, носом smile.gif То есть рецепт такой - сначала вводим чип в режим программирования, потом уже проводим все действия, даже те, которые по логике не требуют программирования. Я на этой проблеме просидел несколько дней, проверил по шагам весь код, сверил со схемами в документации, ничего не помогало, после входа в режим все заработало без всяких исправлений.
По поводу младшего-старшего - все команды и инструкции подаются одинаково, младшим битом вперед. Там есть еще небольшое уточнение по поводу самого старшего бита, но вроде бы в документации это описано.
Go to the top of the page
 
+Quote Post
Diusha
сообщение Jan 18 2009, 08:05
Сообщение #41


Вечный студент
****

Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262



Цитата(Polaris @ Jan 17 2009, 15:40) *
правильная сигнатура считывается только после подачи в самом начале команды входа в режим программирования. Нашел это эмпирическим путем

Вы про PROG_ENABLE (0x4) ?
У меня с самого начала не было никаких сомнений, что с нее все должно начинаться; она у меня есть (по крайней мере, с моей точки зрения)
Go to the top of the page
 
+Quote Post
Polaris
сообщение Jan 22 2009, 14:10
Сообщение #42


Местный
***

Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964



Цитата(Diusha @ Jan 18 2009, 10:05) *
Вы про PROG_ENABLE (0x4) ?
У меня с самого начала не было никаких сомнений, что с нее все должно начинаться; она у меня есть (по крайней мере, с моей точки зрения)

А давайте я просто проект скину, чтобы уж точно предусмотреть все варианты. Куда сбросить?
Go to the top of the page
 
+Quote Post
Diusha
сообщение Dec 11 2010, 14:48
Сообщение #43


Вечный студент
****

Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262



Вот много времени прошло, снова взялся за JTAG. Блин, ну не работает! Все то же самое.
Ресетится АВРка через JTAG, нормально выходит из ресета, а что-то чуть более сложное (прочитать преславутые signature bytes) - ни в какую. 333 раза прочитал в даташите про JTAG, вроде все далаю буква-в-букву...
Может кто подскажет, хоть в какую сторону копнуть?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 01:06
Рейтинг@Mail.ru


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