Ich weiß nicht, ob die Frage hier richtig ist, aber ich habe ein Gerät
mit einem alten Mikrocontroller, MAF 8031AH-2 12P. Das teil steuert ein
weiteres Gerät mit dem selben µC.
Die Befehle, die gesendet werden, sind ja am Ende mit einer Prüfziffer
versehen. Ich weiß nicht, ob die Controller das automatisch machen oder
per Software so reinprogrammiert ist. Ich denke, da kennen sich hier
genug aus.
Hier ein paar Beispiele von Datensendungen:
74 00 49 45 5A 49 4C 4F 50 20 20 50 4F 54 53 20 0D = Prüfziffer: 72
74 01 49 45 5A 49 4C 4F 50 20 20 50 4F 54 53 20 0D = Prüfziffer: 73
74 01 20 4E 45 47 4C 4F 46 20 45 54 54 49 42 20 0D = Prüfziffer: 60
74 11 20 20 20 20 20 20 20 20 4C 4C 41 46 4E 55 0D = Prüfziffer: 0B
74 01 20 20 20 20 20 20 20 3E 3D 3D 3D 3D 3D 3D 0D = Prüfziffer: 19
Ich müsste wissen, wie das berechnet wird. Wenn es ein Standard ist,
sollte es doch recht einfach sein. Folgendes konnte ich schon
herausfinden:
1 mehr an der 2. Position erhöht die Prüfzahl um 1, an der 3. und 4.
Position erniedrigt sich die Prüfzahl.
Bevor ich dort weiter kompliziert herumforsche, wollte ich hier mal die
Experten fragen. Danke!
Der 8031 ist ein 8051 mit externem ROM. Neben der CPU muß also ein
Programmspeicher sein. Den mal auslesen und disassemblieren könnte Dich
der Lösung des Problems näher bringen.
Mit einem Disassembler, der den MCS-51-Befehlssatz versteht. Den
verwendet der 8031 nämlich.
> Die Befehle, die gesendet werden, sind ja am Ende mit> einer Prüfziffer versehen.> Ich weiß nicht, ob die Controller das automatisch machen
tun sie nicht
> oder per Software so reinprogrammiert ist.
So wird es sein. Den Algorithmus hast Du nicht anhand der von Dir
geposteten Beispiele herausfinden können?
Wenn nein, dann wirst Du wohl die Software analysieren müssen, was aber
mehr als nur einen Disassembler erfordert, nämlich Deinerseits
Verständnis dessen, was die verwendeten Maschinenbefehle bedeuten und
bewirken.
Hmmmmm ... so ein Mist ;-)
Leider kenne ich mich damit nicht sonderlich aus, habs schon probiert,
aber das ist wie wenn jemand ein Haus bauen soll und nicht weiß, das es
Steine zum Mauern gibt.
Könnte ne CRC sein, schau mal auf die Maxim seite, die haben da einige
beschrieben für den 1-Wire Bus.
Falls ne CRC nicht gleich paßt, die kann auch invertiert, gespiegelt,
mit 0x00(00) oder 0xFF(FF) startend sein.
Peter
Leute,
ich habe eine Antwort vom Entwickler des Gerätes erhalten und hatte
vorab angefragt, wie die Prüfziffer berechnet wird. Folgende Antwort:
Sofern ich mich richtig erinnere sind die Inhalte der Einzelbytes über
EXOR verknüpft worden. Im Anschluss wurde geprüft ob EVEN oder ODD
Parity vorlag. Bei ODD Parity wurde das Byte invertiert und auf EVEN
Parity ergänzt.
Hilft uns das schon weiter?
Mir sagt das ganze relativ wenig, aber es hört sich simpel an. Bitte um
Hilfe.
Hi,
die oberen Beispiele geben immer das korekte Ergebniss wenn alle Bytes
XOR verknüpft werden und mit 7F gestartet wird.
In Purebasic sieht das so aus:
Danke soweit,
haben Sie das ganze mal so getestet, ob mit diesem Code die richtige
Prüfziffer herauskommt?
Ich würde eine Prozedur für Visual Basic 6 benötigen. Aber ggf. berede
ich das im entsprechenden Forum.
Habs grad selbst getestet unter PureBasic (Testversion schnell
runtergeladen) und es funktioniert ja tatsächlich. Ich bedanke mich
herzlich, aber einen Code für VB6.0 hast du nicht zufällig?