|
Программирование 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 и одной и той же прошивкой в хексе, я это дело бросил. Надеюсь, что найдется человек, который укажет, где этот протокол можно взять. С остальным я справлюсь сам. Заранее благодарен.
|
|
|
|
|
 |
Ответов
|
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 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 только вытаскивает байт сигнатуры и подтверждает окончание чтения, так что по логике противоречий нет. Кстати, вычитываются байты тоже младшим вперед.
|
|
|
|
Сообщений в этой теме
Polaris Программирование AVR через JTAG Mar 13 2008, 11:15 Qwertty Цитата(Polaris @ Mar 13 2008, 14:15) Наде... Mar 13 2008, 11:35 Igor26 Цитата(Polaris @ Mar 13 2008, 14:15) Уваж... Mar 13 2008, 11:39 defunct Цитатаможно ли программировать AVR через JTAG?
Мож... Mar 13 2008, 11:45 Polaris Цитата(Igor26 @ Mar 13 2008, 13:39) DS на... Mar 13 2008, 12:16 Qwertty Если оставить только JTAG, то его будет не отключи... Mar 13 2008, 11:52 sensor_ua Вообще-то такое уже делалось
http://home.telkomsa... Mar 13 2008, 13:07 Igor26 ЦитатаЯ напротив предусматриваю JTAG разъем на все... Mar 14 2008, 07:31 GDI Внесу свое имхо... заливать прошивку можно и через... Mar 14 2008, 11:49 Polaris Цитата(GDI @ Mar 14 2008, 13:49) Внесу св... Mar 17 2008, 16:03 GDI ЦитатаА каким образом в изначально девственно чист... Mar 18 2008, 07:17 Polaris Цитата(GDI @ Mar 18 2008, 09:17) Внимател... Mar 18 2008, 08:12 GDI На то и форум, чтобы предлагать и другие пути реше... Mar 18 2008, 08:40 Polaris Цитата(GDI @ Mar 18 2008, 10:40) На то и ... Mar 18 2008, 09:13  Diusha А не знает ли кто, с какой частотой на АВР можно г... Jan 4 2009, 14:55   rvk Цитата(Diusha @ Jan 4 2009, 17:55) А не з... Jan 5 2009, 08:31    Diusha Цитата(rvk @ Jan 5 2009, 11:31) Для JTAG ... Jan 5 2009, 15:05   Polaris Цитата(Diusha @ Jan 4 2009, 16:55) А не з... Jan 6 2009, 13:09    Diusha Polaris,
может Вы тогда сможете ответить на мои во... Jan 6 2009, 13:17     Polaris Цитата(Diusha @ Jan 6 2009, 15:17) Polari... Jan 6 2009, 13:19      Diusha Цитата(Polaris @ Jan 6 2009, 16:19) Восьм... Jan 6 2009, 13:27      Diusha Цитата(Polaris @ Jan 6 2009, 16:19) Восьм... Jan 9 2009, 12:59       Polaris Цитата(Diusha @ Jan 9 2009, 14:59) Я прош... Jan 11 2009, 21:58 GDI У нас видал подобную плату, как раз с 2 коробка, т... Mar 18 2008, 09:47 SasaVitebsk В этом смысле DBW класс!!!
Один 6 pin ... Jan 4 2009, 19:40 rvk Цитата(Diusha @ Jan 6 2009, 07:47) 1. Как... Jan 6 2009, 05:29  Diusha Цитата(rvk @ Jan 6 2009, 08:29) As a defi... Jan 6 2009, 07:42 singlskv Цитата(Diusha @ Jan 6 2009, 07:47) Сразу ... Jan 6 2009, 11:47  Diusha Цитата(singlskv @ Jan 6 2009, 14:47) А By... Jan 6 2009, 13:04    Diusha Цитата(Polaris @ Jan 16 2009, 10:49) void... Jan 17 2009, 05:10     Polaris Цитата(Diusha @ Jan 17 2009, 07:10) Да я ... Jan 17 2009, 12:40      Diusha Цитата(Polaris @ Jan 17 2009, 15:40) прав... Jan 18 2009, 08:05       Polaris Цитата(Diusha @ Jan 18 2009, 10:05) Вы пр... Jan 22 2009, 14:10    Diusha Все-таки вопросы продолжаются… не работает…
1. (Н... Jan 17 2009, 11:42 Diusha Вот много времени прошло, снова взялся за JTAG. Бл... Dec 11 2010, 14:48 rvk Младший справа по тексту однозначно. Поэтому число... Jan 6 2009, 09:02 Diusha Цитата(rvk @ Jan 6 2009, 12:02) Младший с... Jan 6 2009, 09:43 Maik-vs Цитата(Polaris @ Mar 13 2008, 14:15) Уваж... Jan 7 2009, 11:11 _kp Есть, еще не упомянутый тут, кроссплатформенный па... Jan 11 2009, 14:05
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|