ICSP -
Allgemeines
Wie
funktioniert ICSP?
Low
Voltage Programming
Was ist
beim Entwurf ICSP-tauglicher Schaltungen zu beachten?
ICSP-Anschluss bei PIC18FxxJxx,
PIC24, dsPIC33, PIC18FxxKxx
Das ICSP-Kabel
universeller ICSP-Adapter für
PICs/dsPICs DIL-Gehäuse
ICSP-ICD-Adapter
ICSP-Adapter für PIC10F2xx-Typen
ICSP-Adapter für PIC12F/16F/18F-Typen
Das Prinzip des Brennens im
separaten Brenner stößt spätestens bei PICs im
SMD-Gehäuse an seine Grenzen. Geeignete
Testsockel/Nullkraftsockel gibt es nur für SMD-PICs mit
maximal 28 Pins im (S)SOP-Gehäuse, und die sind auch nicht
gerade billig (30 ... 45 Euro bei Farnell). Man kann sich auch
mit einer Bastellösung behelfen, oder
aber es auch auf die Spitze treiben, und mit viel Fleiß
und Geschick einen SMD-Adapter selber
basteln, wie "Lardz" bewiesen hat.) Bei
größeren SMP-PICs gibt es aber keine praktikable
Lösung für einen Testsockel/Nullkraftsockel im
separaten Brenner.
Alle meine Brenner besitzen aber eine 5-polige Buchsenleiste, die mit "ICSP" beschriftet ist. Die bietet eine Lösung: das Brennen des PIC in seiner Anwendungsschaltung - In Circuit Serial Programming (ICSP).
Außerdem lassen sich alle möglichen zusätzlichen IC-Sockel über den ICSP-Steckverbinder an den Brenner anschließen, und damit dann auch z.B. PICs im PLCC-44-Gehäuse brennen.
Auch wenn der PIC beim Brennen mit allen Pins in der Fassung des Brenners steckt, elektrisch sind mit dem Brenner nur 5 Pins verbunden. Das ist möglich, da der PIC mit Hilfe einer seriellen Datenübertragung programmiert wird - dem In Circuit Serial Programming (ICSP).
Dazu benötigt man:
|
|
Leitung des Brenners | Signalbezeichnung | Pin des PIC |
| 1 | Leitung für die (+12V) Programmierspannung | Vpp | MCLR/Vpp (der Reset-Anschluss) |
| 2 | Leitung für die (+5V) Betriebsspannung | Vdd | Vdd |
| 3 | Masseleitung | Vss | Vss |
| 4 | Datenleitung | Data (PGD) | meist RB7 |
| 5 | Taktleitung | Clock (PGC) | meist RB6 |
Um in den Programmiermodus zu gelangen, wird zunächst die 5V-Betriebsspannung eingeschaltet und die Pins MCLR, RB6 und RB7 mit Masse verbunden. Dann wird MCLR schnell von Masse auf die Programmierspannung von 12 V gezogen. Dabei müssen RB6 und RB7 noch auf Masse gehalten werden.
Danach kann der Brenner den PIC über die Pins RB6/RB7 auslesen und neu programmieren.
An der ICSP-Buchse stehen also alle Signale zur Verfügung, um einen PIC zum Programmieren an den Brenner anzuschließen. Ein Beispiel für die Nutzung der ICSP-Buchse sind Adapter, mit dem eine zusätzliche Schaltkreis-Fassung an einen beliebigen Brenner angeschlossen werden kann, wenn dieser über die ICSP-Buchse verfügt.
Die Hauptanwendung der ICSP-Verbindung ist aber eine andere: Das Brennen eines PIC, der bereits in seine Anwendungsschaltung eingebaut ist.
Dazu verfügt die Leiterplatte der Anwendungsschaltung des PIC auch über eine ICSP-Buchse. Brenner und Anwenderschaltung werden über ein 5-poliges Kabel miteinander verbunden, und der PIC wird "zuhause" gebrannt. Das lästige Umstecken des PIC zwischen Anwendungsschaltung und Brenner entfällt, und das komfortable Brennen von PICs im SMD-Gehäuse wird überhaupt erst möglich.
Das oben beschriebene Verfahren benötigt zum Brennen die relativ hohe Spannung von 12V. Deshalb wird es high-voltage-programming (HVP) genannt. High-voltage-programming ist das Standardverfahren.
Einige PICs unterstützen
zusätzlich das low-voltage-programming (LVP). Dabei erzeugt
der PIC die benötigte Programmierspannung intern selbst. Es
werden keine 12V zum Brennen benötigt. Alle LVP-PICs
beherrschen aber auch das HVP. Um dem PIC zu Beginn des
Programmierens mitzuteilen, welches Verfahren benutzt wird, ist
eine zusätzliche Leitung im Interface nötig. Diese
Leitung trägt den Namen PGM und geht in der Regel am PIC
zum Pin RB3.
Wurde ein PIC im LVP-Mode gebrannt,
dann ist das PGM-Pin (z.B. RB3) vom PIC nicht mehr verwendbar,
es ist dann für den normalen PIC-Betrieb blockiert. Man
erkauft sich die einfachere Programmierung also mit dem Verlust
eines I/O-Pins. Aus diesem Grunde bevorzuge ich HVP.
Um in den HVP-Mode zu gelangen, wird PGM auf low (0V) gehalten, und MCLR von low (0V) auf Vpp (12V) umgeschaltet.
Um in den LVP-Modus zu gelangen, wird zuerst PGM und danach MCLR auf high (5V) gelegt.
Versucht man nun mit dem oben
beschriebenen 5-Leitungs-ICSP-Anschluss (in dem PGM ja nicht
vorkommt) den PIC in den HVP-Mode zu schalten, während
versehentlich das PGM-Pin aus der Anwenderschaltung high Pegel
bekommt, dann programmiert man den PIC versehentlich im
LVP-Mode. Das fällt erst auf, wenn später das PGM-Pin
des PIC nicht als I/O-Pin funktioniert.
Aus diesem
Grunde ist es nötig, bei allen LVP-fähigen PICs
das PGM-Pin während des Brennens auf low-Pegel zu
halten.
Erfahrungsgemäß ist es
unproblematisch, wenn das Pin gar nicht beschaltet ist. Das ist
der Fall, wenn man den PIC im Brenner brennt. Aber gerade bei
ICSP-Programmierung kann es leicht vorkommen, das in der
Anwendungsschaltung PGM versehentlich high erhält.
Tip:
Während des Brennens kann man
eine Konfigurationsoption wählen, die LVP deaktiviert.
Danach geht der PIC immer in den HVP-Mode, unabhängig vom
Pegel an PGM. Ich empfehle, diese Option zu nutzen. Selbst wenn
man dann beim ersten Brennen versehentlich im LVP-Mode ist,
löst dann ein zweiter Brennvorgang alle Probleme. Bei
diesem geht der PIC dann automatisch in den HVP-Mode (, wenn
beim ersten Brennen LVP korrekt deaktiviert wurde).
![]() |
Programmierspannung
MCLR/Vpp Dieser Anschluss ist am schwierigsten. Meine Brenner ziehen dieses
Pin über einen Widerstand auf Masse, oder auf +12V.
Schwierig ist aber auch der Hochziehwiderstand. Beim Brennen trennt nur dieser Widerstand die 5-V-Versorgung der Anwendungsschaltung von den 12V des Brenners. Hier muss deshalb eine Diode vor Schäden durch Überspannung schützen. Der 5V-Hochziehwiderstand
muss deutlich größer sein (mindestens 20 X)
als der Widerstand, der im Brenner das MCLR-Pin mit
Masse verbindet. Ansonsten kann der Brenner MCLR nicht
sauber auf Masse ziehen. Bei den alten Brennern 1&3 sollte ein 200 kOhm großer Widerstand zwischen dem Reset/MCLR-Pin und +5V eingesetzt werden. |
Sind neben dem PIC noch andere
Bauelemente mit der 5-V-Versorgung der Anwendungsschaltung
verbunden, würde der Brenner bei Brennen die gesamte
Anwendungsschaltung in Betrieb nehmen. Bei größeren
Schaltungen könnte das den Brenner überlasten. Eine
Entkopplung mit Shottky-Dioden oder ein Jumper in der
+5V-Leitung trennen dann besser die beiden potentiellen
5-V-Quellen.
Wird mit einer Shottky-Diode
entkoppelt, dann ist die Vdd des PICs im Normalbetrieb ca. 0,2V
kleiner als Vdd der restlichen Schaltung. Meist ist das
unkritisch, aber wenn Vdd z.B. als positive Referenzspannung des
ADC verwendet wird, kann es zu Messwertverfälschungen des
ADC kommen. In diesem Fall ist ein Jumper der Diode vorzuziehen.
Größere PICs besitzen mehrere Vdd-Pins. Zum Programmieren sind alle diese Pins untereinander zu verbinden, was in der Anwenderschaltung in der Regel ohnehin gegeben ist.
Masseverbindung Vss
Das ist die einzige unkritische
Verbindung. Normalerweise wird die Masse des Brenners direkt mit
der Masse des PIC und damit auch mit der Masse der
Anwenderschaltung verbunden.
Größere PICs besitzen
mehrere Vss-Pins. Zum Programmieren sind alle diese Pins
untereinander zu verbinden, was in der Anwenderschaltung in der
Regel ohnehin gegeben ist.
Takt- und Datenleitung PGC (RB6)
und PGD (RB7)
Wer in der Anwendungsschaltung auf
diese beiden Pins verzichten kann, sollte sie exklusiv der
ICSP-Schnittstelle zur Verfügung stellen. Werden die beiden
Pins aber benötigt, sollten sie mit der ICSP-Buchse direkt,
aber mit dem Rest der Schaltung über Widerstände von
wenigstens 1 kOhm verbunden werden. Ist so ein 1 kOhm Widerstand
für die Applikationsschaltung zu groß, helfen nur
noch Jumper, die vor dem Brennen geöffnet werden
müssen, um den PIC von der restlichen Schaltung zu trennen.
Bei den
herkömmlichen PIC10F, PIC12F, PIC16F, PIC18Fxxxx, dsPIC30F
wird das gesamte Innenleben des Mikrocontrollers mit einer
einheitlichen Betriebsspannung Vdd betrieben (mal abgesehen von
Vref oder Vusb, aber das ist ein anderes Thema). Nun weiß
aber jeder PC-Overclocker, dass die Stromaufnahme und damit auch
die Verlustleistung stark von der Höhe der Betriebsspannung
abhängig ist. Das mag der Grund dafür sein, dass
Microchip bei einigen Familien die Stromversorgung der
Prozessorkerns von der Stromversorgung der Input/Output-Hardware
trennte.
Diese PICs
besitzen zwei Betriebsspannungen, die auf getrennten Pins
eingespeist werden kann.
![]() |
Der Einfachheit halber empfehle ich für alle PIC18FxxJxx den internen Spannungsregler zu verwenden, und mit Vdd=3,3V zu arbeiten. Am Vcore-Pin ist ein 10uF-Kondensator nach Vss anzuschließen. Mein Brenner9 kann hier problemlos eingesetzt werden. |
![]() |
Ein eventuell vorhandenes ENVREG-Pin (bei PICs ab 60 Pins) ist mit Vdd zu verbinden. |
![]() |
Bei PIC18LFxxJxx (mit maximal 44 Pins) muss man entweder Vdd und Vcore mit maximal 2,7V speisen, oder man verwendet getrennte Spannungen (z.B. Vcore=2,5V; Vdd=3,3V). Das wird aber von meiner Brennerhardware NICHT direkt unterstützt. Eine (nicht erprobte) Lösung ist ein Betrieb mit 3,3V vom Brenner9 mit einer Absenkung der Spannung für Vcore mit Hilfe zweier Silizium-Dioden (keine Shottky-Typen!). |
![]() |
Alle dsPIC33F- und PIC24H-Typen haben einen internen Spannungsregulator zur Versorgund des Prozessorkerns mit 2,5V, der nicht extra eingeschaltet werden muss. Es genügt, 3,3 V in Vdd einzuspeisen, und am Vcore (oder Vddcore) Pin einen 10 uF-Kondensator nach Vss anzuschließen. |
![]() |
Die PIC24FJ-Typen ähneln bei der Stromversorgung am ehesten des PIC18FxxJxx. Mit Hilfe des vorhandenen internen Spannungsregulators für die Kernspannung, lassen sie sich alle mit 3,3V betreiben. |
![]() |
Eine Besonderheit weisen die PIC24FJ-Typen mit bis zu 44 Pins auf. Anstelle eines ENVREG-Pins besitzen sie ein DISVREG-Pin. Dieses entspricht einem invertierten ENVREG-Pin. Um den Spannungsregulator zu nutzen, ist dieses Pin also mit Vss zu verbinden. |
![]() |
Aber auch in dieser Familie gibt es natürlich Ausnahmen. Die großen (ab 60-Pins) Vertreter der PIC18FxxK22 und PIC18FxxK90 Gruppe haben Vddcore und ENVREG-Pins. Wird ENVREG mit Vdd verbunden, dann vertragen diese Typen 5V, und lassen sich mit dem Brenner8 wie auch mit dem Brenner9 brennen. |
![]() |
Wird aber ENVREG mit Vss verbunden, dann beträgt die maximale Betriebsspannung nur 3,3V, und es kann der Brenner9 oder der Brenner8 mit 3,3V-Adapter eingesetzt werden. |
![]() |
Ganz exotische sind die PIC18(L)F1xK50-Typen. Diese benötigen während der Programmierung zusätzlich 3V an Vusb (warum auch immer). Dazu verwendet man den Brenner9 oder den Brenner8 mit 3,3V-Adapter und verbindet Vusb mit Vdd. |
Natürlich gibt es auch andere
Lösungen, um ein Übersprechen auf die CLK-Leitung
zu vermeiden, z.B. kann man die CLK-Leitung vom
restlichen Kabel getrennt verlegen, wie es im Foto vom DIL-40-Adapter zu sehen ist.
Man kann auf die Masseleitung zwischen Vdd und DATA
auch verzichten, ihre Funktion erfüllt ja auch die Masse
zwischen DATA und CLK. Wer High-endig baut,
verwendet vielleicht ein 10-poliges Flachbandkabel, in dem jede
zweite Leitung auf Masse liegt .....
Da will ich keine weiteren
Vorschriften machen, Hauptsache CLK ist vor
Einstreuungen geschützt.
Wer diese einfache Regel missachtet, wird feststellen, dass schon die Autodetect-Funktion meiner Brennersoftware nicht funktioniert. Vom Brennen ganz zu schweigen.
Wie lang darf ein ICSP-Kabel
eigentlich sein?
Es sollte so lang wie nötig und
so kurz wie möglich sein. Wer nur einen zusätzlichen
Sockel adaptieren will, kommt mit 10 cm aus. Für ICSP
sollten 20 cm auch genügen. Wenn CLK ordentlich geschirmt
ist, sollte aber auch 1/2 Meter kein Problem sein. Zu lange
Kabel und Kabel ohne jede CLK-Schirmung führen immer wieder
zu Brenn-Problemen.
![]() |
In diesem Adapter lassen sich
alle PICs im DIL Gehäuse (8..40 Pins) am Brenner8 oder
Brenner5
programmieren. Dazu müssen allerdings die 5
ICSP-Steuerleitung manuell mit Drahtbrücken mit den
richtigen Pins des 40-poligen Testsockels verbunden
werden. |
| Mein Prototyp ist auf einer
Streifenleiterplatte aufgebaut, und hat keinen
ICD-Anschluss sondern nur mein Standard-ICSP-Kabel.
Dieses Foto zeigt den
Adapter an einem Brenner5. In
diesem Fall wird er benutzt, um einen dsPIC30F3012
mit Hilfe der Brennsoftware dsProg zu
brennen. Natürlich funktioniert
das auch am Brenner8
und Brenner9 mit
der Software US-Burn. |
![]() |
![]() |
Viele Test-Platinen von
Microchip (z.B. der universelle
Programmieradapter) haben eine ICD-Buchse zum
Anschluss von Brenner oder In-Circuit-Debugger. Dabei
handelt es sich im Prinzip um einen ICSP-Anschluss.
Allerdings benutzt Microchip hier einen 6-poligen
Westernstecker. Am Brenner oder Debugger (z.B. ICD2) befindet sich ebenfalls eine Westernbuchse, allerdings mit spiegelbildlicher Pinbelegung. Aus diesem Grunde müssen Brenner und Testplatine mit einem Cross-over-Kabel verbunden werden. Ein einfaches Adapterkabel, das die Pins 1..5 des Westernsteckers auf einen 5-polige Steckerleiste verbindet, stellt die Verbindung zwischen meinem Standard-ICSP-Anschluss und dem Microchip-ICD-Anschluss her. Damit kann z.B. der Brenner5 (ab Rev.7e) PICs auf Microchip-Testplatinen brennen, oder der ICD2 von Microchip kann PICs auf meinen Testplatinen brennen und debuggen. Allerdings muss die 5-polige Steckerleiste dabei in meinen Brenner genau andersherum eingesteckt werden, wie in meine Testplatinen:
|
. |
Die eigentlich 6-pinnigen PIC10F20x werden auch in einem
8-Pin-DIL-Gehäuse geliefert, bei dem 2 Pins nicht
belegt sind. Für diese PICs passt der weiter unten beschriebene Adapter
nicht.
Einen elektrisch passenden
DIL-8-Sockel, um die 12-Bit-Kern- PIC10F20x im niedlichen
DIL-8-Gehäuse zu brennen hat keiner meinen
Brennern. Dieser Adapter ist NICHT mit dem unten vorgestellten Adapter für normale 8-Pin-PICs identisch! |
![]() |
Der nebenstehende
Stromlaufplan stellt die Verbindung zwischen dem 5-poligen
Stecker und dem DIL-8-Sockel dar. Der Sockel ist in der
Draufsicht dargestellt.
Wichtig ist die zusätzliche Masseleitung (blau) im Flachbandkabel. Sie schirmt die CLK-Leitung gegen Einstreuungen von den anderen Leitungen (insbesondere DATA) ab. |
. |
Keiner meiner Brenner hat einen PLCC-44-Sockel, um PIC16F871, PIC16F84(A), PIC16F877(A), PIC16F74 oder PIC16F77 im quadratischen PLCC-44-Gehäuse zu brennen. All diese Chips lassen sich aber über einen einfachen Adapter an den 5-poligen ICSP-Steckverbinder der Brenner1/2/3/5/8 anschließen, und dann brennen. |
![]() |
Der nebenstehende
Stromlaufplan stellt die Verbindung zwischen dem 5-poligen
ICSP-Stecker und dem PLCC-44-Sockel dar. Der Sockel ist so
dargestellt, dass man von unten auf die Lötpins
schaut.
Wichtig ist die zusätzliche Masseleitung (blau) im Flachbandkabel. Sie schirmt die CLK-Leitung gegen Einstreuungen von den anderen Leitungen (insbesondere DATA) ab. Microchip empfiehlt generell alle Vss-Pins und alle Vdd-Pins anzuschließen. Bei mir geht es auch mit nur je einem Pin, wer aber einen Adapter neu baut, kann es ja gleich richtig machen, und der Microchip-Empfehlung folgen. |
. |
Für SMD-Gehäuse wie
SO-18 (PIC16F84(A), PIC16F62x) gibt es keine
Fassungen, die man auf eine Brennerplatine löten
könnte. Auch ein richtiger Adapter lässt sich
nicht bauen, aber man kann den Schaltkreis direkt an ein
ICSP-Kabel löten.
All diese Chips lassen sich damit an den 5-poligen ICSP-Steckverbinder der Brenner1/2/3/5/8 anschließen, und dann brennen. Eleganter wäre es hier natürlich, den PIC in seine Schaltung einzulöten, und dort via ICSP zu brennen. Die Ausführung im nebenstehenden Foto und die einzelnen Leitungsfarben entsprechen nicht den Farben im untenstehenden Stromlaufplan. |
![]() |
Der nebenstehende
Stromlaufplan stellt die Verbindung zwischen dem 5-poligen
ICSP-Stecker und dem SO-18-Gehäuse da. Der PIC ist in
der Draufsicht dargestellt.
Beim 20-poligen SSOP-Gehäuse, muss die Beschaltung entsprechend abgeändert werden. Wichtig ist die zusätzliche Masseleitung (blau) im Flachbandkabel. Sie schirmt die CLK-Leitung gegen Einstreuungen von den anderen Leitungen (insbesondere DATA) ab. |
Korrektur:
. |
Einen separaten DIL-8-Sockel,
um die 14-Bit- PIC12F629 und
PIC12F675 im niedlichen DIL-8-Gehäuse zu
brennen hat von meinen Brennern z.Z. nur der veraltete Brenner1.
Der Brenner8 kann diese DIL8-PICs im 40-poligen Testsockel brennen. Der Brenner5 kann ab
Rev. 7 DIL-8-PICs in der 18-poligen Fassung
brennen. Ältere
Brenner5
lassen sich übrigens einfach modifizieren, um
in der 18-poligen Fassung neben 18-poligen PICs auch
8-polige PICs brennen zu können. An alle anderen Brenner (Brenner2/3/5) lassen sich diese Chips aber über einen einfachen Adapter an den 5-poligen ICSP-Steckverbinder anschließen, und dann brennen. |
![]() |
Der nebenstehende
Stromlaufplan stellt die Verbindung zwischen dem 5-poligen
Stecker und dem DIL-8-Sockel dar. Der Sockel ist in der
Draufsicht dargestellt.
Wichtig ist die zusätzliche Masseleitung (blau) im Flachbandkabel. Sie schirmt die CLK-Leitung gegen Einstreuungen von den anderen Leitungen (insbesondere DATA) ab. |
. |
Von meinen Brennern
können nur die Brenner3 , Brenner5 und Brenner8 mit
einer Fassung für die DIL-40-Gehäuse
bestückt werden um PIC16F871,
PIC16F84(A), PIC16F877(A), PIC16F74
oder PIC16F77 im DIL-40-Gehäuse zu
brennen.
Man kann die aber auch mit preiswerten DIL-28-Sockeln bestückt haben. In diesem Fall, oder wenn man einen Brenner1 oder Brenner2 benutzt, lassen sich DIL-40-PICs über einen einfachen Adapter anschließen und brennen. Das nebenstehende Foto zeigt noch eine alte Version, die nicht in allen Details mit den darunter stehendem Stromlaufplan exakt übereinstimmt. |
![]() |
Der nebenstehende
Stromlaufplan stellt die Verbindung zwischen dem 5-poligen
ICSP-Stecker und dem DIL-40-Sockel dar. Der Sockel ist in
der Draufsicht dargestellt.
Wichtig ist die zusätzliche Masseleitung (blau) im Flachbandkabel. Sie schirmt die CLK-Leitung gegen Einstreuungen von den anderen Leitungen (insbesondere DATA) ab. Bei billigen DIL-Fassungen lassen sich die einzelnen Pin-Kontakte oft mit einer Zange herausziehen. Man sollte alle nicht benötigten Kontakte aus der Fassung entfernen, um die Klemmkraft der Fassung klein zu halten. Dann lässt sich der PIC nach dem Brennen wieder leicht aus der Fassung herausziehen. Microchip empfiehlt generell alle Vss-Pins und alle Vdd-Pins anzuschließen. Bei mir geht es auch mit nur je einem Pin, wer aber einen Adapter neu baut, kann es ja gleich richtig machen, und der Microchip-Empfehlung folgen. |
ICSP-Adapter
für dsPICs im DIL-40-Gehäuse
![]() |
Der nebenstehende
Stromlaufplan stellt die Verbindung zwischen dem
5-poligen ICSP-Stecker und dem DIL-40-Sockel für
eine dsPIC30F
dar. Der Sockel ist in der Draufsicht dargestellt.
Wichtig ist die zusätzliche Masseleitung (blau) im Flachbandkabel. Sie schirmt die CLK-Leitung gegen Einstreuungen von den anderen Leitungen (insbesondere DATA) ab. Bei billigen DIL-Fassungen lassen sich die einzelnen Pin-Kontakte oft mit einer Zange herausziehen. Man sollte alle nicht benötigten Kontakte aus der Fassung entfernen, um die Klemmkraft der Fassung klein zu halten. Dann lässt sich der PIC nach dem Brennen wieder leicht aus der Fassung herausziehen. Microchip empfiehlt generell alle Vss-Pins und alle Vdd-Pins anzuschließen. Deshalb habe ich hier auch die Pins 31, 32, 39 und 40 angeschlossen. Mir wurde berichtet, das sich ein PIC nicht brennen ließ, solange Analog-Beriebsspannungs-Pins (39&40) nicht angeschlossen wurden. Leider gibt es zwei unterschiedliche Pinbelegungen für den ICSP-Anschluss an 40-Pin-dsPICs Dieser erste Adapter eignet sich für folgende (General Purpose and Sensor Family) Typen:
|