Forum: Mikrocontroller und Digitale Elektronik JTAG Protokoll / Serial wire Debug / Boundary scan


von Manuel R. (manu123)


Lesenswert?

Hallo mikocontroller community,

wollte mal nachfragen ob einer von euch genauere Informationen zu den 
drei oben genannten debug/Programmierschnittstellen hat.
Genauer gesagt würde es mir um einen Vergleich der drei gehen was 
Programmiergeschwindigkeit usw angeht.
Ich weiß das SWD 2 pins benötigt und JTAG dagegen 4 oder optional 5 
sowie VDD und GND. Boundary scan benötigt nur 4 bzw 5.
Aber was ist mit Programmiergeschwindkeit bzw. Protokoll?
Ich konnte z.b nirgendwo Infos finden worin sich JTAG und boundary scan 
eigentlich unterscheiden. Weiterhin nirgendwo Infos bzgl. den 
Protokollen und Programmierzeiten gefunden.
Danke!

von Daniel V. (danvet)


Lesenswert?

Schau mal hier:
http://www.fpga4fun.com/JTAG.html

Vielleicht beantwortet das zumindest ein Teil deiner Fragen.

von AVR-Assembler-Code (Gast)


Lesenswert?

>Aber was ist mit Programmiergeschwindkeit bzw. Protokoll?

Das hängt natürlich vom Programmer und vom zu programmierenden
Device ab.

Hast Du schon mal beim Segger geschaut?

von Manuel R. (manu123)


Lesenswert?

Hi,
danke für die Infos.
Mir ist klar das dies vom genutzten Programmer abhängt, aber mir ist 
irgendwie noch nicht der Unterschied klar zwischen Boundary Scan und 
JTAG was die Programmierung angeht.
beide arbeiten mit derselben state machine, beide benötigen die selben 
Signale..

von Daniel V. (danvet)


Lesenswert?

Manuel Reisser schrieb:
> Hi,
> danke für die Infos.
> Mir ist klar das dies vom genutzten Programmer abhängt, aber mir ist
> irgendwie noch nicht der Unterschied klar zwischen Boundary Scan und
> JTAG was die Programmierung angeht.
> beide arbeiten mit derselben state machine, beide benötigen die selben
> Signale..

Boundary Scan ist ein Teil von JTAG. Man kann mehrere JTAG-Teilnehmer 
ansprechen (aber immer nur einen) und so mehrere Teilnehmer 
(hintereinander) programmieren.
Lies dir meinen oben genannten Link durch...

von Manuel R. (manu123)


Lesenswert?

Hi Daniel,

hab ich durchgelesen, explizit der Unterschied ist mir trotzdem nicht 
klar.
Ich kann Prozessoren per boundary scan programmieren (also der Flash) 
oder per JTAG.
Wo ist da jetzt der große Unterschied? Das BS und JTAG zu 1149.1 gehören 
ist mir auch klar..

von test (Gast)


Lesenswert?

So noch mal zum Mitschreiben.

JTAG ist das allgemeine.

Der Boundery scann verwendet JTAG. damit kanst du an allen pins wakeln 
und dadurch, auch wenns langsam ist einen extern angeschlossenen flasch 
programmieren.

Und um MCUs zu debugen verwendet man auch JTAG. nur ist da der 
"Boundery" direct um die MCU gelegt. das heist du kanst an den internen 
eigentlich von der MCU kontrolliereten signalen wackeln. Register 
beschreiben / auslesen, ...

dadurch kannst du z.B. kleine programm rotinen ins sram schreiben und 
einen kleinen datablock von deinem Programm und damit das flaschen 
auslösen. Das geht vermutlich um einiges schneller als über das signal 
gewackele. nur ist JTAG nicht wirklich besonders schnell.

Schau dier was Protokolle angeht z.B. die ARM documentation an. Da ist 
sowol die anbindung von JTAG an die MCU dokumentiert als auch die von 
SWD an die Cortex MCU.

und SWD ist z.B. um einiges schneller, da du nicht über die MCU gehen 
must um auf speicher zuzugreifen sondern den direkt ansprechen kanst. 
(wenn der hersteller das auch implementiert hat in seinem baustein)

von Manuel R. (manu123)


Lesenswert?

Mir gehts vorallem um das programmieren eines internen Flash Speichers, 
also nen embedded Flash von nem Mikrocontroller.
Sollte ja mit allen 3 Methoden machbar sein, aber der Unterschied 
zwischen Boundary scan und JTAG Programmierung wurde noch nicht 
deutlich.
Für Programmierung über JTAG reicht es wenn der Baustein eine JTAG 
Schnittstelle hat, für Programmierung über BS benötigt er aber 
zusätzlich boundary scan Zellen an seinen Pins.
Dadurch muss es doch auch nen grundlegenden Unterschied geben.. JTAG 
verwendet ja nicht das boundary scan register zum programmieren!

von SF (Gast)


Lesenswert?

Hallo Manuel,

der Boundary scan dient nicht zum Programmieren, sondern wird zum Testen 
der Anschlusspinne verwendet. Wie bereits im ersten Link von Daniel V. 
sehr gut dargestellt.

Dazu wurde eine Standardisiertes Interface namens JTAG geschaffen. Wobei 
JTAG eigentlich der Name des Normierungsteams ist das das JTAG Interface 
normiert hat ...

Findige Ingenieure, die kostbare Anschlusspinne sparen wollten, haben 
sich dann gefragt, ob man die ansonsten nutzlosen JTAG Pinne nicht auch 
zum Programmieren und Debuggen von Mikrocontroller verwenden kann.

Dafür haben Sie dann das JTAG Interface mit nicht standardisierten 
Erweiterungen zum Programmieren und Debuggen erweitert. Deshalb 
funktioniert ein AVR-JTAG Debugger auch in der Regel nicht mit einem 
STM32 Cortex M3.

Die Firma ARM hat dann für ihre Kerne diese nicht standardisierten 
Erweiterungen etwas vereinheitlicht. Außerdem haben Sie (ARM) sich fürs 
Debuggen und Programmieren eine weitere Schnittstelle namens SWD 
ausgedacht, die gegenüber JTAG noch weniger Pinne braucht.

Also:
Programmieren/Debuggen macht man über die nicht standardisierten JTAG 
Erweiterungen oder SWD.

Zum Testen der gefertigten Platine könnte man den Boundary scan 
verwenden.

Alle deine Fragen und auch deine früheren Posts hier und im STM32 Forum 
scheinen mir recht theoretisch zu sein. So als ob du noch nie einen 
Mikrocontroller mal in der Praxis programmiert hättest.

Am besten bekommt man nämlich ein Gefühl dafür was JTAG, SWD ist, indem 
man einfach mal ein paar Programme für  Mikrocontroller schreibt und 
dann JTAG/SWD und alternativ einen Bootloader benutzt um diesen dann zu 
programmieren und zu Debuggen.

Dann werden sich auch alle deine Fragen/Unsicherheiten bezüglich JTAG 
(fast) ganz von alleine klären.

von Manuel R. (manu123)


Lesenswert?

Hallo SF,
mir ist mitlerweile schon klar was ich mit den einzelnen Dingen machen 
kann :)
Nur kann man definitiv auch per boundary scan programmieren
http://boundaryscan.blogspot.de/2010/11/flash-programming-speed.html
JTAG benötigt keine boundary scan Zellen, bei der Programmierung über 
boundary scan spielen diese jedoch eine größere Rolle.
Mikrocontroller wurden bei uns an der Hochschule nur über RS232 
programmiert, wir haben leider nie mit bootloadern usw gearbeitet.
Selbst hab ich mal nen Atmega32 über JTAG programmiert.
Der obige Link zeigt z.b. wie man die Programmierzeit theoretisch 
berechnet wenn man boundary scan chains verwendet.
Wie die ganze Sache bei JTAG aussieht konnte mir noch keiner sagen (Muss 
anders aussehen, da die BS Zellen dort keine Rolle spielen)
Danke!

von Daniel V. (danvet)


Lesenswert?

Manuel Reisser schrieb:
> Wie die ganze Sache bei JTAG aussieht konnte mir noch keiner sagen (Muss
> anders aussehen, da die BS Zellen dort keine Rolle spielen)
> Danke!

Was meinst du mit Boundary Scan "Zelle"?

Fazit im oben verlinkten Artikel ist:
"Now that we have an intuitive understanding of how chain length and TCK 
rate
affect programming rate, we can put our knowledge into practice."

Es wird beschrieben, wie die Programmierzeit von der Kettenlänge 
abhängt. Falls du weißt, was mit Kette gemeint ist, ist gut. Ansonsten 
solltest du nochmal meinen obigne Link lesen, und zwar alle Kapitel.

Wenn du nur ein Bauteil am JTAG hängen hast, dann brauchst du keinen 
Boundary Scan. Andernfalls natürlich schon. Warum wohl?

von Manuel R. (manu123)


Lesenswert?

Boundary Scan Zellen nennen sich die einzelnen Glieder der Kette..
Also wenn die BS chain aus 900 bits besteht sind dies 900 BS Zellen die 
miteinander verbunden sind.
Also berechne ich die theoretische Programmierzeit für EIN device bei 
JTAG genauso wie bei BS? Spielt bei Programmierung über JTAG die 
Kettenlänge, welche im BSDL file angegeben ist, also eien Rolle?
Spielt bei Programmierung die im BSDL file angegebene maximale TCK 
Frequenz ne Rolle?
Kann ich mir kaum vorstellen, denn es gibt Bausteine die über eine JTAG 
Schnittstelle verfügen aber eben nicht BS fähig sind..

von Bronco (Gast)


Lesenswert?

"Boundary Scan" war ursprünglich dazu gedacht, den Zustand der 
physikalischen Pins eines Bausteins einzulesen, so daß man nicht mit 
dem Osci-Tastkopf an die Platine muß. Daher der Name:
Boundary = Grenze des Bausteins = seine Pins
Scan = Lesen

Nun kann man mit Boundary Scan die Pinne nicht nur lesen, sondern auch 
setzen. D.h. Du kannst die Pins vom PC aus "fernsteuern". Dies sollte 
das Testen erleichern (siehe "T" in "JTAG").

Wenn man Pinne fernsteuern kann, kann man dies dazu "mißbrauchen", um 
mit einem anderen Baustein wie z.B. einem externen Flash zu 
kommunizieren, bzw. diese Flash zu programmieren. Das Protokoll dieses 
Flashes ist aber  natürlich nicht Teil des JTAG-Protokolls (das 
JTAG-Protokoll kann ja unmöglich alle Flashe und alle erdenkbaren 
Verdrahtungen abdecken).

Unabhängig vom "Boundary Scan" kann jeder Chip-Hersteller das 
JTAG-Protokoll mit prorietärem Kram erweitern, z.B. mit 
Debugger-Protokoll oder Flash-Programmier-Protokoll. Das ist aber dann 
ein Hersteller-spezifischer Kram.

von Daniel V. (danvet)


Lesenswert?

Manuel Reisser schrieb:
> Boundary Scan Zellen nennen sich die einzelnen Glieder der Kette..
Nein. Die Glieder der Kette sind die einzelnen Bauteile, also FPGA, 
Controller, Flash, etc.

Für jedes Bauteil gibt es ein BSDL-File, das dieses Bauteil beschreibt. 
Über die JTAG-Schnittstelle kann man die Device-ID des Bauteils auslesen 
und so erfahren, was denn überhaupt an der Kette dran hängt und im 
entsprechenden BSDL-File die Eigenschaften lesen.

> Also wenn die BS chain aus 900 bits besteht sind dies 900 BS Zellen die
> miteinander verbunden sind.

Aus dem BSDL-File erfährst du wieviele Bits das entsprechende Bauteil 
hat. Das hat nix mit der Kette zu tun. Das BSDL-File weiß nix von der 
Kette.

> Also berechne ich die theoretische Programmierzeit für EIN device bei
> JTAG genauso wie bei BS?
Ja.

> Spielt bei Programmierung über JTAG die
> Kettenlänge, welche im BSDL file angegeben ist, also eien Rolle?

Es ist nicht die Kettenlänge angegeben, sondern die zu 
beschreibenden/lesenden Bits des Bauteils.


> Spielt bei Programmierung die im BSDL file angegebene maximale TCK
> Frequenz ne Rolle?
Ja, die sollte nicht überschritten werden. D.h. das langsamste Bauteil 
in der Kette bestimmt die maximale Frequenz.

> Kann ich mir kaum vorstellen, denn es gibt Bausteine die über eine JTAG
> Schnittstelle verfügen aber eben nicht BS fähig sind..

Alle JTAG-Bauteile sind BS fähig.


Die ganze Bauteil-Kette verhält sich wie ein riesiges Schieberegister. 
Das erste Bauteil hat 900Bits, das zweite 58. Wenn du also das zweite 
Bauteil ansprechen willst, musst du deine Daten erstmal 900 Bits 
durchschieben (takten), damit sie dort ankommen, wo sie hin sollen.
Je mehr Bauteile du in der Kette hast, desto länger dauert es (weil mehr 
Bits), bis du die Daten geschrieben hast.

Soviel in aller Kürze. JTAG ist eigentlich recht einfach, die Fülle an 
Bauteilen und Möglichkeiten macht es aber sehr komplex.

von Christian R. (supachris)


Lesenswert?

Daniel V. schrieb:
> Wenn du also das zweite
> Bauteil ansprechen willst, musst du deine Daten erstmal 900 Bits
> durchschieben (takten), damit sie dort ankommen, wo sie hin sollen.

Das kann man umgehen, indem man den Baustein in den BYPASS Mode setzt. 
Eigentlich muss man nur die Länge des Instruction Registers wissen, 
damit man den BYPASS Befehl reinschreiben kann. Der BYPASS Befehl ist 
einer der wenigen festgelegten Befehle, der geht an jedem 1149.1 fähigem 
Baustein.
Dann hat man für diesen Baustein nur noch genau 1 TCK Verzögerung. Siehe 
hier: 
http://www.corelis.com/education/Boundary-Scan_Tutorial.htm#requiredinstructions

von Manuel R. (manu123)


Lesenswert?

Morgen,
Mit kette meine ich in diesem Fall nicht die die externe Verkettung 
einzelner Bauelemente sondern das Boundary scan register, das wiederrum 
aus einzelnen Boundary Scan Zellen besteht. Das is Fakt!
(Sorry, vielleicht schelcht ausgedrückt)
Mit 900 Bits meine ich also die Länge des internen BS Registers.
@ Christian : Da hast du recht, so wird das gemacht
@ Daniel nochmal : Mit boundary scan kenn ich mich eig recht gut aus, 
ich weiß also wozu ein BSDL File da ist usw.
Zu deinem letzten Absatz :
http://www.corelis.com/blog/index.php/blog/2011/01/10/jtag-for-functional-test-without-boundary-scan

"There’s a JTAG port, but this processor does not support boundary-scan 
test. This is something that often comes up when talking to our 
customers—aren’t JTAG and boundary-scan synonymous? Not necessarily.

A particular processor might have a JTAG port for programming and debug 
without including any boundary-scan capability."

Ganz klar wird hier gesagt das ein JTAG fähiger Baustein nicht 
gleichzeitig BS fähig ist, dass ist ja genau das was mich verwirrt!!
Wenn ein JTAG fähiger Baustein nicht BS fähig ist heißt das das diesem 
das BS Register fehlt. Wie funktioniert die Programmierung dann bei 
JTAG?

@Bronco : Um die Pins via JTAG fernsteuern zu können benötige ich doch 
auch an jedem Pin eine Zelle (wie die BS Zelle) die dies übernimmt, oder 
nicht?

Das ist genau der Knackpunkt bei dem es bei mir hängt! JTAG-fähiger 
Baustein welcher nicht BS fähig ist wird wie programmiert? Er hat ja 
dann kein BS Register, also kein Register um die bits zu den einzelnen 
Pins zu shiften um diese zu kontrollieren!

Danke

von Christian R. (supachris)


Lesenswert?

Manuel Reisser schrieb:
> Das ist genau der Knackpunkt bei dem es bei mir hängt! JTAG-fähiger
> Baustein welcher nicht BS fähig ist wird wie programmiert?

Ganz einfach über hersteller-spezifische Algorithmen, die lediglich JTAG 
als elektrische Schnittstelle nehmen. Ist schon so, JTAG muss nicht BS 
heißen, der MSP430 hat zum Beispiel auch JTAG als Programmierinterface 
und kann kein BS, der kann nichtmal in den BYPASS Modus geschalten 
werden, kann also nicht mit anderen JTAG Bausteinen in einer Kette 
eingesetzt werden. Die programmierung kann bei verschiedenen 
Bausteinen(z.B. Xilinx) wahlweise über JTAG und herstellerspezische 
Algorithmen erfolgen, oder auch über IEEE1532, was auf IEEE1149 
aufsetzt. Damit wollte man eine Art standardisiertes 
programmierverfahren entwickeln, eventuell ist es das, was du meinst. 
Aber meines Wissens unterstützen das nicht allzu viele Hersteller.

von Manuel R. (manu123)


Lesenswert?

Grunsätzlich gehts mir darum :

Bei boundary scan wird das boundary scan Register verwendet um die Pins 
zu kontrollieren und damit den embedded Flash zu programmieren.
Nun hat ein Bauteil, wie der MSP430, welcher JTAG fähig ist aber nicht 
BS-fähig kein boundary scan Register, kann somit auch nicht von der 
Programmierung her analog zu boundary scan funktionieren.
Für die Programmierung mit boundary scan gibt es theoretische 
Berechnungen, wie man die Programmierzeit ausrechnen kann (Siehe 1. 
Link)
Wie siehts bei JTAG aus? Da ich hier keine Kette hab muss die 
theoretische Berechnung anders aussehen.
Danke

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Manuel Reisser schrieb:
> Für die Programmierung mit boundary scan gibt es theoretische
> Berechnungen, wie man die Programmierzeit ausrechnen kann (Siehe 1.
> Link)

Das dürfte ziemlicht theoretischer Natur sein.  In der Praxis wird
wohl die Schreibzeit im Flash/EEPROM der limitierende Faktor sein.
Das sind nämlich in der Regel einige 10 ms pro Block (oder Page).

von Manuel R. (manu123)


Lesenswert?

Deshalb hab ich ja theoretische Berechnung geschrieben ;)
edit : wird aber denk ich mal relativ eng, da die Programmierung über BS 
relativ langsam ist..

von Christian R. (supachris)


Lesenswert?

Wieso sollte das über BS zu langsam sein? Kommt eben drauf an, wieviele 
BS-Zellen in dem Chip sind. Einen BS-fähigen Chip "normal" über JTAG zu 
programmieren dauert dann genauso lange, da das BYPASS nur für den 
gesamten Chip gilt.
Wozu soll diese Betrachtung gut sein? Das ist doch komplett aus der 
Realität gerissen. Wird das eine Doktorarbeit?

von Florian V. (Gast)


Lesenswert?

Manuel Reisser schrieb:
> Bei boundary scan wird das boundary scan Register verwendet um die Pins
> zu kontrollieren und damit den embedded Flash zu programmieren.

Woher stammt diese Erkenntnis? Der viel weiter oben verlinkte Blog 
sprach von der Programmierung eines externen Flash! Ich glaube kaum, das 
internes Flash über die BSC programmiert wird, denn der Boundary Scan 
Test definiert die Kommunikation mit der Außenwelt, die chipinterne 
Funktionalität wird während des BST normalerweise abgetrennt.

Jörg Wunsch schrieb:
> Das dürfte ziemlicht theoretischer Natur sein.  In der Praxis wird
> wohl die Schreibzeit im Flash/EEPROM der limitierende Faktor sein.
> Das sind nämlich in der Regel einige 10 ms pro Block (oder Page).

Das ist -leider- Wunschdenken. Nehmen wir z.B. ein PC28F256P30TF von 
Numonyx:
Erreichbare Schreibrate bei Verwendung der maximalen Buffergröße: 1,14 
MB/s. Nutzbare Rate bei Programmierung über die BSC eines FPGA mit einer 
BSC Länge von 1164 Bits und einer TCK Frequenz von 10MHz: 4,6 kB/s

Dies gilt natürlich nur für die Programmierung eines externen Flash über 
die BSC. Und die BSC kann bei FPGAs schon mal sehr lang werden. Und dann 
bestimmt diese Länge die Programmierzeit.

(Über Tricks kann man die Geschwindigkeit wieder erhöhen, aber das ist 
ein anderes Kapitel.)

von Manuel R. (manu123)


Lesenswert?

Florian V. schrieb:
> Woher stammt diese Erkenntnis? Der viel weiter oben verlinkte Blog
>
> sprach von der Programmierung eines externen Flash! Ich glaube kaum, das
>
> internes Flash über die BSC programmiert wird, denn der Boundary Scan
>
> Test definiert die Kommunikation mit der Außenwelt, die chipinterne
>
> Funktionalität wird während des BST normalerweise abgetrennt.

Diese Kenntnis kommt aus unterschiedlichen Betrachtungen:
Wenn ich in einer Kette aus 2 Bausteinen den letzen Programmieren will, 
addiere ich die BS Zellen beider Bausteine um die effektive Länge des BS 
registers herauszubekommen. Wenn die Programmierung nicht über die Kette 
laufen würde bräuchte ich dies ja nicht zu tun, alsio die Zellen des 
letzten Bausteins dazu addieren.. Der boundary scan test beinhaltet ja 
unterschiedliche Operationen, nicht nur die Kommunikation mit der 
Außenwelt.

@Christian R. :
Ich bin mir eigentlich ziemlich sicher das die Programmierung über 
boundary scan langsamer ist, da die bits welche zur Programmierung 
"nötig" sind durch das kompleete scan register geshifted werden müssen, 
und zwar für jeden Schreibvorgang.
Nö, keine Doktorarbeit, soll aber für eine relativ theoretische Arbeit 
verwendet werden.

von Andreas Bayer (Gast)


Lesenswert?

Es wurde schon viel Richtiges geschrieben. Daher möchte ich nur einen 
Link beisteuern, unter dem viel um die Entstehung und Verwendung von 
JTAG (das ist eigentlich der Name der Erfindergruppe "Joint Test Access 
Group") zu lesen ist: http://corelis.eu/education/JTAG_Tutorial.htm

Interne Flashes werden übrigens oft aus der Entwicklungsumgebung 
programmiert, indem über das JTAG-Interface ein Stück Code in das 
interne RAM geladen und dort ausgeführt wird (Emulationsmodus). Der Code 
empfängt dann den Flash-Inhalt über das JTAG-Interface und programmiert 
das on-chip Flash. Für den Entwickler ist diese Methode meist nicht 
zugänglich.

Ähnliche Methoden gibt es auch für extern angeschlossene programmierbare 
Bauteile, die aber jeweils spezifisch für einen bestimmten Controller 
realisiert werden. Boundary Scan kann dass natürlich auch, sogar 
unabhängig vom Prozessor/FPGA, ist aber i.d.R. deutlich langsamer.

von Manuel R. (manu123)


Lesenswert?

Hallo Andreas,

Dies wird aber vermutlich nicht so gemacht wenn der Bootloader beim 
Bestücker in den interne Flash des Mikrocontrollers geschrieben wird 
nehm ich mal an..?
Unsere Prüfvorschrift belegt das der Bestücker den bootloader über JTAG 
ins interne Flash schreibt.
Der wird das wohl nicht über die Entwicklungsumgebung machen? (So macht 
mans wahrscheinlich während der Prototypenphase in der Entwicklung nehm 
ich mal an..?)
Danke dir

von Bronco (Gast)


Lesenswert?

Hi Manuel,

ich hab den Eindruck, Du bringst zwei Sachen durcheinander.
Stell Dir vor, Du hast eine Garage (Dein µC mit internem Flash) von 
Daimler-Benz. In der Garage ist ein genormtes Fenster (JTAG Boundary 
Scan) und ein 6m breites proprietäres Tor von Daimler-Benz (proprietäres 
Flash-Programmier-Protokoll über JTAG).
Frage: Wer würde freiwillig seinen Benz in Einzelteilen durch's Fenster 
in die Garage reichen, nur weil dieses in den meisten Garagen auch 
vorhanden ist?

von Christian R. (supachris)


Lesenswert?

Manuel R. schrieb:
> Ich bin mir eigentlich ziemlich sicher das die Programmierung über
> boundary scan langsamer ist, da die bits welche zur Programmierung
> "nötig" sind durch das kompleete scan register geshifted werden müssen,
> und zwar für jeden Schreibvorgang.

Welches Scan-Register meinst du denn? Klar müssen die durch alle 
BS-Zellen durch, wenn der Chip BS kann, und das auch, wenn über 
spezielle Befehle ins Instruction Register und die USER Register 
programmiert wird, wie das bei den Herstellern üblich ist. Dazu muss man 
trotzdem alles durchschieben, BYPASS betrifft den gesamten Chip. JTAG 
Programmierung nutzt ja auch nur die selbe Infrastruktur im Chip wie die 
IEEE1532 Programmierung, nur halt nicht so abstrahiert.

von Florian V. (Gast)


Lesenswert?

Christian R. schrieb:
> Welches Scan-Register meinst du denn? Klar müssen die durch alle
> BS-Zellen durch, wenn der Chip BS kann, und das auch, wenn über
> spezielle Befehle ins Instruction Register und die USER Register
> programmiert wird, wie das bei den Herstellern üblich ist. Dazu muss man
> trotzdem alles durchschieben, BYPASS betrifft den gesamten Chip.

Die BSC befindet nicht bei allen JTAG-Instructions in der Chain, nur bei 
SAMPLE/PRELOAD und EXTEST wird sie in die Kette eingeschaltet. Bei 
anderen Kommandos ist sie schlicht nicht da. Da werden dann, wenn 
benötigt, andere Register in die Chain eingeblendet, z.B. die für die 
interne Programmierung.

von Florian V. (Gast)


Lesenswert?

Manuel R. schrieb:
> Der boundary scan test beinhaltet ja
> unterschiedliche Operationen, nicht nur die Kommunikation mit der
> Außenwelt.

Hast Du dafür ein konkretes Beispiel, wo mit den Mitteln der BSC etwas 
anderes gemacht wird, als Verbindungen mit der Außenwelt abzufragen oder 
zu stimulieren? Im BSDL-File kann man da viel rauslesen. Das wäre mir 
nämlich neu.

Interne Programmierung wird üblicherweise über spezielle 
JTAG-Instructions gemacht, die dann gerade nicht über die BSC laufen.

von Christian R. (supachris)


Lesenswert?

Florian V. schrieb:
> Die BSC befindet nicht bei allen JTAG-Instructions in der Chain, nur bei
> SAMPLE/PRELOAD und EXTEST wird sie in die Kette eingeschaltet.

Achso? Das wusste ich auch noch nicht. Wieder was gelernt.

von Strubi (Gast)


Lesenswert?

Moin,

sehr verwirrender Thread, aber dafür können die Mitwirkenden nix. Liegt 
vor allem daran, dass JTAG die Bezeichnung "Standard" eigentlich gar 
nicht verdient hat.
Deswegen findet man auch eine Menge Bugs in den Implementationen, 
teilweise verstümmeln die Hersteller mit oder ohne Absicht die 
Funktionalität, von Dokumentation gar zu schweigen. So geschehen auch 
ursprünglich beim MSP430, Verkettung funktioniert nicht, und BSCAN fehlt 
bekanntlich.
Inzwischen ist aber einiges reverse-engineerte publiziert worden: Siehe 
dazu source code zum "mspdebug" tool.
Beim MSP430 gabs aber noch eine andere proprietäre Methode (allerdings 
dokumentiert), das interne Flash zu beschreiben.

Wenn man ein BSDL-File in die Finger kriegt, hat man schon mal Glück, 
dass man im Prinzip mit den geeigneten Tools einen Flash-Chip 
programmiert bekommt (dadurch dass man per BScan an den Pins wackeln 
kann). Für die zeiteffektive Produktion ist das aber nicht wirklich 
praktikabel. Der Emulations-Modus der schon genannt wurde, ist da die 
schnellere Variante, ist aber auch bei wenigen CPUs vernünftig 
dokumentiert: Dabei werden einfach die Instruction-Opcodes per JTAG in 
die CPU geladen, somit der Chip wie von aussen ferngesteuert. Wie das im 
Prinzip geht, kann man hier (leider nur auf englisch) nachlesen:
http://www.section5.ch/doc/jtag/jtag-impl-ew2012.pdf

Gibt auch noch ein nettes grafisches Tool zum herumspielen, wenn man ein 
BSDL-File hat: goJTAG (www.gojtag.com). Wurde auch mal aktiv beworben, 
das Projekt scheint mir nur recht verwaist, alte Bugs werden wohl in der 
freien Version nicht mehr behoben..

Grüsse,

- Strubi

von Manuel R. (manu123)


Lesenswert?

Bronco schrieb:
> Hi Manuel,ich hab den Eindruck, Du bringst zwei Sachen durcheinander.Stell Dir 
vor, Du hast eine Garage (Dein µC mit internem Flash) von Daimler-Benz. In der 
Garage ist ein genormtes Fenster (JTAG Boundary Scan) und ein 6m breites 
proprietäres Tor von Daimler-Benz (proprietäres Flash-Programmier-Protokoll über 
JTAG).Frage: Wer würde freiwillig seinen Benz in Einzelteilen durch's Fenster in 
die Garage reichen, nur weil dieses in den meisten Garagen auch vorhanden ist?

Guten Morgen alle zusammen,
Hi Bronco,

Ich weiß selber das die Programmierung über boundary scan nicht wirklich 
Sinn macht wenn man ein einziges, dazu auch noch embedded Flash 
programmieren will.

@Florian V. : bin mir nicht mehr sicher, war RUNBIST nicht eine 
Operation bei der die BS chain verwendet wird aber nicht mit der 
Außenwelt "direkt" kommuniziert wird?

@Strubi : Danke, schau ich mir mal an.

Aber ich denke ich habe meine Antwort auf die Fragé. Und zwar ist es so:

BS ist eine Methode der in-system Programmierung über JTAG. JTAG is das 
übergeordnete Kommunikations&Kontroll Protokoll und kann für mehrere 
Methoden verwendet werden, nicht nur für Boundary scan. Da gibts dann 
z.B noch die Methode die Strubi beschrieben hat und noch einige Andere.
Wenn ein Baustein über JTAG programmiert werden kann heißt das noch 
lange nicht, dass dieser über BS programmiert werden kann, denn dazu 
benötigt er die BS Zellen welche der bei den anderen Methoden über JTAG 
nicht benötigt.

Diese Antwort hätte mir eigentlich ausgereicht :P
Danke trotzdem!!

von Florian V. (florianv)


Lesenswert?

Manuel R. schrieb:
> bin mir nicht mehr sicher, war RUNBIST nicht eine
> Operation bei der die BS chain verwendet wird aber nicht mit der
> Außenwelt "direkt" kommuniziert wird?

Nach der Spec (siehe z.B. 
http://www.scribd.com/doc/63310993/33/The-RUNBIST-instruction ) wird für 
RUNBIST das "Test data register" eingeblendet. Und dies darf, wieder was 
gelernt, identisch mit dem Boundary Scan Register sein.

von Christian R. (supachris)


Lesenswert?

Manuel R. schrieb:
> BS ist eine Methode der in-system Programmierung über JTAG.

Naja, das nun eben gerade nicht. Eher so:

Boundary Scan (IEEE1149.1) ist eine Methode zum statischen digitalen 
Verbindungstest. Boundary Scan benutzt JTAG als elektrisches Interface. 
Einige Baisteine können über die Boundary Scan Register auch interne 
oder externe Flash-Speicher programmieren. Dazu gibt es auch 
herstellerunabhängige Protokolle wie z.B. IEEE1532. Da dies durch die 
Länge der Schiebekette ineffizient sein kann, wird die Programmierung 
meist über herstellerspezifische Protokolle durchgeführt, die ebenfalls 
JTAG als Interface benutzen. Nicht jeder Baistein, der einen JTAG 
Anschluss hat, ist boundary scan fähig, aber jeder boundary scan fähige 
Baustein hat einen JTAG Anschluss.

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.