Par pitanja JTAG komunikaciji

Diskusija o MSP, ARM / LPC, PLC kontrolerima.

Moderators: stojke369, pedja089, [eDo], trax

Par pitanja JTAG komunikaciji

Postby Cvik_Dasa » 20-04-2020, 11:31

Pozdrav svima! Prije bi čojek našo 100€ nego mene al eto .... kuća poso, više poso nego kuća :azdaja:


No uglavnom, pokušavam isprogramirat FPGA preko bin file-a bez programatora i taj dio radi, jednostavno sam s logičkim analizatorom pratio komunikaciju između FPGA i usb blastera, napisao arduino program da čita bin file s sd kartice i ok uspio sam isprogramirat FPGA.

E sad pošto sve to trebam prebacit na STM32 a i bilo bi ok zapravo razumjet što se događa u komunikaciji zanima me dal neko ima kakvu literaturu o JTAG komunikaciji?? ovo sve što sam na google-u našao mi ne služi praktički nićemu.... sve je to površno.

Zapravo me zanima recimo nalazim se u data registru i hoću iči u instruction registar, dali smijem iči u "run test/idle state" ili moram odma u instruction registar ili će ono što je uprisano u DR biti izbrisano?
Odnosno dali je isto:
exit DR -> update DR -> select DR -> select IR -> capture IR -> shift IR
kao i:
exit DR -> update DR -> ->run test/idle -> select DR -> select IR -> capture IR -> shift IR

Isto tako nije mi baš najjasnije zašto nekad program ide kroz exit DR i update DR s data line = 1 a nekad je 0?

Zašto nekada program više puta u isti registar upisuje istu vrijednost??? Recimo dva tri puta prolazi kroz instruction registar i upisuje iste vrijednosti??

no kao što vidite nemam pojma ništa o JTAG-u pa ako neko ima nekakvu literaturu bilo bi super.


Ako nekoga interesira arduino program .. eto ga
Code: Select all
#include <SPI.h>
#include <SD.h>


const int chipSelect = 4;   //SPI_sd card
const int TDO = 5;
const int TCK = 6;
const int TMS = 7;



void setup() {


   pinMode(TDO, OUTPUT);
   pinMode(TMS, OUTPUT);
   pinMode(TCK, OUTPUT);

   digitalWrite(TDO, LOW);
   digitalWrite(TMS, LOW);
   digitalWrite(SCK, LOW);


   Serial.begin(9600);

   BeforeFile(); 


   File dataFile = SD.open("Led73_bin.bin");


   if (dataFile) {
      while (dataFile.available()) {

         byte i = dataFile.read();


         shiftOut(TDO, TCK, LSBFIRST, i);


      }
      dataFile.close();
      AfterFile();
   }

}

void loop() {
}



void BeforeFile(){
   digitalWrite(TDO, HIGH);
   digitalWrite(TMS, HIGH);
   for (int v = 0; v< 6; v++){Clock();}

   digitalWrite(TMS, LOW);
   Clock();                  //In Run test/idle

   shift_DR();

   shiftOut(TDO, TCK, LSBFIRST, 0xFF);
   shiftOut(TDO, TCK, LSBFIRST, 0xC0);
   shiftOut(TDO, TCK, LSBFIRST, 0xEC);
   shiftOut(TDO, TCK, LSBFIRST, 0x0F);

   digitalWrite(TDO, HIGH);
   for (int v = 0; v< 95; v++){Clock();}


   From_Register_To_Shift_Ir();  //in shift ir

   shiftOut(TDO, TCK, LSBFIRST, 0xFF);
   shiftOut(TDO, TCK, LSBFIRST, 0xC0);
   shiftOut(TDO, TCK, LSBFIRST, 0xEC);
   shiftOut(TDO, TCK, LSBFIRST, 0x0F);
   digitalWrite(TDO, HIGH);
   for (int v = 0; v< 95; v++){Clock();}

   From_Register_To_Shift_Ir();  //in shift ir

   shiftOut(TDO, TCK, LSBFIRST, 0xFF);
   shiftOut(TDO, TCK, LSBFIRST, 0xC0);
   shiftOut(TDO, TCK, LSBFIRST, 0xEC);
   shiftOut(TDO, TCK, LSBFIRST, 0x0F);
   digitalWrite(TDO, HIGH);
   for (int v = 0; v< 95; v++){Clock();}

   From_Register_To_Shift_Dr();  //in shift ir

   shiftOut(TDO, TCK, LSBFIRST, 0xFF);
   shiftOut(TDO, TCK, LSBFIRST, 0xC0);
   shiftOut(TDO, TCK, LSBFIRST, 0xEC);
   shiftOut(TDO, TCK, LSBFIRST, 0x0F);
   digitalWrite(TDO, HIGH);
   for (int v = 0; v< 95; v++){Clock();}


   From_Register_To_Shift_Ir();

   Clock();

   shiftOut(TDO, TCK, LSBFIRST, 0xFF);

   From_Register_To_Shift_Dr();
   digitalWrite(TMS, HIGH);
   digitalWrite(TDO,LOW);
   Clock();
   digitalWrite(TDO,HIGH);
   Clock();
   Clock();
   Clock();
   digitalWrite(TMS, LOW);
   Clock();
   Clock();
   shiftOut(TDO, TCK, LSBFIRST, 0xFE);
   shiftOut(TDO, TCK, LSBFIRST, 0xFF);
   digitalWrite(TDO,HIGH);
   Clock();

   From_Register_To_Shift_Ir();


   digitalWrite(TDO,LOW);
   Clock();
   shiftOut(TDO, TCK, LSBFIRST, 0x03);

   digitalWrite(TMS, HIGH);
   Clock();
   digitalWrite(TDO,HIGH);
   Clock();
   digitalWrite(TMS, LOW); 
   shiftOut(TDO, TCK, LSBFIRST, 0xFF);
   shiftOut(TDO, TCK, LSBFIRST, 0xFF);

   digitalWrite(TMS, HIGH);
   digitalWrite(TDO, HIGH);
   Clock();
   digitalWrite(TMS, LOW);
   Clock();
   Clock();
   digitalWrite(TDO, LOW);
   shiftOut(TDO, TCK, LSBFIRST, 0x00);
   shiftOut(TDO, TCK, LSBFIRST, 0x00);
   shiftOut(TDO, TCK, LSBFIRST, 0x00);
   shiftOut(TDO, TCK, LSBFIRST, 0x00);
   shiftOut(TDO, TCK, LSBFIRST, 0x50);
   shiftOut(TDO, TCK, LSBFIRST, 0x15);
   shiftOut(TDO, TCK, LSBFIRST, 0x00);

   Clock();
   Clock();
   Clock();
   Clock();
   Clock();
   Clock();
   Clock();

   digitalWrite(TMS, HIGH);
   Clock();
   digitalWrite(TDO, HIGH);
   Clock();
   digitalWrite(TMS, LOW);
   Clock();
   digitalWrite(TMS, HIGH);
   Clock();
   Clock();
   digitalWrite(TMS, LOW);
   Clock();
   Clock();
   digitalWrite(TDO, LOW);
   Clock();

   shiftOut(TDO, TCK, LSBFIRST, 0x68);
   digitalWrite(TMS, HIGH);
   digitalWrite(TDO, HIGH);
   Clock();
   Clock();
   digitalWrite(TMS, LOW);
   shiftOut(TDO, TCK, LSBFIRST, 0xFF);
   shiftOut(TDO, TCK, LSBFIRST, 0xFF);
   digitalWrite(TMS, HIGH);
   digitalWrite(TDO, HIGH);
   Clock();
   Clock();
   digitalWrite(TMS, LOW);
   Clock();
   Clock();
   digitalWrite(TDO, LOW);
   Clock();
   shiftOut(TDO, TCK, LSBFIRST, 0x01);
   digitalWrite(TMS, HIGH);
   Clock();
   digitalWrite(TDO, HIGH);
   Clock();
   digitalWrite(TMS, LOW);

   for (int i = 0; i<255; i++){
      shiftOut(TDO, TCK, LSBFIRST, 0xFF);
      shiftOut(TDO, TCK, LSBFIRST, 0xFF);
      shiftOut(TDO, TCK, LSBFIRST, 0xFF);
      shiftOut(TDO, TCK, LSBFIRST, 0xFF);
      shiftOut(TDO, TCK, LSBFIRST, 0xFF);
      shiftOut(TDO, TCK, LSBFIRST, 0xFF);
      shiftOut(TDO, TCK, LSBFIRST, 0xFF);
      shiftOut(TDO, TCK, LSBFIRST, 0xFF);
   }

   digitalWrite(TMS, HIGH);
   digitalWrite(TDO, HIGH);
   Clock();
   digitalWrite(TMS, LOW);
   Clock();
   Clock();

   for (int i = 0; i<37; i++){
      shiftOut(TDO, TCK, LSBFIRST, 0xFF);
   }
   
   return;
}

void AfterFile(){


   digitalWrite(TDO, LOW);
   for (int i = 0; i<31; i++){
      Clock();
   }

   digitalWrite(TMS, HIGH);
   Clock();
   digitalWrite(TDO, HIGH);
   Clock();
   Clock();
   Clock();
   digitalWrite(TMS, LOW);
   Clock();
   Clock();
   digitalWrite(TDO, LOW);
   Clock();
   shiftOut(TDO, TCK, LSBFIRST, 0x02);



   digitalWrite(TMS, HIGH);
   Clock();
   digitalWrite(TDO, HIGH);
   Clock();
   digitalWrite(TMS, LOW);
   shiftOut(TDO, TCK, LSBFIRST, 0xFF);
   shiftOut(TDO, TCK, LSBFIRST, 0xFF);
   digitalWrite(TDO, HIGH);
   digitalWrite(TMS, HIGH);
   Clock();
   digitalWrite(TMS, LOW);
   Clock();
   Clock();
   digitalWrite(TDO, LOW);
   Clock();

   for (int i = 0; i< 150; i++){
      shiftOut(TDO, TCK, LSBFIRST, 0x00);
   }
   Clock();
   Clock();
   digitalWrite(TMS, HIGH);
   Clock();
   digitalWrite(TDO, HIGH);
   Clock();
   digitalWrite(TMS, LOW);
   Clock();
   digitalWrite(TMS, HIGH);
   Clock();
   Clock();
   digitalWrite(TMS, LOW);
   Clock();
   Clock();
   digitalWrite(TDO, LOW);
   Clock();

   shiftOut(TDO, TCK, LSBFIRST, 0xFF);
   shiftOut(TDO, TCK, LSBFIRST, 0xFF);
   From_Register_To_Shift_Ir();

   Clock();
   shiftOut(TDO, TCK, LSBFIRST, 0x01);
   digitalWrite(TMS, HIGH);
   Clock();
   digitalWrite(TDO, HIGH);
   Clock();
   digitalWrite(TMS, LOW);
   Clock();

   for (int i = 0; i< 150; i++){
      shiftOut(TDO, TCK, LSBFIRST, 0xFF);
   }

   digitalWrite(TDO, HIGH);
   digitalWrite(TMS, HIGH);
   Clock();
   Clock();
   digitalWrite(TMS, LOW);
   Clock();
   Clock();
   digitalWrite(TDO, LOW);
   Clock();

   shiftOut(TDO, TCK, LSBFIRST, 0x03);
   digitalWrite(TMS, HIGH);
   Clock();
   digitalWrite(TDO, HIGH);
   Clock();
   digitalWrite(TMS, LOW);

   shiftOut(TDO, TCK, LSBFIRST, 0xFF);
   shiftOut(TDO, TCK, LSBFIRST, 0xFF);
   digitalWrite(TMS, HIGH);
   Clock();
   digitalWrite(TMS, LOW);
   Clock();
   Clock();
   shiftOut(TDO, TCK, LSBFIRST, 0x00);
   shiftOut(TDO, TCK, LSBFIRST, 0x00);
   shiftOut(TDO, TCK, LSBFIRST, 0x00);
   shiftOut(TDO, TCK, LSBFIRST, 0x00);
   shiftOut(TDO, TCK, LSBFIRST, 0xA8);
   shiftOut(TDO, TCK, LSBFIRST, 0xCA);
   shiftOut(TDO, TCK, LSBFIRST, 0x1F);
   Clock();
   Clock();

   digitalWrite(TDO, HIGH);
   Clock();
   digitalWrite(TDO, LOW);
   Clock();
   digitalWrite(TDO, HIGH);
   Clock();
   digitalWrite(TDO, LOW);
   Clock();
   digitalWrite(TDO, HIGH);
   Clock();
   digitalWrite(TDO, LOW);
   digitalWrite(TMS, HIGH);
   Clock();
   digitalWrite(TDO, HIGH);
   Clock();
   digitalWrite(TMS, LOW);
   Clock();
   digitalWrite(TMS, HIGH);
   Clock();

   Clock();
   Clock();
   Clock();
   Clock();
   Clock();
   digitalWrite(TDO, HIGH);
   delay(2000);
   return;
}

void  shift_DR(){

   digitalWrite(TMS, HIGH);
   Clock();                  //dr scan
   digitalWrite(TMS, LOW);
   Clock();                  //capture dr
   Clock();                  //shift dr
   return;
}

void From_Register_To_Shift_Ir(){

   digitalWrite(TDO, HIGH);
   digitalWrite(TMS, HIGH);
   Clock();
   Clock();
   Clock();
   Clock();
   digitalWrite(TMS, LOW);
   Clock();
   Clock();
   return;
}


void From_Register_To_Shift_Dr(){

   digitalWrite(TDO, HIGH);
   digitalWrite(TMS, HIGH);
   Clock();
   Clock();
   Clock();
   digitalWrite(TMS, LOW);
   Clock();
   Clock();

   return;
}

void Clock(){
   digitalWrite(TCK, HIGH);

   digitalWrite(TCK, LOW);

   return;
}



Program je majko moja mila :ohno: užaš našta to liči ali to je samo za početak da vidim dali je uopće moguće isprogramirat FPGA s sd kartice tako da nema brige.
Cvik_Dasa
 
Posts: 157
Joined: 23-11-2010, 05:13

Re: Par pitanja JTAG komunikaciji


Re: Par pitanja JTAG komunikaciji

Postby Black » 29-04-2020, 22:57

Mozda glupo pitanje ali: dalisi odgovor potražio u datashetu?
User avatar
Black
 
Posts: 973
Joined: 17-12-2008, 15:44

Re: Par pitanja JTAG komunikaciji

Postby jazz » 10-06-2021, 09:16

Da odgovorim na stariji post, možda nekome pomogne. Na slici je prikazan TAP Controller State Machine IEEE Std 1149.1 koji se koristi kod TI MSP430 mikrokontrolera (slau320). Vjerojatno se slični dijagram može naći u dokumentaciji za bilo koji mikrokontroler drugog proizvođača.

jtag.jpg
jtag.jpg (29.16 KiB) Viewed 454 times
jazz
 
Posts: 207
Joined: 21-10-2010, 21:18
Location: Hrvatska


Return to Mikrokontroleri - ostali

Who is online

Users browsing this forum: No registered users and 2 guests

GOOGLE

cron