Forum: FPGA, VHDL & Co. Spartan 3e mit SPI Flash: Booten verhindern


von Christian R. (supachris)


Lesenswert?

Gibt es einen Standard-Weg, das Laden des FPGA aus dem SPI Flash (Master 
SPI Mode) zu verhindern? Hintergrund ist ein Design so zu gestalten, 
dass Boundary Scan Test möglich ist. Das geht aber nur richtig, wenn man 
per Jumper das Booten verhindert. Bisher haben wir den Platform Flash 
eingesetzt, da ging das einfach, indem mal Init_B auf Low zieht. Reicht 
es, wenn ich am Atmel DataFlash das Reset auf Low halte? Dann müsste der 
Spartan ja erfolglos versuchen zu booten, oder? Oder kann ich das Init_B 
auch im Maser Serial Mode benutzen, um per Low von außen das Booten zu 
verhindern?

von Antti Lukats (Gast)


Lesenswert?

fpga mode pins auf JTAG

von Christian R. (supachris)


Lesenswert?

Hm...da müsste dann noch ein Inverter rein.

Master SPI : 001
JTAG : 101

Der bisherige Jumper zieht auf Low (weil auf der anderen Platine ein 
Virtex 4 mit PlatForm Flash auch an der Leitung hängt), aber das M2 
müsste dann auf High gezogen werden. Mal schauen, wie sich das umsetzen 
lässt.

von Uwe Bonnes (Gast)


Lesenswert?

Warum willst Du das booten verhindern? Auch bei
Master SPI : 001
ist das FPGA ueber JTAG ansprechbar. damit ist doch auch Boundary Scan 
moeglich. Und ueber JPROGRAM solltest Du, wenn alle Stricke reissen, 
auch die vorhandene Konfiguration loeschen koennen, dann den 
gewuenschten Boundary Scan ohne eine Beintraechtingung durch eine 
vorhandene Konfiguration machen koennen,  und ueber Reset und JPROGRAM 
dann den Baustein wieder aus dem SPI Flash konfigurieren. Also etwa wie 
hier

 idata[0] = JPROGRAM;
  jtag.shiftIR(idata);
  idata[0] = CFG_IN;
  do
    jtag.shiftIR(idata, odata);
  while (! (odata[0] & 0x10)); /* wait until configuration cleared */

 <boundary scan>

  /* Release JTAG control over configuration (AR 16829)*/
  io->tapTestLogicReset();
  idata[0] = JPROGRAM;
  jtag.shiftIR(idata);
  /* Now device will reconfigure from standard configuration source */
  idata[0] = BYPASS;
  fprintf(stderr, "Will wait up to 10 seconds for device to 
reconfigure.");
  fflush(stderr);
  do
    {
      jtag.Usleep(1000);
      jtag.shiftIR(idata, odata);
      if(i%250 == 249)
        {
          fprintf(stderr, ".");
          fflush(stderr);
        }
      i++;
    }
  while ((( odata[0] & 0x23) != 0x21) && (i <10000));

von Christian R. (supachris)


Lesenswert?

Ich hab aber beim Boundary Scan keinen manuellen Einfluss auf den TAP 
Controller. Das macht ja alles das Cascon System von Göpel Electronic. 
Ich hab aber im Config User Guide jetzt gefunden, dass man das Prog_B 
auf Low lassen soll, wenn man nach dem Clear anhalten will. Das sollte 
ja genau das sein, was wir brauchen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.