Softwaretools

Aus Hobbyelektronik.org

Warum sollte man sich mit Dingen abmühen, die der Computer viel besser kann als man selbst?

An dieser Stelle gibt es ein paar Tools, die das Leben erleichtern sollen.

Alles mehr oder weniger gut und sauber programmiert, ohne durchgehende Wartung und ausdrücklichem Verweis auf den Haftungsausschluss.

SerialPlayer

Um Pirozeda vernünftig zu entwickeln und zu debuggen, muss die Software mit Daten stimuliert werden.

Lange habe ich hierfür einen Logic8-Nachbau im Rückwärtsbetrieb (der dafür verwendeten Player muss noch verbessert und veröffentlicht werden) und echte Pirozeda-Hardware (HiL, Hardware in the Loop) verwendet, da diese hierbei gleichzeitig mitgetestet werden konnte. Nachdem sie mittlerweile jedoch stabil zu sein scheint und eher die Backend-Software Ärger macht, musste etwas her, um das Backend mit Daten zu füttern.

Da ich nichts fertiges gefunden habe das meine Bedürfnisse erfüllt, habe ich es selbst geschrieben.

Das Programm liest die angegebene Tab-getrennte Datei ein, die z. B. folgendem Schema entspricht:

#OPT 9600 7O2
0.0	Das
0.1	ist
0.3	ein\tkleiner
1.0	Test\0
1.5	für
2.0	den
2.5	Serial
2.501	Player

und gibt sie mit den entsprechenden Zeitstempeln und Parametern am ausgewähten seriellem Port aus. Eine Ausgabe der Rückgabe findet aktuell nicht statt - alle empfangenen Daten werden verworfen.

Neben der Ausgabe von ASCII-Daten kann das Programm auch Hexadezimal codierte Zeichenfolgen ausgeben und auch die Ausgabe wiederholen (praktisch, wenn man länger testen will oder muss).

Funktionen

Der komplette Funktionsumfang kann in der eingebauten Hilfefunktion eingesehen werden:

>SerialPlayer.exe -h
Replays recorded files to a Serial port

SerialPlayer.exe -fn filename [-ff tsv-asc|tsv-hex] [-p port] [-b baudrate] [-c config] [--rc repetitions] [--rp pause]
  -h, --help                 Show this help and exit
  -l, --list                 List available COM-ports
  -p, --port=VALUE           The serial port you want the data to output
                               (COMx)
  -b, --baudrate=VALUE       Baudrate to be used for communication
  -c, --config=VALUE         Configuration for the communication
      --fn, --file=VALUE     File used for transmission
      --ff, --fileformat=VALUE
                             The file's format: tsv-asc, tsv-hex (default:
                               tsv-asc)
      --rc, --repeat-count=VALUE
                             Repetition count of output
      --rp, --repeat-pause=VALUE
                             Pause between repetitions in ms

Änderungen

2019-12-16 Version 0.1

  • Erster Release

Download

Datei:SerialPlayer.zip Version 0.1, Source, Binaries, Beispieldaten

SaleaeTools

Wer die Logic Analyzer von Saleae kennt, wird sie vermutlich sehr zu schätzen wissen.

Neben dem Anstarren von High- und Lowpegeln kann man auch Analyzer verwenden, um die Kommunikation mittels einiger Protokolle auseinanderzunehmen.

Das kann bei längeren Traces in der Software etwas mühselig sein. Aber keine Sorge, sie lassen sich für die Analyse z. B. mit dem hochwissenschaftlichen Werkzeug Excel exportieren.

Export

Um sich einiges an Herumgeklicke zu ersparen, lassen sich mit dem Tool ausgewählte oder alle Analyzer exportieren:

SaleaeTools.exe -e *

Kompression

Leider gibt es bei den exportierten Dateien ein paar Fallstricke - für User mit u. a. deutscher Landeskonfiguration werden in manchen Tools die Kommata der Timestamps nicht richtig interpretiert und jede Zeile entsprechen einem Byte. Das macht die Sache etwas unhandlich:

Time [s],Packet ID,Address,Data,Read/Write,ACK/NAK
0.000685220000000,0,0x20,0x0C,Write,ACK
0.000740220000000,0,0x20,0x0C,Write,NAK
0.001070220000000,1,0x20,0x19,Read,ACK
0.001125220000000,1,0x20,0x19,Read,NAK
0.001380220000000,2,0x24,0x24,Read,ACK
0.001435220000000,2,0x24,0x24,Read,NAK
0.006565220000000,3,0x24,0x13,Read,ACK
0.006620220000000,3,0x24,0x13,Read,NAK
0.008250220000000,4,0x20,0x10,Write,ACK
0.008305220000000,4,0x20,0x10,Write,NAK

Besser wäre es hier doch, alle Bytes aus einer Übertragung in einer Zeile zu haben:

Start time [s];End time [s];Address;Read/Write;Data;ACK/NAK
0,0006852200000;0,0007402200000;20;Write;0C 0C;AN
0,0010702200000;0,0011252200000;20;Read;19 19;AN
0,0013802200000;0,0014352200000;24;Read;24 24;AN
0,0065652200000;0,0066202200000;24;Read;13 13;AN
0,0082502200000;0,0083052200000;20;Write;10 10;AN

Hier merkt man den Unterschied noch nicht so gravierend, aber wie wäre es mit einem realen Beispiel mit UART:

Time [s],Value,Parity Error,Framing Error
0.560297280000000,0xFF,Error,
0.560387280000000,0xAA,,Error
0.560477280000000,0x05,Error,Error
0.560567280000000,0x21,,
0.560657280000000,0x00,,
0.560747280000000,0x06,,
0.560837280000000,0x11,,
0.560927280000000,0x3E,,
1.560343600000000,0xFF,,
1.560433600000000,0xAA,,
1.560523600000000,0x05,,
1.560613600000000,0x21,,
1.560703600000000,0x00,,
1.560793600000000,0x06,,
1.560883600000000,0x12,,
1.560973600000000,0x3F,,
1.759612240000000,0xFF,,
1.759702240000000,0xAA,,
1.759792240000000,0x06,,
1.759882240000000,0x20,,
1.759972240000000,0x01,,
1.760062240000000,0x00,,
1.760152240000000,0x00,,
1.760242240000000,0x01,,
1.760332240000000,0x29,,
1.870662720000000,0xFF,,
1.870752720000000,0xAA,,
1.870842720000000,0x05,,
1.870932720000000,0x10,,
1.871022720000000,0x00,,
1.871112720000000,0x00,,
1.871202720000000,0x04,,
1.871292720000000,0x1A,,

Mit den Parametern SaleaeTools.exe -p ser -if uart.txt -of uart_c1.txt -ld -sh -st 0.1 -ds " " -csh lässt sich Folgendes zaubern:

sep=;
Start time [s];End time [s];Values;Errors
0,5602972800000;0,5609272800000;FF AA 05 21 00 06 11 3E;PFB-----
1,5603436000000;1,5609736000000;FF AA 05 21 00 06 12 3F;--------
1,7596122400000;1,7603322400000;FF AA 06 20 01 00 00 01 29;---------
1,8706627200000;1,8712927200000;FF AA 05 10 00 00 04 1A;--------

Damit lassen z. B. auch Datenstrukturen von higher-level-Protokollen einfacher verfolgen. Neben dem Zusammenfassen der Daten wurde hier noch etwas mehr getan:

  • Aus dem "echten CSV" wurde eines mit Semikolon gemacht, dadurch können...
  • ...Dezimalstellen mit Komma dargestellt werden (-ld), was ein hiesiges Excel lieber mag
  • Damit die Tabellenkalkulation die Trennung sofort richtig erkennt, kann der Header sep= (mit -csh) hinzugefügt werden
  • Ebenso wurde mit dem Parameter -sh das "0x"-Präfix für Hexadezimal-Zahlen entfernt
  • Die Daten werden mittels -ds " " durch ein Leerzeichen getrennt

Kombination

Viele Daten ergeben nur im Kontext mit anderen Sinn, deshalb lassen sie sich mit dem Programm auch kombinieren.

Zugegeben: Die Funktion ist ziemlich mit der heißen Nadel gestrickt und sollte mit etwas Vorsicht genossen werden.

Komprimiert man die exportierten Daten aus Logic mit den richtigen Parametern, lassen sich aber selbst diese kombinieren.

z. B. mit folgendem Befehl:

SaleaeTools.exe -c combined.txt single1.txt single2.txt single3.txt

Erzeugt eine eher unübersichtliche Datei - importiert man diese allerdings in eine Tabellenkalkulation, wird alles etwas übersichtlicher.

Funktionen

  -h, --help                 Show this help and exit
      --el, --exportlist     Lists the exportable analyzers
  -e, --export=VALUE         Exports selected (comma separated) or all (*)
                               analyzers from Logic. Scripting socket server
                               must be enabled.
      --ed, --exportdir      Lists the exportable analyzers
      --si, --saleaeip=VALUE IP of the logic client (default: 127.0.0.1)
      --sp, --saleaeport=VALUE
                             Port of the logic client (default: 10429)
  -c, --combine=VALUE        Combines multiple analyzer export files. Also
                               works with hex compressed files w/o local decimal
  -p, --protocol=VALUE       Protocol of the analyzer export file
                               (SERial|I2C|SPI)
      --if, --infile=VALUE   Input file
      --of, --outfile=VALUE  Output file (optional)
      --cs, --colsep=VALUE   Column separator for output file (default: ;)
      --csh, --colsephint    Hint column separator in CSV-file
      --ds, --datasep=VALUE  Data separator (default: nothing)
      --ld, --localdecimal   Use local decimal separator for timestamps
                               (default: off)
      --sh, --striphex       Strips hexadecimal prefix "0x"
      --ca, --convertascii   Convert Saleae's way of handling ASCII (control
                               characters, COMMA)
      --st, --septime=VALUE  Separation time in ms where separate packets are
                               detected (Serial only)

Änderungen

2019-12-16 Version 0.1

  • Erster Release

Download

Datei:SaleaeTools.zip Version 0.1, Source, Binaries, Beispieldaten