Hallo,
ich hab da ein Gerät mit nem ATmega128, bei dem eine Seriennummer ins EEProm geschrieben wird. Diese Seriennummer wird von einem PC abgefragt und wenn die Seriennummer nicht mit der in einer Lizenzdatei hinterlegten übereinstimmt, gibt es eine Fehlermeldung.
Kommunikation zwischen dem PC und dem AVR erfolgt über die serielle Schnittstelle. Auf der PC-Seite eventuell über einen USBseriell Wandler. Software ist auf der AVR-Seite GCC (Winavr) und auf der PC-Seite Delphi 7 unter Windows XP bzw. Windows 7.
Die Seriennummer kann mit Hilfe eines speziellen Kommunikationsprogramm vom PC aus gesetzt werden. Dazu wird ein Datentelegramm bestehend aus:
- Byte Startzeichen #02
- Byte Blocklänge
- Byte erstes Kommandobyte
- Byte zweites Kommandobyte
- Byte Checksumme
gesendet.
Gespeichert wird nur, wenn das 1.,3. und 4. Byte korrekt ist und wenn die Checksumme stimmt.
Das funktioniert soweit alles. Jetzt haben wir 3 Geräte ausgeliefert und bei zwei Kunden gab es Probleme, weil sich die Seriennummer geändert hatte. War kein großes Problem, die Seriennummer konnten die Kunden mit unserer Hilfe wieder einstellen. Aber das war eigentlich nicht Sinn der Sache.
Ich habe jetzt zusätzliche eine Überprüfung der Blocklänge und der Bytes
5-12 (Char 0-9) eingebaut. Außerdem habe ich eine Wartezeit von 100ms vor den eigentlichen Schreibbefehl eingebaut.Ich verstehe momentan nur nicht, wie es zu dem Problem kommen kann. Hier bei uns und bei dem 3. Kunden ist bisher nichts derartiges passiert.
Ich vermute momentan, dass vom ATmega128 durch irgendwelche Schrottsignale auf der seriellen Schnittstelle zufällig ein gültiger Schreibbefehl empfangen wird woraufhin die Seriennummer überschrieben wird. Die Fehlerwahrscheinlichkeit versuche ich jetzt wie oben beschrieben durch eine bessere Plausibilitätskontrolle zu verringern.
Oder gibt es noch andere Möglichkeiten, wie es zu einem Überschreiben des internen EEProms kommen kann?
Gruß
Stefan DF9BI