|
Программирование AVR через JTAG, Кто-нибудь имеет информацию конкретно о протоколе JTAG для AVR? |
|
|
|
Mar 13 2008, 11:15
|
Местный
  
Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964

|
Уважаемые знатоки! С целью уменьшения числа коннекторов на плате озаботился следующим вопросом - можно ли программировать AVR через JTAG? Причем интересует не использование сторонних отладчиков, а конкретно протокол общения непосредственно с AVR - то есть, мне не нужен протокол работы JTAG ICE, я хочу попытаться реализовать программирование на логическом уровне. С чем это связано? Сейчас на платах устройств приходится иметь два коннектора - один под JTAG для отладки (а серии у нас небольшие, изменения в прошивке частые, поэтому отказаться от возможности отладки не могу), второй - под SPI, чтобы можно было шить устройства в партии. Причем шить не только с компьютера, но и в тестирующем устройстве, которое само сделано на AVR, в нем хранится актуальная прошивка, которая и загружается в контролируемое изделие, для нас это очень удобно. Но в итоге имеем на плате один лишний разъем, который занимает место, портит внешний вид и так далее. Хотелось бы свести программирование AVR к работе через JTAG. Я так полагаю, что раз JTAG ICE это умеет делать, то задача вполне реальная. Вопрос в том, что ковыряться в прошивке JTAG ICE не хочется, времени не хватает, а никто под эту задачу ресурсов не выделит  Возможно, что где-то в сети уже есть наработки. Сам я попробовал искать, но слишком уж много хлама, после нескольких десятков сайтов с одними и теми же клонами JTAG ICE и одной и той же прошивкой в хексе, я это дело бросил. Надеюсь, что найдется человек, который укажет, где этот протокол можно взять. С остальным я справлюсь сам. Заранее благодарен.
|
|
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 42)
|
Mar 13 2008, 11:35
|
Местный
  
Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527

|
Цитата(Polaris @ Mar 13 2008, 14:15)  Надеюсь, что найдется человек, который укажет, где этот протокол можно взять. С остальным я справлюсь сам. Например в книге Евстифеев "Микроконтроллеры AVR семейств Tiny и Mega фирмы ATMEL" Находится в сети за 5 минут.
|
|
|
|
|
Mar 13 2008, 11:39
|

Знающий
   
Группа: Свой
Сообщений: 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 не хочется, времени не хватает, а никто под эту задачу ресурсов не выделит  Возможно, что где-то в сети уже есть наработки. Сам я попробовал искать, но слишком уж много хлама, после нескольких десятков сайтов с одними и теми же клонами JTAG ICE и одной и той же прошивкой в хексе, я это дело бросил. Надеюсь, что найдется человек, который укажет, где этот протокол можно взять. С остальным я справлюсь сам. Заранее благодарен. DS на Мега128 начиная со страницы 306.Programming Via JTAG specific JTAG Interface P.S. Чтоб не ставить разъем JTAG на плату, я в процессе отладки устройства напиваю МГТФом JTAG-разъём непосредственно к ножкам процессора. Одна плата ведь у программиста есть всегда. Ну и пусть JTAG-разъём на проводах болтается!
|
|
|
|
|
Mar 13 2008, 11:45
|

кекс
     
Группа: Свой
Сообщений: 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). В конечных устройствах просто не запаиваются разъемы. Болтающиеся на МГФе конструкции - ненадежные (даже для программиста) ;>
|
|
|
|
|
Mar 13 2008, 12:16
|
Местный
  
Группа: Свой
Сообщений: 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-разъём на проводах болтается! Да, действительно все описано! Спасибо большое, буду разбираться!
|
|
|
|
|
Mar 14 2008, 07:31
|

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

|
Цитата Я напротив предусматриваю JTAG разъем на всех устройствах. Занимает не так уж и много места на плате - всего 6 пинов (TDO, TDI, TMS, TCK, Vcc, GND). В конечных устройствах просто не запаиваются разъемы.
Болтающиеся на МГФе конструкции - ненадежные (даже для программиста) ;> Если жесткие требования по габаритам, тогда ставить JTAG-разъём не пойдет. Вот на такие девайсы разъем на МГТФе - самое оно. Ну отвалился провод раз в месяц, ну подпаял его на место, делов то! Опять же, если в конечном устройстве используются все каналы АЦП, то JTAG работать не будет. Но это легко обходится. А вообще JTAG вещь часто просто не заменимая. И при отладке программы, и при ремонте сложного устройства. Лично я не ставлю этот разъем только в случае озвученном выше(габариты), в сложных устройствах ставлю ВСЕГДА.
|
|
|
|
|
Mar 17 2008, 16:03
|
Местный
  
Группа: Свой
Сообщений: 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)  Спасибо за ссылки! Через JTAG ICE рассматривать буду в последнюю очередь по указанном выше причинам...
|
|
|
|
|
Mar 18 2008, 07:17
|
Профессионал
    
Группа: Свой
Сообщений: 1 235
Регистрация: 14-05-05
Из: Санкт-Петербург
Пользователь №: 5 008

|
Цитата А каким образом в изначально девственно чистом кристалле материализуется бутлоадер?? Цитата Т.е. можно оставить разъем JTAG и заливать через него программу при производстве Внимательнее читать надо... а смысл всего мною ранее написанного сводится к тому, что не надо реализовывать отдельно программу и прошивку другого контроллера для того чтобы прошивать целевую систему используя JTAG, для этого придумали бутлоадеры. Т.е. чтобы Цитата шить не только с компьютера, но и в тестирующем устройстве, которое само сделано на AVR, в нем хранится актуальная прошивка, которая и загружается в контролируемое изделие вам нужен бутлоадер исходники которых открыты и в великом множестве лежат на просторах интернет.
--------------------
|
|
|
|
|
Mar 18 2008, 08:12
|
Местный
  
Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964

|
Цитата(GDI @ Mar 18 2008, 09:17)  Внимательнее читать надо... а смысл всего мною ранее написанного сводится к тому, что не надо реализовывать отдельно программу и прошивку другого контроллера для того чтобы прошивать целевую систему используя JTAG, для этого придумали бутлоадеры. Т.е. чтобы вам нужен бутлоадер исходники которых открыты и в великом множестве лежат на просторах интернет. Это Вы внимательнее читайте. Откуда в чистом фабричном кристалле появится бутлоадер без использования сторонних средств программирования? Об этом и речь в теме. Как с минимальными затратами ресурсов загрузить в кристалл тот же Ваш бутлоадер. И исходники бутлоадеров мне не нужны, у меня свой есть, позволяет квалификация. Вас, извините, про Фому спросили, а Вы про Ерему.
|
|
|
|
|
Jan 5 2009, 08:31
|
Частый гость
 
Группа: Свой
Сообщений: 165
Регистрация: 13-05-06
Из: Камышин
Пользователь №: 17 067

|
Цитата(Diusha @ Jan 4 2009, 17:55)  А не знает ли кто, с какой частотой на АВР можно гнать сигналы? В ДШ ЖТАГовских характеристик нет  Кстати, Polaris, получилось? Для JTAG ICE в IAR стоит максимум 540KHz, а на практике JTAG ICE MKII однозначно быстрее работает. Можно предположить что в районе 1MHz.
|
|
|
|
|
Jan 6 2009, 04:47
|
Вечный студент
   
Группа: Участник
Сообщений: 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. А может я вообще что-то не так делаю?
|
|
|
|
|
Jan 6 2009, 05:29
|
Частый гость
 
Группа: Свой
Сообщений: 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. То есть младший бит первый.
|
|
|
|
|
Jan 6 2009, 07:42
|
Вечный студент
   
Группа: Участник
Сообщений: 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... В данном случае "младший бит" слева
|
|
|
|
|
Jan 6 2009, 09:02
|
Частый гость
 
Группа: Свой
Сообщений: 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
|
|
|
|
|
Jan 6 2009, 09:43
|
Вечный студент
   
Группа: Участник
Сообщений: 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"
|
|
|
|
|
Jan 6 2009, 11:47
|
дятел
    
Группа: Свой
Сообщений: 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, Вы можете просто потренироваться давать разные команды из командной строки.
|
|
|
|
|
Jan 6 2009, 13:09
|
Местный
  
Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964

|
Цитата(Diusha @ Jan 4 2009, 16:55)  А не знает ли кто, с какой частотой на АВР можно гнать сигналы? В ДШ ЖТАГовских характеристик нет  Кстати, Polaris, получилось? Да, получилось, пока окончательно не отладил, потому что все делается в фоновом режиме (задача не основная, делается для собственного удобства), плюс там полный комплекс, пишется и по JTAG и по SPI, протокол STK500, плюс интерфейсная часть на компе со складированием прошивок и результатов в базу, но можно запустить AVR Studio, прошить через STK500 как бы (на самом деле через JTAG) фузы, считать сигнатуры, прошить флэш и EEPROM. Могу сбросит часть исходников, касающихся непосредственно работы с JTAG.
|
|
|
|
|
Jan 6 2009, 13:19
|
Местный
  
Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964

|
Цитата(Diusha @ Jan 6 2009, 15:17)  Polaris, может Вы тогда сможете ответить на мои вопросы? Эх, не знаю, как дать ссылку непосредственно на пост... Короче, в этой ветке, послано сегодня в 7:47 Сейчас не смогу ответить, все исходники и доки на работе, а по памяти врать не хочу  Восьмого выйду на работу - отвечу. И куски кода с вычитыванием тоже смогу послать.
|
|
|
|
|
Jan 7 2009, 11:11
|
Местный
  
Группа: Участник
Сообщений: 246
Регистрация: 4-12-06
Пользователь №: 23 101

|
Цитата(Polaris @ Mar 13 2008, 14:15)  Уважаемые знатоки!
С целью уменьшения числа коннекторов на плате озаботился следующим вопросом - можно ли программировать AVR через JTAG? ... Почему нельзя разъём для программирования использовать в целевой системе как рабочий? Я программирую через SPI, и потом этот разъём работает в устройстве, ноги-то обычные. Только одна нога - ресет - остаётся висеть. Конечно, на них выводятся "не рискованные" сигналы, чтобы часом не пожечь.
|
|
|
|
|
Jan 11 2009, 14:05
|
Группа: Новичок
Сообщений: 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
|
|
|
|
|
Jan 11 2009, 21:58
|
Местный
  
Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964

|
Цитата(Diusha @ Jan 9 2009, 14:59)  Я прошу прощения за назойливость, но уже девятое... Извините  У нас Интернета в связи с праздниками не было, надеюсь, что завтра появится. На крайний случай возьму флэшку, отправлю из дома.
|
|
|
|
|
Jan 13 2009, 07:18
|
Местный
  
Группа: Свой
Сообщений: 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); } }
|
|
|
|
|
Jan 15 2009, 16: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). Зачем чипу этот код, когда мы уже все, что хотели, от него получили ??
|
|
|
|
|
Jan 16 2009, 07:49
|
Местный
  
Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964

|
Цитата(Diusha @ Jan 15 2009, 18:36)  А это сколько? И из каких соображений? Из таких: void JTAG_Delay(void) { }  Ввел на всякий случай, в документации ничего не нашел, плохо искал, видимо. Цитата(Diusha @ Jan 15 2009, 18:36)  Тогда не очень понятно такое: TDI Sequence: 0110011_00000000 (в частности, 2-я часть инструкции 9с) TDO Sequence: xxxxxxx_oooooooo Получается, мы в чип загоняем нули и в это время читаем из него данные, а потом уже качаем в него код (0110011). Зачем чипу этот код, когда мы уже все, что хотели, от него получили ?? Подозреваю, что адрес байта сигнатуры зависит от заданного в команде 9b, а команда 9c только вытаскивает байт сигнатуры и подтверждает окончание чтения, так что по логике противоречий нет. Кстати, вычитываются байты тоже младшим вперед.
|
|
|
|
|
Jan 17 2009, 05:10
|
Вечный студент
   
Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262

|
Цитата(Polaris @ Jan 16 2009, 10:49)  void JTAG_Delay(void) { }  Ввел на всякий случай, в документации ничего не нашел, плохо искал, видимо. Да я вот тоже не нашел, поэтому и спросил  Спасибо, Polaris! Главные вопросы я выяснил, теперь остается понять, почему не работает. Возможно, еще придется вернуться к этой теме с Вашего позволения
|
|
|
|
|
Jan 17 2009, 11:42
|
Вечный студент
   
Группа: Участник
Сообщений: 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. Связано ли это с вышеприведенной цитатой? Откуда инфа?
|
|
|
|
|
Jan 17 2009, 12:40
|
Местный
  
Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964

|
Цитата(Diusha @ Jan 17 2009, 07:10)  Да я вот тоже не нашел, поэтому и спросил  Спасибо, Polaris! Главные вопросы я выяснил, теперь остается понять, почему не работает. Возможно, еще придется вернуться к этой теме с Вашего позволения Говорю навскидку, потому что опять же не на работе  У меня довольно длительное время не получалось считать верную сигнатуру чипа по не вполне понятной причине. В итоге победил это следующим образом: установил, что правильная сигнатура считывается только после подачи в самом начале команды входа в режим программирования. Нашел это эмпирическим путем, после этого пошло все как по маслу. Если кто-то увидел указание на это в документации, ткните меня, пожалуйста, носом  То есть рецепт такой - сначала вводим чип в режим программирования, потом уже проводим все действия, даже те, которые по логике не требуют программирования. Я на этой проблеме просидел несколько дней, проверил по шагам весь код, сверил со схемами в документации, ничего не помогало, после входа в режим все заработало без всяких исправлений. По поводу младшего-старшего - все команды и инструкции подаются одинаково, младшим битом вперед. Там есть еще небольшое уточнение по поводу самого старшего бита, но вроде бы в документации это описано.
|
|
|
|
|
Jan 18 2009, 08:05
|
Вечный студент
   
Группа: Участник
Сообщений: 500
Регистрация: 11-09-06
Из: Питер
Пользователь №: 20 262

|
Цитата(Polaris @ Jan 17 2009, 15:40)  правильная сигнатура считывается только после подачи в самом начале команды входа в режим программирования. Нашел это эмпирическим путем Вы про PROG_ENABLE (0x4) ? У меня с самого начала не было никаких сомнений, что с нее все должно начинаться; она у меня есть (по крайней мере, с моей точки зрения)
|
|
|
|
|
Jan 22 2009, 14:10
|
Местный
  
Группа: Свой
Сообщений: 266
Регистрация: 8-12-05
Пользователь №: 11 964

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