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

 
 
> Программирование 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
 
Start new topic
Ответов
Diusha
сообщение Jan 6 2009, 04:47
Сообщение #2


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

Группа: Участник
Сообщений: 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
Polaris
сообщение Jan 13 2009, 07:18
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 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
Сообщение #4


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

Группа: Участник
Сообщений: 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
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 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

Сообщений в этой теме
- 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


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 15:36
Рейтинг@Mail.ru


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