Serielles Plug-and-Play

Reichlich unterdokumentiert ist die Möglichkeit, dass sich serielle Geräte per Plug-and-Play melden können. Wer ein externes Modem benutzt(e), wird sicherlich festgestellt haben, dass Windows „auf magische Weise“ das angeschlossene Kistchen richtig erkennt und einrichtet.

Hier ist Serielles Plug-and-Play im Spiel.

Auch die parallele Schnittstelle kennt Plug-and-Play (womit Windows Parallelport-Drucker erkennt), aber dies ist für den Mikrocontroller-Einsatz weniger interessant.

Funktionsprinzip

Das Serielle Plug-and-Play funktioniert nicht wie bei USB beim Anstecken!!

Sondern:

  1. beim Start von Windows (bzw. Linux)
  2. bei explizit angewiesener Neue-Hardware-Suche (bspw. im Geräte-Manager)

Voraussetzungen, mikrocontroller-seitig

Es wird benötigt:

Während man RTS und CTS zweckmäßigerweise über die beiden „noch freien“ Pegelumsetzer eines MAX232 schickt, behilft man sich für DTR mit einem Vorwiderstand und einer Z-Diode. Unter Umständen verbindet man DTR mit RESET über eine Koppelkapazität. Beim MSP430 ist das sogar zweckmäßig, für den Bootloader.

Der Bereitschaftsmodus für das Senden der PnP-ID beginnt mit der L-H-Flanke von DTR. Nach 200 ms müsste RTS aktiv werden. Dann muss sofort die PnP-ID gesendet werden:

Beispielhafte Meldungs-Bytes
PnP-Start28"("
PnP-Revision01,24PnP-Version 1.0 (??)
EISA-ID4D,44,43"MDC", 3-stellig, müsste beantragt werden! Kostet (in den USA) nichts.
Produkt-ID30,32,38,38"0288", beliebig, 4-stellig, hexadezimal (Großbuchstaben) erlaubt
Seriennummer5C,30,30,33,31,34,31,35,39"\\00314159" (beliebig, nur der Backslash muss am Anfang stehen)
Geräteklasse5C,4D,4F,44,45,4D"\\MODEM" (sollte, muss aber nicht zum class-Eintrag der INF-Datei passen)
Geräte-ID5C,4D,44,43,30,31,34,34,2C,41,54,4D,30,30,39,36"\\MDC0144,ATM0096" (irgendetwas, unter Windows irrelevant)
Anzeigetext5C,5A,49,50,20,32,38,38"\\ZIP 288" – Dies wird unter Windows angezeigt, bis die INF-Datei (s.u.) den String liefert
Prüfsumme43,34"C4" Prüfsumme (modulo 256), alles inklusive PnP-Start und PnP-Ende, exklusive Prüfsumme selbst
PnP-Ende29")"

Mit 1200 Baud, 7 Datenbits, keine Parität, 1 Stoppbit. Wenn man mit 2 Stoppbit sendet, ist man auf der sicheren Seite.

Danach kann der Mikrocontroller eine andere Baudrate benutzen.

Voraussetzungen, PC-seitig

Damit nicht ein hässliches Fragezeichen im Geräte-Manager stehen bleibt, benötigt man eine passende INF-Datei. Die Matching-ID zum o.g. Beispiel wäre SERENUM\MDC0288.

Eine passende minimalistische INF-Datei sieht so aus:

[Version]
Signature="$Chicago$"
Class=TMC
ClassGuid={A9FDBB24-128A-11d5-9961-00108335E361}
Provider=%hs%

[ClassInstall32]
AddReg=ClassAddReg

[ClassAddReg]
HKR,,,,%DevClassName%
HKR,,Icon,,-5

[Manufacturer]
%hs%=TMC,NTamd64

[TMC]
%DESC%=Install,SERENUM\MDC0288

[ControlFlags]
ExcludeFromSelect=*

[Install.Services]
AddService=,2

[Strings]
DevClassName="Test and Measurement Devices"
DESC="Simple Network Analyzer (AD9834 + AD8302, for Piezo measurement, PT-PIESA, TU Chemnitz)"
hs="haftmann#software"

[Strings.0407]
DevClassName="Messgeräte"
DESC="Einfacher Netzwerkanalysator (AD9834 + AD8302, Piezo-Messung, PT-PIESA, TU Chemnitz)"

Diese INF-Datei:

Somit steht das angeschlossene serielle Gerät fein säuberlich im Geräte-Manager.

Eine INF-Datei muss genau genommen noch via .CAT-Datei zertifiziert werden, damit diese sich ohne lästige Warnungen oder gar Verbote installieren lässt.

Ungelöst ist noch: