Цитата(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);
}
}