Arduino Nano Every vor unbefugtem Lesen schützen

Ich verwende ein Arduino Nano Every Bord für ein Projekt und möchte mein Programm vor unbefugtem Lesen schützen. Ich habe im Internet recherchiert, dass dies mit Lock Bits und Fuses möglich ist.
Allerdings habe ich nur Beispiele gefunden, wo ich ein SPI Programmierer benötige.
Gibt es auch eine Möglichkeit die Lock Bits oder Fuses in der Arduino IDE Software zu programmieren?

Vielen Dank im Voraus.

Allerdings habe ich nur Beispiele gefunden, wo ich ein SPI Programmierer benötige.

Das glaube ich nicht.

Die Fuses des Arduino Nano Every (ATMega4809) werden über UPDI geschrieben.
Und der "Programmer" ist schon mit auf dem Board.

Gibt es auch eine Möglichkeit die Lock Bits oder Fuses in der Arduino IDE Software zu programmieren?

Beim "Bootloader brennen" wird genau das getan.
Den Vorgang könntest du verändern oder abkupfern.

Danke für die schnelle Antwort.
Da habe ich mich mit der SPI Programmierer wohl falsch informiert.

Wie kann ich den Bootloader brennen?

Wie kann ich diesen Vorgang verändern, dass ich das Auslesen des Programmes verhindern kann?
Oder ist das Auslesen des Programmes schon verhindert, wenn ich den Bootloder brenne?

Wie kann ich den Bootloader brennen?

In dem du im Menue "Bootloader brennen" suchst und da dann auch drauf klickst.

Wie kann ich diesen Vorgang verändern, dass ich das Auslesen des Programmes verhindern kann?

Du könntest dir diesen Thread durchlesen und den dortigen Links folgen.
Da sollte sich Anregung finden lassen.

Oder ist das Auslesen des Programmes schon verhindert, wenn ich den Bootloder brenne?

Ich denke schon.
Wird ja schließlich der ganze Chip gelöscht dabei.
Und wo nix mehr ist, kann man auch nix mehr klauen.

Danke für den Link. Ich werde mir diesen genauer anschauen.

Wenn ich auf „Bootloader brennen“ gehe, bekomme ich die Fehlermeldung
„Bitte wählen Sie einen Programmer aus dem Menü Werkzeuge->Programmer aus“
Welchen muss ich da aussuchen oder kann ich dies überhaupt mit der USB Schnittstelle durchführen?

bei mir erscheint da nur einer "onBoard Atmel mEDBG(.....)"

bei mir erscheinen da mehrere. Habe es mit dem versucht und es ist folgende Fehlermeldung gekommen.

Habe auch alle anderen versucht aber auch ohne erfolg.

Haben sie eine Idee woran das liegen kann?

avrdude: Version 6.3-20190619
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch

System wide configuration file is "C:\Users\tobias.tombrink\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf"

Using Port : usb
Using Programmer : xplainedmini_updi
avrdude: usbhid_open(): No device found
avrdude: jtag3_open_common(): Did not find any device matching VID 0x03eb and PID list: 0x2145

avrdude done. Thank you.

Fehler beim Brennen des Bootloaders.

Tja...
Dann kann ich dir leider nicht weiter behilflich sein, denn ein solches Board befindet sich nicht in meiner Reichweite.

Meines Wissens hat ( und braucht ) der Nano Every keinen Bootloader. Da der ja schon einen Programmer mit drauf hat, wird auch das Programm über diesen Programmer per UPDI auf den ATMega geschrieben. Wozu soll da ein Bootloader gut sein?

Und wovor hast Du Angst? Dass einer den Binärcode aus dem Prozessor ausliest, und reverse Engeneering betreibt?

Edit: Wenn es dir nur darum geht, das Programm zu löschen, kannst Du ja auch einfach den 'Minimalsketch' ( der bei 'Neu' angezeigt wird ) draufspielen.

Wozu soll da ein Bootloader gut sein?

Der Vorgang setzt die Fuses.
Auch die Lock Fuses.

Und das will er ja schließlich.
Fuses setzen.

Also kann man sich beim "Bootloader brennen" was abschauen.

Beim Nano Every werden die Fuses bei jedem Hochladen geschrieben ( sieht man bei den 'ausführlichen Ausgaben beim Hochladen' ). Da müsste man dann das entsprechende avrdude-Skript suchen und anpassen.

Ja genau das möchte ich verhinder, dass jemand reverse Engeneering betreiben kann. Deswegen bin ich auf die Fuses und die Lock Bits gekommen.

@ MicroBahner: Was meinst mit Minimalsketch bei dem Neu angezeigt wird? Kann ich damit das auslesen des Binärcode verhindern? Wie kann ich so ein Minimalsketch Programmiern? Kannst du mir da einen anstoß geben?

tobias94:
Ja genau das möchte ich verhinder, dass jemand reverse Engeneering betreiben kann. Deswegen bin ich auf die Fuses und die Lock Bits gekommen.

Wow, dass muss dann aber schon eine ganz besondere Anwendung sein, dass jemand so einen Aufwand betreiben würde. Sowas ist ja aufwändiger, als einen Sketch entsprechend der Funktionalität komplett neu zu schreiben. Ok, das reine Kopieren auf einen anderen Chip kannst Du damit natürlich auch verhindern.

tobias94:
Was meinst mit Minimalsketch bei dem Neu angezeigt wird? Kann ich damit das auslesen des Binärcode verhindern?

Nein, es war eine Reaktion auf die Idee mit dem Bootloader schreiben. Damit kannst Du ja auch nicht das Auslesen verhindern, sondern Du löscht nur deinen Sketch auf dem Every, so dass ihn dann natürlich auch keiner mehr auslesen kann. Und dieses Löschen kannst Du eben auch mit dem Laden des Minimalsketches erreichen.

Wenn Du das Auslesen verhindern willst, ohne dass dein Sketch gelöscht wird, sondern weiterhin lauffähig sein soll, wirst Du die Fuses selbst setzen müssen. Das Arduino-System hilft dir dabei nicht - das ist auf 'Open Source' ausgelegt, und nicht auf 'Closed Source'.

Hast du Erfahrung, wie ich die Fuses selbstständig setzen kann.

Im Atmel Studio habe ich gesehen, dass man die Fuses setzen kann. Nur hier ist mir nicht klar mit welchem Programmer ich dis durchführen kann.

Mit dem 4809 habe ich da keine Erfahrung. Es sieht aber so aus, dass das bei dem nur über das UPDI Interface geht, und da kommst Du nicht direkt dran, da es intern direkt mit mit ATSAMD verbunden ist, der auf dem Board als Programmer und USB-Seriell Wandler dient. AVR Studio erkennt ihn aber nicht - zumindest nicht automatisch - als Programmer.
Du müsstest also rausbekommen wie man den avrdude dazu bringt die Fuses zu setzen - denn der macht es beim Brennen eines Programms, kann das also grundsätzlich.

Hallo,

ich verstehe aktuell auch nicht warum die IDE das kann aber man selbst in der Konsole mit avrdude nicht.
Mit UPDI direkt ist das alles kein Problem. Nur die IDE machst auch mit nur mittels avrdude ... grübel ....

Reicht die IDE nicht einfach die in der Boards.txt festgelegten Fuses an den avrdude durch?

Hallo,

genau das macht sie. Die Frage lautet wie macht sie das. :slight_smile:

Das gibt die ausführliche Meldung aus beim Sketch flashen.
C:\Users\Doc\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/bin/avrdude -CC:\Users\Worker\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf -v -patmega4809 -cjtag2updi -PCOM5 -b115200 -e -D -Uflash:w:C:\Users\Worker\AppData\Local\Temp\arduino_build_998436/sketch_oct01b.ino.hex:i -Ufuse2:w:0x01:m -Ufuse5:w:0xC9:m -Ufuse8:w:0x00:m {upload.extra_files}

Ich habs jetzt mit Treiberumstellung mittels zadig probiert und entsprechend -P Option geändert. Egal ob mit Com Port oder usb ob mit Baudratenangabe oder ohne, ich bekomme keinen Connect zu Stande, wenn normal über USB angesteckt. Ich weiß nicht wie das die IDE macht.
Bsp. einfacher Test: > avrdude -c jtag2updi -P com5 -p m4809 -v -b 115200
Nicht anders als was die IDE laut Ausgabe macht.
Irgendwas muss die IDE anders machen als das was sie in der ausführlichen Meldung ausschreibt.
Eine Option -p atmega4809 gibts sowieso nicht, dass muss m4809 lauten.

Und wenn ich ihm das Arduino avrdude.conf mitgebe, dann meckert er rum das er den Programmer jtagice3_updi nicht findet, was auch völliger Quatsch ist. Weil er soll jtag2updi verwenden wofür es auch einen Eintrag gibt. Ich bin aktuell ratlos. Ich komme nicht mehr mit.

Falls niemand den Trick kennt, kann man "nur" mittels python, einem Widerstand bzw. einer Diode und paar Drähte mit avrdude direkt rangehen. Einen Usb-Serial Wandler benötigt man in jedem Fall. Folgende Links kann ich zum Thema anbieten.

http://download.savannah.gnu.org/releases/avrdude/
https://www.mikrocontroller.net/topic/477806

TriB:
Reicht die IDE nicht einfach die in der Boards.txt festgelegten Fuses an den avrdude durch?

Sind da die lock-Fuses mit dabei? Dann bräuchte man das ja nur in der boards.txt ändern.

Und irgendwie muss der ATSAMD ja auch von USB<->Seriell Modus in den Programmermodus wechseln. Der Micro startet den Bootloader z.B. daduch, das die Baudrate auf 1200 Baud gesetzt wird. Vielleicht macht der ATSAMD sowas ähnliches?

Stimmt, man kann die Fuses zwar alle in die Boards.txt eintragen, das Lock-Bit wird aber schlicht von der IDE nicht gesetzt/an avrdude übergeben.

Hatte ich mal probiert über den Weg zu machen, hat aber nicht geklappt.
War sogar so k.l.u.k. und habe das so in meiner Boards kommentiert :grinning:

Also bleibt nur der Weg das über eine Kommandozeile per avrdude direkt zu erledigen. Weshalb das aber nun nicht will, kann ich nicht sagen. Habe keinen Every :sweat_smile: