Impedanz der Mikrocontroller-Pins ohne Stromversorgung?

Ich habe einen seriellen Flash-Chip, der an einen ARM-Mikrocontroller (AT91SAM9G20) angeschlossen ist. Ich möchte den seriellen Flash programmieren können, nachdem beide Chips auf die Platine gelötet sind. Für jede der seriellen Flash-Leitungen kann ich Vias hinzufügen, die ich ziemlich einfach mit Pogo-Pins treffen kann.

Muss ich auch die seriellen Flash-Pins mit Jumpern vom Mikrocontroller trennen? Wie hoch ist die Impedanz der Mikrocontroller-Pins, wenn das Mikro nicht mit Strom versorgt wird?

(Ich habe die Impedanz der Pins gegen Masse am Mikrocontroller parallel zum Blitz mit einem Multimeter bei etwa 2 MΩ gemessen, aber ich traue dieser Art von Messung nicht, wenn ich in Anwesenheit von Dioden arbeite.)

Hören Sie auf die Stimme der Erfahrung: Irgendwann in der Entwicklung des Projekts möchten Sie den seriellen Flash vom Mikrocontroller aus programmieren. Unabhängig davon, wie sehr Sie Feldänderungen für unwahrscheinlich halten, sollten Sie Ihre Firmware schreiben, um den seriellen Flash zu aktualisieren. Dann muss Ihre Testvorrichtung nur noch mit dem Hauptmikrocontroller kommunizieren.
Den seriellen Flash kann ich eigentlich schon vom Mikrocontroller aus programmieren, ist aber wegen der beteiligten JTAG-Software relativ langsam. Aber ich denke ernsthaft darüber nach, dies ganz fallen zu lassen und bei der langsameren JTAG-Methode zu bleiben, da bekannt ist, dass sie funktioniert.

Antworten (2)

Die Impedanz der Mikrocontroller-Pins ist wahrscheinlich ziemlich hoch. Das Problem ist jedoch, dass diese Pins wahrscheinlich (ich kenne dieses Mikro nicht und habe es nicht nachgeschlagen) Schutzdioden oder ähnliche Schaltungen für Vss und Vdd haben. Das Nettoergebnis ist, dass sie innerhalb eines Spannungsabfalls von Masse (und Leistung, da Leistung = Masse ist, wenn sie nicht mit Strom versorgt werden) wie eine hohe Impedanz aussehen. Wenn Sie versuchen, es höher zu treiben, kann es erheblichen Strom verbrauchen und auch das Mikro beschädigen. In einigen Fällen kann es sogar das Mikro einschalten, aber nicht so, wie es beabsichtigt ist.

Es gibt im Allgemeinen zwei Möglichkeiten, damit umzugehen

  1. Schalten Sie beide Einheiten während des Herstellungstest- und Programmiervorgangs ein. Dann haben Sie normale Datenleitungen, die sich so verhalten, wie sie sollen. Stellen Sie sicher, dass das Mikro diese auf hohe Impedanz einstellt. Möglicherweise müssen Sie zu diesem Zweck vorübergehend anderen Code darin laden. Es ist nicht ungewöhnlich, einen speziellen Produktionstestcode oder Modi für Produktionstests im Betriebscode zu haben.

  2. Legen Sie genügend Widerstand in Reihe, damit das Mikro nicht verletzt wird (viel Glück, wenn Sie klare Spezifikationen dafür finden), und laden Sie das Signal nicht bis zu dem Punkt, an dem die Programmiervorrichtung nicht verarbeiten kann.

Weiter zu Punkt #1. Die meisten Mikrocontroller halten ihre IO-Leitungen während des Zurücksetzens im hochohmigen Zustand. Sie müssen also möglicherweise nur sicherstellen, dass das Mikro im Reset gehalten wird, während Sie den anderen Teil programmieren.
Ich kann Methode 1 nicht einfach ausführen, da der serielle Flash das Programm enthält, das das Mikro ausführen wird, daher ist Methode 2 ansprechender. Wenn ich 10k-Widerstände mit allen seriellen Flash-Datenpins in Reihe schalten würde, würde dies den Strom auf ~ 0,27 mA begrenzen, wenn ich sie hochziehe, und ich bin zuversichtlich, dass das nichts verbrennen würde. Ich würde erwarten, dass die Kommunikation zwischen den Chips immer noch funktioniert, da 10k im Vergleich zur Impedanz von ~ MΩ aller Eingänge klein ist. Klingt das sinnvoll?
@markrages: In einer Zeile, in der ich eine LED angeschlossen habe, scheint dieses Mikro sowohl beim Zurücksetzen als auch beim Booten ~ 50 uA zu verlieren. Stoppt, sobald Linux bootet und der sysfs-Treiber übernimmt. Etwas merkwürdig.
@pingswept, die statische Impedanz der Pins ist nicht wichtig, sondern die Kapazität der Eingänge. Die Kapazität wird mit den 10k-Widerständen kombiniert, um ein Tiefpass-RC-Filter zu bilden. Das ist schlecht für eine Hochgeschwindigkeits-Datenleitung. Wie ein serieller Blitz wahrscheinlich haben.
@markrages Ich könnte die Vorwiderstände auf 1k verringern. Kann ich die Auswirkungen irgendwie abschätzen? Die Spuren sind alle 5 mil breit mit einer Länge von etwa 0,5 Zoll, meistens etwa 30 mil von einer Grundebene entfernt.
@pings: Abbildung 10 pF mindestens gegen Masse, 20 wären sicherer. Berechnen Sie dann die Zeitkonstante und die resultierende Anstiegszeit. Zum Beispiel 10 kOhm x 20 pF = 200 ns. Die Anstiegszeit von 95 % beträgt 3 Zeitkonstanten oder in diesem Fall 600 ns. Sie müssen auch die Rauschaufnahme an einem solchen digitalen Knoten mit relativ hoher Impedanz berücksichtigen.
@pingswept 50 uA? Vielleicht hält das Mikro beim Zurücksetzen schwache Klimmzüge. Wie auch immer, 50 uA sollten für Ihren seriellen Flash-Programmierer kein Problem darstellen.
@OlinLathrop: Ich könnte den Serienwiderstand auf 1k verringern, was eine Anstiegszeit von 95% in 60 ns bedeuten würde, was auf meinem seriellen 1-MHz-Takt in Ordnung zu sein scheint. Aber das alles scheint riskant genug, dass ich denke, ich bleibe bei der langsameren JTAG-Programmierung, die ich habe.

Mikrocontroller und andere digitale ICs enthalten fast immer Schaltungen zum Schutz der Pins vor statischen Aufladungen, indem zumindest ein Teil des Stroms abgeleitet wird, wenn die Pin-Spannungen anfangen würden, gefährliche Werte zu erreichen. Beachten Sie, dass, wenn es keine Schutzschaltung gäbe und ein Pin überhaupt nicht lecken würde, bis er katastrophal ausfällt, sogar ein Picoamp, der in einen Pin fließt, ausreichen würde, um einen Chip zu zerstören (selbst ein Picoamp, der in einen Chip fließt, wird verursachen die Spannung zu erhöhen, bis entweder ein Leck vorhanden ist oder das Teil ausfällt; in der Praxis würden viele Chips beginnen, mehr als ein Picoampere zu lecken, bevor die Spannung hoch genug ist, um einen katastrophalen Ausfall zu verursachen). Es gibt zwei allgemeine Möglichkeiten, dies zu erreichen:

  1. Entwerfen Sie einen Pin so, dass, wenn seine Spannung deutlich höher als VDD ist (mehr als ~0,3 Volt), Strom von diesem Pin zu VDD fließt; Wenn der Pin mehr als ~ 0,7 Volt über VDD bekommt, steigt der Strom deutlich an.
  2. Entwerfen Sie einen Pin so, dass, wenn seine Spannung zu weit über VSS liegt (z. B. mehr als ~5,5 Volt), Strom zu VSS fließt.
Die frühere Art des Schutzes ist billiger und effektiver in Fällen, in denen es nicht erforderlich ist, einen Stift über VDD zu führen. Dies bedeutet jedoch, dass jeder Pin, an dem Spannung anliegt, wenn VDD nicht vorhanden ist, versucht, das Gerät mit Strom zu versorgen.

Um zu sehen, welchen Schutztyp ein Stift hat, überprüfen Sie den Abschnitt "Absolute Maximalwerte" des Datenblatts. Wenn die maximale Spannung eines Pins als etwas wie VDD + 0,3 Volt aufgeführt ist, kann der Pin nicht verwendet werden, während der Chip nicht mit Strom versorgt wird. Wenn es als so etwas wie "VSS + 5,5 Volt" oder einfach als "5,5 Volt" aufgeführt ist, kann es möglich sein, den Pin zu verwenden, während das Gerät ausgeschaltet ist.