Wie kann ich die Geschwindigkeit eines unbekannten UART herausfinden?

Ich habe also ein Stück Hardware, das ich zurückentwickle. Ich glaube, ich habe einen UART auf dem Board gefunden. Ich habe ein FPGA angeschlossen, das nur Folgendes tut:

ExtTX <= PCRX;
PCTX <= ExtRX;

Auf diese Weise kann ich also theoretisch mit jeder Geschwindigkeit umgehen, die FTDI auf meinem FPGA kann (was ziemlich schnell ist). Also habe ich den Hardware-Teil abgedeckt. Wie kann ich nun unter Linux (oder Windows) herausfinden, wie hoch die Geschwindigkeit und die Stoppbits und andere Konfigurationsoptionen der seriellen Verbindung sein sollten?

Ich vermute, Sie haben keinen Logikanalysator ...

Antworten (3)

Sie möchten die kürzeste Übergangs-Übergangszeit messen.

Dies wird Ihnen, vorausgesetzt, der Bus, den Sie betrachten, einen anständig abwechslungsreichen Inhalt hat, die Bitzeit für die serielle Schnittstelle mitteilen. Sie können dann von dieser zur Gesamtbaudrate gehen.


Wirklich, wenn Sie Reverse-Engineering oder irgendeine Art von Elektrotechnik ernsthaft betreiben möchten, benötigen Sie ein Oszilloskop (und wahrscheinlich einen Logikanalysator), also sollten Sie bald darüber nachdenken, eines zu kaufen.

Ich habe sie mir angesehen, aber Mann, sind sie teuer!
@Earlz: Sie könnten einen Logikanalysator in Ihr FPGA einbauen: sump.org/projects/analyzer - aber Sie brauchen wirklich auch einen Bereich :)
Für diese Art von Geschwindigkeit können Sie ein billiges Oszilloskop von e-bay kaufen, ich habe eines für 80 $ gekauft und es funktioniert großartig bis zu 1 MHz.
@Earlz - Teuer? Hah, ich finde, sie sind lächerlich billig geworden! Heutzutage können Sie ein überraschend leistungsfähiges Zielfernrohr für ~ 400 US-Dollar bekommen.
@MartinThompson, das habe ich letztendlich getan, aber jetzt bin ich auf einer Tangente, weil ich ihren Java-Client nach 3 Stunden Basteln nicht zum Laufen bringen konnte. Anscheinend unterstützt eine seiner Abhängigkeiten weder 64-Bit-Maschinen noch irgendetwas Neueres als den Linux-Kernel 2.6. Also mache ich meinen eigenen minimalistischen Client

Mit etwas Glück kann Brute-Forcing manchmal schneller sein als das Herausziehen Ihres Oszilloskops oder Logikanalysators (oder Ihre einzige Option, wenn Sie nicht über diese Art von Ausrüstung verfügen).

Ich habe ein USB <=> Serial-Kabel herumliegen, das ich für diese Herausforderungen verwende. Ich verbinde einfach GND- und RxD-Drähte von dort mit der Schaltung und versuche einfach, Daten zu erfassen. Ich beginne normalerweise bei 9600 8N1 (was ziemlich üblich ist), wobei 9600 die Baudrate, 8 die Anzahl der Datenbits, N die Abkürzung für No-Parity und 1 die Anzahl der Stoppbits ist.

Die langsame Methode verwendet ein Programm wie PuTTY und konfiguriert es für jede Baudrate, die Sie ausprobieren möchten. Meine schnelle Methode ist ein Perl-Skript , auf das ich über die Befehlszeile zugreifen kann und das die Baudrate als Option akzeptiert, gefolgt von einem Tool, das die Daten hexdumpt erhalten. Hier ist ein Beispiel (Linux):

cat_usbCable --baudrate=2400 | hexdump -C
00000000  7f 45 4c 46 02 01 01 00  00 00 00 00 00 00 00 00  |.ELF............|
00000010  02 00 3e 00 01 00 00 00  40 13 40 00 00 00 00 00  |..>.....@.@.....|
00000020  40 00 00 00 00 00 00 00  c8 62 00 00 00 00 00 00  |@........b......|
00000030  00 00 00 00 40 00 38 00  09 00 40 00 1c 00 1b 00  |....@.8...@.....|

Gängige Baudraten sind: 300, 600, 1200 , 2400, 4800, 9600 , 14400, 19200, 38400, 57600 , 115200 .

Die Scope-Option funktioniert, wenn Sie es mit nicht standardmäßigen Raten wie 125000 zu tun haben. Das ist nur einmal passiert ...

Am einfachsten wäre es, einen Logikanalysator mit eingebautem RS232-Decoder oder ein Oszilloskop zu verwenden, um die Signale zu prüfen.

Wenn Sie diese Tools nicht zur Verfügung haben, müssen Sie wahrscheinlich einen Decoder für Ihr FPGA schreiben, um die Bit- und Wort-Timings mit einem Referenztakt zu berechnen.