Lock Bits setzen funktioniert nicht Arduino ISP

Hallo Forum,

Es gibt ja die Möglichkeit, das Programm von einem Arduino Chip auszulesen, und auf einen anderen Arduino zu übertragen. Und man kann den Chip auch sperren, um das auslesen zu verhindern, zB aus Kopierschutzgründen.

Zum Lernen habe ich mir eine kleine Batchdatei geschrieben, die einen Arduino auf Tastendruck clont. Das funktioniert jetzt einwandfrei.

Dann habe ich versucht, eine Batch zu schreiben, die den Chip sperrt, doch leider vergeblich. Die Lockbits werden falsch gelesen, und scheinbar auch falsch oder nicht geschrieben, der Chip lässt sich danach noch immer clonen. Ich habe alle möglichen Hex-Kombinationen für die Lockbits probiert!!

Ich verwenden einen Arduino Uno mit 328P Chip als ISP Programmer, und IDE 1.6.9.

Muss ich außer den Lockbits noch SPI (irgendwo bei Hfuse oder Lfuse) abschalten, oder geht dann kein angeschlossenes SPI gerät mehr?

Hier der aktuelle Batch Code:

ECHO OFF
:START
CLS
ECHO Nick's EASY CHIP LOCKER - www.roboter.hol.es
TIMEOUT /t 3 >nul

SET COMPORT=COM8
SET CHIP=ATmega328P
SET LOCKBITS=0x00

SET LOCKBITS2=0x07
SET LOCKBITS1=0x30
SET LOCKBITS3=0xFC
SET ARDUINODIRECTORY=C:\Program Files (x86)\Arduino

ECHO.
ECHO PORT = %COMPORT% 
TIMEOUT /t 1 >nul
ECHO CHIP = %CHIP% 
TIMEOUT /t 1 >nul
ECHO LOCKBITS = %LOCKBITS% 
ECHO.
TIMEOUT /t 1 >nul
ECHO ARDUINO VERZEICHNIS: %ARDUINODIRECTORY%
TIMEOUT /t 1 >nul
ECHO.
ECHO ACHTUNG, CHIP WIRD GESPERRT! ZUM FORTFAHREN TASTE DRUECKEN...
PAUSE>nul
CLS
ECHO SPERRE CHIP...
TIMEOUT /t 2 >nul
CD %ARDUINODIRECTORY%\hardware\tools\avr\bin

avrdude -C ..\etc\avrdude.conf -p atmega328P -c arduino -P %COMPORT% -U lfuse:w:0xFF:m -U hfuse:w:0xFA:m -U efuse:w:0xFD:m -Ulock:w:0x3F:m  



ECHO %CHIP% GESPERRT!
PAUSE>nul
GOTO :START

Die Com-Port Nummer und der Hex-Code "0x3F" muss evtl angepasst werden, oder gleich eine Abfrage dazuprogrammieren. Ihr müsstet dann in der Ausgabe sehen, dass die Lockbits nicht übereinstimmen.

Nach stundenlangem Googlen war ich nicht viel schlauer, nur dass es mit ArduinoISP nicht geht, und evtl ungenutzte Lockbits falsch gelesen werden?!

Lg

Hallo,

suche mal mit "arduino isp set fuses" ...

Wie geschrieben, bereits hlang gegoogelt, kein Eintrag, wo es jemand geschafft hat, einen Arduino mit ArduinoISP zu sperren.

Woran liegt das genau, weiß es jemand?

Lg!

Hallo,

ich bereue es zu tiefst, nach der letzten PM, mir überhaupt die Mühe gemacht zu haben.

Na wenn du die Leute schon über PM´s mit Verhaltensvorschriften belästigst, darfst dich nicht wundern wennst ne Abfuhr kriegst. Danach öffentlich den Beleidigten spielen machts auch nicht besser :)

Aber zurück zum Thema, hat hier im deutschen Forum überhaupt schon mal jemand probiert, einen Arduino mit ArduinoISP zu sperren?

Ist meine Vorgehensweise laut Batch soweit richtig, oder habe ich was übersehen?

Lg

Hallo,

ich hatte dich lediglich gebeten den einen letzten Satz im anderen Thread #15 zu löschen, damit du dich nicht noch mehr in die Sch... reitest. Also nur zu deinem Selbstschutz. Und gefordert hatte ich von dir rein gar nichts. Aber anscheinend liebst du angeheizte Stimmungen. Oder verstehst einen gut gemeinten Hinweis nicht. Öffentlichkeit, ich komme deinem Wunsch gern nach. Das eh nicht ernst gemeinte Smilie kannste dir auch schenken.

You have just been sent a personal message by Kolbi on Arduino Forum

IMPORTANT: Remember, this is just a notification. Please do not reply to this email.

The message they sent you was:

Schreib deine Nachricht öffentlich, bitte keine PM´s mit Verhaltensvorschlägen, deine Meinung interessiert mich nämlich überhaupt nicht, nachdem was du schreibst und von mir forderst!

Warum wundert mich das jetzt nicht? Das ist doch der Kollege vom Display mit geheimen Sketch und Spendenaufruf

Ich habe alle möglichen Hex-Kombinationen für die Lockbits probiert!!

Wirklich alle 256?

Ich weiss nicht recht, was Du genau machen willst, aber wenn Du 0x3F als lock byte überträgst, dann sind alle lock bits "unprogrammed", somit keine Sperre aktiv.

Beachte die Notiz im Datenblatt: "Program the Fuse bits and Boot Lock bits before programming the LB1 and LB2." Um sicher zu gehen würde ich das Aussperren also in einem separaten Aufruf machen.

Welchen ISP Du verwendest, spielt keine Rolle, das Protokoll ist immer das gleiche.

Übrigens von wegen Klonen: der verwendete ATmega328p hat 32kB Speicher. Einen Prozessor auszulöten und wieder einzulöten, damit man ihn auslesen kann dürfte in vielen Fällen mehr Aufwand sein, als die 32kB nochmals zu programmieren. Ich weiss nicht, welche Wahnsinns-Anwendung Du programmiert hast, aber ein solcher Schutz ist in praktisch allen Fällen den Aufwand nicht wert.

Geht vermutlich um das Thema mit dem 1-wire LCD. Unabhängig davon bin ich auch überzeugt, das Datenblatt gibt die entsprechende Auskunft. Da ich aber nix locken will les ich nicht nach.

pylon: Wirklich alle 256?

Ich weiss nicht recht, was Du genau machen willst, aber wenn Du 0x3F als lock byte überträgst, dann sind alle lock bits "unprogrammed", somit keine Sperre aktiv.

Beachte die Notiz im Datenblatt: "Program the Fuse bits and Boot Lock bits before programming the LB1 and LB2." Um sicher zu gehen würde ich das Aussperren also in einem separaten Aufruf machen.

Welchen ISP Du verwendest, spielt keine Rolle, das Protokoll ist immer das gleiche.

Übrigens von wegen Klonen: der verwendete ATmega328p hat 32kB Speicher. Einen Prozessor auszulöten und wieder einzulöten, damit man ihn auslesen kann dürfte in vielen Fällen mehr Aufwand sein, als die 32kB nochmals zu programmieren. Ich weiss nicht, welche Wahnsinns-Anwendung Du programmiert hast, aber ein solcher Schutz ist in praktisch allen Fällen den Aufwand nicht wert.

Hallo Pylon,

Es sind nur ein paar Mögliche Hex-Codes, zumindest laut http://eleccelerator.com/fusecalc/fusecalc.php?chip=atmega328p

Ich will den Chip gegen auslesen schützen!

Zum auslesen eines Programms auf dem Arduino brauche ich nur Plus, Minus, und 4 Pins mit dem ArduinoISP verbinden, danach kann ich mit meiner Batch bzw AVRdude den Flash, EEprom sowie die Fuses auslesen, als Dateien speichern, und auf beliebig viele andere Chips übertragen. Das funktioniert ganz einfach, ohne irgendwas auszulöten. Meine Clone-Batch kann ich gerne teilen wenn mir jemand weiterhilft.

Einen gelockten Chip kann man trotzdem wieder entsperren, nämlich manuell, man öffnet den Chip... das ist dann aufwändig :)

Irgendwo sah ich mal einen englischen Beitrag, wenn ich das richtig verstanden habe werden evtl ungenutzte höhere Bits im Lockbereich falsch gelesen, und/oder das ArduinoISP Programm hat einen Fehler...

Du meinst also erst die Fuses und Bootlock, dann die Lockbits?

Bootlock müsst ich nochmal genauer nachlesen, du hast nicht zufällig eine Erklärung dazu parat?

Die Fuses an sich werden ja eh beim hochladen gesetzt wenn ich das richtig gesehen habe, könnte also den lock Befehl gleich nach dem hochladen mit einbauen?!

Lg!

Meine Clone-Batch kann ich gerne teilen wenn mir jemand weiterhilft.

:blush:

Mir ist längst klar dass hier im Forum von 10 Usern nur einer etwas Sinnvolles beizutragen hat. Die meisten Newbietreads verlaufen nach kurzer Zeit im Sand, und einfache Erklärungen auf Deutsch sind Mangelware. Stört mich aber wenig, denn ich komme trotz Datenmüll trotzdem irgendwann zu Antworten.

Lg

Mein letzter Datenmüll an Deine Adresse: es geht eben nicht immer nur um Inhalt, sondern auch um den Umgang miteinander; wie im richtigen Leben. Meine Sympathiepunkte für Dich sind aufgebraucht - zumindest was den User "Kolbi" angeht.

Aber so ist das halt in User-Foren: man muss ja nicht antworten wenn man nicht möchte. Ist ja alles Freizeit.

Dir gutes Gelingen

Mir gefällt es nicht zuerst die Hilfe von anderen annehmen indem man Arduino und Bibliotheken verwendet und dann will man verhindern daß jemand anderer den Sketch verwendet. Grüße Uwe

Und nun Hilfe zum Lock bit zu erhoffen, damit der Sketch auf dem "Display" auch nicht ausgelesen werden kann, ist schon arg dreist

Sketch aufspielen und dann Pin 17, 18 und 19 wegdremeln

Scherheinz: Sketch aufspielen und dann Pin 17, 18 und 19 wegdremeln

Hallo Scherheinz,

Ich mag deine Idee, ist aber etwas aufwändig, und ich brauche die Pins. Es wäre auch kein größeres Problem mit Lötzinn die Verbindungen wiederherzustellen und den Code auszulesen.

Das Englisch bereitet mir manchmal Probleme, so kann ich nicht ganz verstehen, was es mit der SPI Schnittstelle auf sich hat. Zum Einen kann ich damit Geräte steuern, zum Anderen Codes hochladen und wieder auslesen. Muss also SPI komplett deaktiviert werden, um den Chip zu sperren, oder hat das damit nichts zu tun?

Lg!

Es sind nur ein paar Mögliche Hex-Codes, zumindest laut http://eleccelerator.com/fusecalc/fusecalc.php?chip=atmega328p

Es gibt 256 Möglichkeiten das Lock-Byte zu schreiben, die obersten beiden Bits sind nicht genutzt, weshalb die sowieso keinen Unterschied machen, trotzdem gibt es die Möglichkeit. Du hast immer noch nicht geschrieben, welche Du wirklich ausprobiert hast. Denn auch mit den beiden Bits weniger gibt es immer noch 64 mögliche Einstellungen. Ich denke, 0xFC würde genügen, Du kannst aber auch 0xC0 senden, dann ist alles unterbunden.

Zum auslesen eines Programms auf dem Arduino brauche ich nur Plus, Minus, und 4 Pins mit dem ArduinoISP verbinden, danach kann ich mit meiner Batch bzw AVRdude den Flash, EEprom sowie die Fuses auslesen, als Dateien speichern, und auf beliebig viele andere Chips übertragen. Das funktioniert ganz einfach, ohne irgendwas auszulöten. Meine Clone-Batch kann ich gerne teilen wenn mir jemand weiterhilft.

So einfach verbindet man die ohne Auslöten nicht (oder hast Du Deine Prozessoren gesockelt?). Ich weiss sehr genau, wie man die Chips ausliest und Batch-Dateien sind für mich ziemlich unnütz, ich verwende ein modernes Betriebssystem.

Einen gelockten Chip kann man trotzdem wieder entsperren, nämlich manuell, man öffnet den Chip... das ist dann aufwändig :)

Du solltest Dich besser informieren, mit High Voltage Programming kannst Du auch gelockte Chips ohne Gehäuse öffnen wieder entsperren. Wenn der Chip also mal ausgelötet ist oder sonst die Verbindung zum Chip hergestellt ist, dann ist es nur eine Frage der Ausrüstung des Entsperrwilligen.

Irgendwo sah ich mal einen englischen Beitrag, wenn ich das richtig verstanden habe werden evtl ungenutzte höhere Bits im Lockbereich falsch gelesen, und/oder das ArduinoISP Programm hat einen Fehler...

Ich habe das ArduinoISP-Programm noch nie analysiert, gehe aber davon aus, dass es einfach das Serial Programming Instruction Set umsetzt und kaum gross eine Filterung vornimmt. Ich nehme sogar an, dass der gosse Teil davon im avrdude zu finden ist und ArduinoISP nur von der seriellen Schnittstelle auf den SPI "übersetzt". Somit dürfte es wie irgendein anderes ISP-Programmierwerkzeug funktionieren.

Du meinst also erst die Fuses und Bootlock, dann die Lockbits?

Ja, denn wenn die Lockbits mal gesetzt sind, dann kann der Chip nicht mehr über diese Schnittstelle verändert werden.

Bootlock müsst ich nochmal genauer nachlesen, du hast nicht zufällig eine Erklärung dazu parat?

Dort geht's um's Schreiben, Du willst aber das Auslesen verhindern. Das geht nur, wenn Du den Speicher-Zugriff mittels Normalspannung komplett ausschaltest.

Die Fuses an sich werden ja eh beim hochladen gesetzt wenn ich das richtig gesehen habe, könnte also den lock Befehl gleich nach dem hochladen mit einbauen?!

Das hängt davon ab, wie Du den Chip programmierst und wie Dein Prozess grundsätzlich aussieht (vielleicht auch, wie viele Ausschuss-Prozessoren Du Dir leisten kannst). Aber ja, Du kannst Deine Batch-Dateien anpassen, dass jeder Prozessor gleich nach dem Upload vernietet wird.

Muss also SPI komplett deaktiviert werden, um den Chip zu sperren, oder hat das damit nichts zu tun?

Nein, das hat damit nichts zu tun. Es wird für die serielle Speicherbeschreibung einfach diese Hardware-Schnittstelle verwendet.

hi,

Du solltest Dich besser informieren, mit High Voltage Programming kannst Du auch gelockte Chips ohne Gehäuse öffnen wieder entsperren.

ich dachte, mal gelesen zu haben, daß dabei auch die programmierung gelöscht wird. also der prozessor prinzipiell wieder ausgelesen werden kann, nicht aber die vorherige programmierung.
falsch gelesen?

gruß stefan

ich dachte, mal gelesen zu haben, daß dabei auch die programmierung gelöscht wird. also der prozessor prinzipiell wieder ausgelesen werden kann, nicht aber die vorherige programmierung. falsch gelesen?

Das könnte sein. Ich musste zum Glück bis jetzt noch nie zum HVP greifen, habe somit keine Erfahrung damit.