Forum: Mikrocontroller und Digitale Elektronik security bits im PIC nicht zurücksetzbar


von Daniel R. (danielr)


Lesenswert?

Hallo,

kennt jemand folgendes Problem?

Gestern habe ich die "Disable Code Protection" Sequenz (gemäss der 
Application Note "PIC16FF62X Eeprom Memory Programming Specification") 
mal mit knapp unter 12V ausgeführt und seitdem lassen sich im 
Configuration Word die Security Bits nicht mehr zurücksetzen - sprich 
Programmieren geht nimmer mehr.

Auch mit Vpp 13V an MCLR bleiben die Bits im Configuration Word auf 
0x02B9 stehen.

Ich bin ratlos - hat jemand eine Ahnung?

Gruß,

Daniel

von Daniel R. (danielr)


Lesenswert?

Nachtrag:
Dass das Configuration Word 0x02B9 ist lag an einem Bug im 
Brennerprogramm, der statt 0x3Fxx eine 0x0 ins Configuration Word 
geflasht hat.

Hat jemand schon mal Probleme beim Zurücksetzen der Security Bits auf 1 
gehabt?

von Michael L. (michaelx)


Lesenswert?

Die Schritte unter "3.3 Disabling Code Protection" führst du doch nicht 
selbst aus, dass muss die Brenn-SW machen. - Oder schreibst du die grad 
selbst? Wenn nicht:
Es wäre ja möglich, dass deine Brenn-SW diese Sequenz überhaupt nicht 
beherrscht, sonder immer nur ein einfaches Bulk Erase durchführt. 
Probiere doch mal ein anderes Programm.

von Daniel R. (danielr)


Lesenswert?

Die Brennsoftware habe ich selbst geschrieben und führt die in der 
Spezifikation beschriebene Sequenz aus.

Was ich auch bemerkt habe:
Die Sequenz setzt das Configuration Word auf 0x0200 zurück.
Wenn man die Sequenz aber so abändert, dass das erste 
LoadConfigurationCommand statt 0x0 z.B. 0x3FB9 lädt, so ergibt ein 
Auslesen des Configuration Words nach der Sequenz 0x02B9 (d.h. alle Bits 
ausser die Codeprotection Bits werden gesetzt).
Weiterhin:
Die Bits in den ID Locations lassen sich von 1 auf 0 setzen (beim 
Versuch das Configuration Memory zu programmieren gemäss Figure 3-4 in 
der Spezifikation), aber ein Zurücksetzen der ID Locations auf 0x3FFF 
ist nicht mehr möglich mit der "Disable Code Protection" Sequenz.

So ganz verstehe ich das nicht, funktioniert hat das ganze ja schon 
vorher - bis zu dem Punkt wo das Configuration Word versehentlich auf 0 
programmiert wurde.
Das Zurücksetzen der Protection Bits auf 1 macht mir Probleme...

Viele Grüße,

Daniel

von Michael L. (michaelx)


Lesenswert?

Hast du es mit einer anderen Brenner-SW probiert?

Ich verwende die hier, zusammen mit einem Eigenbau-Programmer.
http://people.freenet.de/dl4yhf/winpicpr.html
Sie ist per Config-File für beliebige Brenner (LPT und COM) anpassbar.

Und dann habe ich noch einen ICD2-Clone ähnlich dem hier:
http://stolz.de.be/

von Daniel R. (danielr)


Lesenswert?

Das wird mit meinem Brenner leider nicht gehen, den habe ich auch selbst 
gebaut (serielle Schnittstelle -> MAX232 -> PIC16F628 -> TargetPic (hier 
auch PIC16F628).
Ich werde mir aber mal den Code von anderen DIY-Brennern mal anschauen, 
vielleicht gibt es ja doch einen undokumentierten Unterschied zur 
Spezifikation (den Abschnitt "Disable Code Protection" betreffend).

von Daniel R. (danielr)


Lesenswert?

Könnte mir ggf. jemand mit seinem Brenner bei meinem PIC16F628 die 
Security Bits zurücksetzen?
Damit könnte ich feststellen, ob's am PIC liegt (wenn's dann auch nicht 
funktioniert) oder mit meinem Brenner was nicht stimmt.
(Vorzugsweise im Raum München)

Viele Grüße,

Daniel

von Daniel R. (danielr)


Lesenswert?

Beim Vergleich mit den Sourcen der anderen Brenner ist mir aufgefallen, 
dass die Sequenz für "Disable Code Protection" oftmals voneinander 
abweicht.
Wie hat denn die richtige Sequenz für den PIC16F628 auszusehen?

Wenn man sich den DATA-pin anschaut müsste man ja laut Spezifikation 
folgendes sehen (abgesehen vom timing):

- 000000 (6 Bits für load configuration command)
- 0000000000000000 (16 Bits data für das load configuration command)
- 011000 ( 6 Bits für increment command)
- 011000 "
- 011000 "
- 011000 "
- 011000 "
- 011000 "
- 011000 "
- 100000 ( 6 Bits für bulk erase setup 1 command)
- 0111111111111110 (16 bits dummy data für bulk erase setup 1 command)
- 111000 ( 6 Bits für bulk erase setup 2 command)
- 0111111111111110 (16 bits dummy data für bulk erase setup 2 command)
- 000100 ( 6 Bits für begin erase/programming cycle command)
- 0111111111111110 (16 bits dummy data für begin erase/programming cycle 
command)
- 100000 ( 6 Bits für bulk erase setup 1 command)
- 0111111111111110 (16 bits dummy data für bulk erase setup 1 command)
- 111000 ( 6 Bits für bulk erase setup 2 command)
- 0111111111111110 (16 bits dummy data für bulk erase setup 2 command)

Bei so manch anderer Brennersoftware wird am Anfang statt 0x0000 eine 
0x3FFF für das load configuration command als data gesendet.
Und meist werden bei den bulk erase setup X commands die 16 bits dummy 
data auch weggelassen.

Hab auch schon diese Kombinationen leider erfolglos durchgetestet...

von Michael L. (michaelx)


Lesenswert?

Daniel Re. schrieb:
> Das wird mit meinem Brenner leider nicht gehen, den habe ich auch selbst
> gebaut (serielle Schnittstelle -> MAX232 -> PIC16F628 -> TargetPic (hier
> auch PIC16F628).

Nein, damit wird es wirklich nichts mit meinem Vorschlag.
Frage: Warum hast du dir das angetan, eigene Benner-HW und Brenn-SW 
abseits von allem, was gebräuchlich ist?

von Daniel R. (danielr)


Lesenswert?

Hi Michael,

letztenendes wegen dem Lerneffekt (Preislich macht das mittlerweile auch 
keinen Sinn mehr). Den ersten PIC (der auf dem Brenner den MAX232 mit 
dem Target-Pic verbindet) musste ich über eine Zwischenlösung brennen 
(Beitrag "PIC16F628 kaputt?").

Für den PIC16F628 funktioniert das Brennen nun, bis auf das "Disable 
Code Protection", wo ich mir noch uneins mit dem Ablauf aus der 
Spezifikation bin.

Viele Grüße,

Daniel

von Daniel R. (danielr)


Lesenswert?

Von microhip habe ich leider nur folgende Antwort erhalten:
"Unfortunatley Microchip will not be able to assist you with the 
debugging of your hardware or software issues related to ICSP.  However, 
what I can tell you is that a bulk erase is needed to reset the code 
protection bits and this must be done at a programming voltage of 4.5V 
or greater.  As a sanity check you may want to connect a programmer to 
the device and test the ability to enable and disable the code 
protection bits via ICSP."

Hat jemand bei sich Erfolg mit dem Setzen und Zurücksetzen der Security 
Bits beim PIC16F628 per Do-It-Your-Self-Brenner?
Wenn ja, welchen Brenner und welche Software verwendet Ihr?

von Michael L. (michaelx)


Lesenswert?

Hallo Daniel,

ich kann dir da nicht weiterhelfen.
Mein Tipp: Besorge/baue dir einen einfachen Programmer für COM oder LPT 
und passende SW dazu. Dann kannst du leicht nachprüfen, was deine 
Prog-SW geschrieben hat, und solche Fehler wie hier angefragt leicht 
beheben.

von Bernd W. (berndwiebus) Benutzerseite


Lesenswert?

Hallo Daniel.

>  However,
> what I can tell you is that a bulk erase is needed to reset the code
> protection bits and this must be done at a programming voltage of 4.5V
> or greater.

Das ist doch mal ne Aussage, oder? Macht ja auch einen gewissen 
Sinn.....
Wenn man nur das bit zurücksetzt, wäre der zu schützende Code ja nicht 
mehr geschützt.
Bei "bulk erase" kannst Du es wieder resetten, wobei der Code aber mit 
gelöscht wird. Somit ist er vor unbefugtem Auslesen und Kopieren 
gesichert.
Jede andere Funktionalität würde ich als Bug ansehen. ;-)

> Wenn ja, welchen Brenner und welche Software verwendet Ihr?

Ich persönlich habe das Sicherheitsbit nie verwendet.....

Mit freundlichem Gruß: Bernd Wiebus alias dl1eic

http://www.dl0dg.de

Selbsterkenntnis ist der erste Schritt zur Depression.
Jeder echte Wettbewerb ist ruinös. Darum beruht jede funktionierende
Wirtschaft auf Schiebung.

von Daniel R. (danielr)


Lesenswert?

Hallo,

vielen Dank für Eure Antworten!!

@Bernd: Ja, das war mir bekannt. Aber bei meinem Brenner haut das leider 
auch nicht hin (bzw. vielleicht ist der PIC ja kaputt).

Ggf. kann ich irgendwann mal mit einem anderen Brenner den PIC wieder 
hinbiegen und vergleichen wo die Unterschiede zu meinem Brenner liegen.
Ich würde das Thema nun erst mal auf Eis legen.

Viele Grüße,

Daniel

von Michael L. (michaelx)


Lesenswert?

Hier ist noch ein relativ einfacher Programmer für den langsam 
aussterbenden Parallelport.

http://www.rotgradpsi.de/mc/picprog/picprog.gif

Leider war die SW von Martin Claußen nur für DOS, aber ich konnte diese 
SW entsprechend konfigurieren:
http://freenet-homepage.de/dl4yhf/winpicpr.html

Wolfgang Büschner hat die INI-Datei mit in sein Archiv aufgenommen, 
einfach selbstdefiniertes Interface am LPT und dazu Clausen_PICProgOnLpt 
auswählen, dann sollte es funktionieren.

Auszuführen ist WinPIC mit:
1
runas /USER:Administrator /env WinPic.exe %1
wegen der nötigen Rechte für HW-Zugriff.

HTH

von Daniel R. (danielr)


Lesenswert?

Hallo,

mittlerweile hab ich mir den Wisp648 zusammengebaut und damit hat das 
Löschen vom PIC16F628 Config Word nun funktioniert!
Es liegt also an meinem Brenner!

Durch Codereview und Vergleich hab ich zwar keinen signifikanten 
Unterschied zwischen den beiden Brennern feststellen können, allerdings 
taktet mein Brenner den Clock-Pin vom Target langsamer als der Wisp - 
also ggf. ein Timingproblem, das ich mir per Oszi anschauen könnte, 
aber, da ich jetzt einen Wisp habe, erübrigt sich die Problemsuche 
(DIY-Brenner in die Ecke bzw. als Backup für den Wisp-PIC16F648a falls 
der mal kaputt geht).

Danke nochmals für Eure Hilfe!

Viele Grüße,

Daniel

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.