Seriële poort. COM-poort. Bedrading, pinout en circuit

Dus we kwamen bij de COM-poort. Maar daarmee is alles niet zo eenvoudig als bij LPT, en het volledige gebruik ervan zal veel meer inspanning vergen. Het grootste probleem is ook het belangrijkste voordeel: seriële gegevensoverdracht. Als in LPT een byte aan gegevens langs 8 lijnen wordt verzonden, een bit per lijn, en de status van elke lijn gemakkelijk kan worden bekeken, dan wordt in de COM-poort een byte aan gegevens bit voor bit langs één lijn verzonden (ten opzichte van aarde , natuurlijk) en kijken wat daar wordt uitgezonden met LED's alleen zal niet lukken. Hiervoor heeft u een speciaal apparaat nodig: een converter van een seriële datastroom naar een parallelle datastroom, de zogenaamde. USART (universele synchrone/asynchrone ontvangerzender). Het is bijvoorbeeld opgenomen in het moederbord van een computer die is uitgerust met een COM-poort, of in een serieuzere microcontroller.


Ik hoop dat je nog steeds ontmoedigd bent in het beheersen van de COM-poort. Het is niet allemaal kommer en kwel. Sommige resultaten kunnen worden verkregen zonder USART. Laten we een taak formuleren die we zullen implementeren in de beginfase van het werken met de COM-poort:


"Ik wil dat er een LED via de COM-poort op de computer wordt aangesloten. Ik start het programma. Ik voer een actie uit in dit programma, de LED gaat branden, ik doe iets anders: de LED gaat uit."


De taak is vrij specifiek (rekening houdend met het feit dat USART niet wordt gebruikt) en is een pure “doe-het-zelf”-taak, maar het is redelijk haalbaar en werkbaar. Laten we beginnen met de implementatie ervan.


1.COM-poort

Neem opnieuw de systeemeenheid van uw pc en kijk naar de achterkant. We merken op dat er een 9-pins connector is - dit is de COM-poort. In werkelijkheid kunnen er meerdere zijn (maximaal 4). Mijn pc heeft twee COM-poorten (zie foto).


2. COM-poortuitbreiding


3. Hardware

Ook aan de hardware zullen we moeten ‘sleutelen’, in die zin dat die ingewikkelder zal zijn dan bij het eerste toestel voor de LPT-poort. Feit is dat het RS-232-protocol, waarmee gegevens worden uitgewisseld in de COM-poort, een iets andere logische status-spanningsrelatie heeft. Als dit doorgaans logisch 0 0 V, logisch 1 +5 V is, dan is in RS-232 deze relatie als volgt: logisch 0 +12 V, logisch 1 -12 V.

En als je bijvoorbeeld -12 V hebt ontvangen, is het niet meteen duidelijk wat je met deze spanning moet doen. Normaal gesproken worden RS-232-niveaus omgezet naar TTL (0,5 V). De eenvoudigste optie zijn zenerdiodes. Maar ik stel voor om deze converter op een speciale chip te maken. Het heet MAX232.

Laten we nu eens kijken welke signalen van de COM-poort we op de LED's kunnen zien? In feite zijn er maar liefst 6 onafhankelijke lijnen in de COM-poort, die van belang zijn voor de ontwikkelaar van interface-apparaten. Twee daarvan zijn nog niet voor ons beschikbaar: seriële datalijnen. Maar de overige vier zijn ontworpen om het gegevensoverdrachtproces te controleren en aan te geven en we kunnen ze “overdragen” om aan onze behoeften te voldoen. Twee ervan zijn bedoeld voor bediening vanaf een extern apparaat en we zullen ze voorlopig niet aanraken, maar we zullen nu de laatste twee overgebleven regels gebruiken. Ze heten:

  • RTS- Overdrachtsverzoek. Een interactielijn die aangeeft dat de computer gereed is om gegevens te ontvangen.
  • DTR- De computer is klaar. Een interactielijn die aangeeft dat de computer is ingeschakeld en klaar is om te communiceren.

Nu verplaatsen we hun doel een beetje, en de aangesloten LED's gaan uit of gaan branden, afhankelijk van de acties in ons eigen programma.

Laten we dus een diagram samenstellen waarmee we de beoogde acties kunnen uitvoeren.

En hier is de praktische implementatie ervan. Ik denk dat je me zult vergeven dat ik het in zo'n domme breadboard-versie heb gemaakt, omdat ik geen bord wil maken voor zo'n "zeer productief" circuit.


4. Softwaregedeelte

Alles is hier eenvoudiger. Laten we een Windows-toepassing maken in Microsoft Visual C++ 6.0, gebaseerd op MFC, om twee COM-poortcommunicatielijnen te beheren. Maak hiervoor een nieuw MFC-project aan en geef dit een naam, bijvoorbeeld TestCOM. Selecteer vervolgens de optie om te bouwen op basis van dialoog.

Geef het uiterlijk van het dialoogvenster van ons programma zoals in Fig. hieronder, voeg namelijk vier knoppen toe, twee voor elk van de regels. Een van hen is respectievelijk nodig om de lijn te “doven”, de andere om deze op één te “zetten”.

Klasse CTestCOMDlg: public CDialog ( // Constructie public: CTestCOMDlg(CWnd* pParent = NULL); // standaardconstructor HANDLE hFile;

Om ervoor te zorgen dat ons programma de lijnen van een COM-poort kan controleren, moet deze eerst worden geopend. Laten we de code schrijven die verantwoordelijk is voor het openen van de poort bij het laden van het programma.

HFile = CreateFile("COM2", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0,NULL); if(hFile==INVALID_HANDLE_VALUE) ( MessageBox("De poort kon niet worden geopend!", "Fout", MB_ICONERROR); ) else ( MessageBox("De poort is succesvol geopend", "Ok", MB_OK); )

Met behulp van de standaard Win API-functie Bestand maken() open de COM-poort COM2. Vervolgens controleren we het succes van de opening en geven we een informatiebericht weer. Hier moeten we een belangrijke opmerking maken: COM2 staat op mijn computer, maar op uw computer kunt u deze op een andere COM-poort aansluiten. Dienovereenkomstig moet de naam worden gewijzigd in de poort die u gebruikt. U kunt als volgt zien welke poortnummers op uw computer aanwezig zijn: Start -> Instellingen -> Configuratiescherm -> Systeem -> Hardware -> Apparaatbeheer -> Poorten (COM en LPT).

Als gevolg hiervan is de functie CTestCOMDlg::OnInitDialog(), gelegen in het bestand TestCOMDlg.cpp, zou onze dialoogklas de vorm moeten aannemen:

BOOL CTestCOMDlg::OnInitDialog() ( CDialog::OnInitDialog(); // Voeg het menu-item "Over..." toe aan het systeemmenu. // IDM_ABOUTBOX moet zich in het systeemopdrachtbereik bevinden. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); ) ) // Stel het pictogram voor dit dialoogvenster in. Het raamwerk doet dit automatisch // wanneer het hoofdvenster van de applicatie geen dialoogvenster is SetIcon(m_hIcon, TRUE); // Stel een groot pictogram in SetIcon(m_hIcon, FALSE); // Stel een klein pictogram in // TODO: Voeg hier extra initialisatie toe hFile = CreateFile("COM2", GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0,NULL); if(hFile==INVALID_HANDLE_VALUE) ( MessageBox("Kon poort niet openen!", "Ostbk", MB_ICONERROR); ) else ( MessageBox("Poort succesvol geopend", "Ok", MB_OK); ) return TRUE; // return TRUE tenzij u de focus op een besturingselement instelt )

Laten we nu handlers voor lijnbedieningsknoppen toevoegen. Ik heb ze toepasselijke namen gegeven: de functie die er één op de DTR-regel zet, is OnDTR1(), 0 is OnDTR0(). Voor de RTS-lijn op dezelfde manier. Ik wil u eraan herinneren dat de handler wordt aangemaakt wanneer u dubbelklikt op de knop. Als gevolg hiervan zouden deze vier functies er als volgt uit moeten zien:

Void CTestCOMDlg::OnDTR1() ( // TODO: Voeg hier uw controlemeldingshandlercode toe EscapeCommFunction(hFile, 6); ) void CTestCOMDlg::OnDTR0() ( // TODO: Voeg hier uw controlemeldingshandlercode toe EscapeCommFunction(hFile, 5); ) void CTestCOMDlg::OnRTS1() ( // TODO: Voeg hier uw controlemeldingshandlercode toe EscapeCommFunction(hFile, 4); ) void CTestCOMDlg::OnRTS0() ( // TODO: Voeg hier uw controlemeldingshandlercode toe EscapeCommFunctie(hBestand, 3);

Ik zal even uitleggen hoe ze werken. Zoals je kunt zien, bevatten ze binnenin een aanroep naar dezelfde Win API-functie EscapeCommFunctie() met twee parameters. De eerste is een handvat (HANDLE) naar een open poort, de tweede is een speciale actiecode die overeenkomt met de vereiste lijnstatus.

Dat is alles, we compileren en lanceren. Als alles in orde is, zou je een bericht moeten zien over de succesvolle opening van de poort. Door vervolgens op de overeenkomstige knoppen te drukken, knipperen de LED's die op de COM-poort zijn aangesloten.

© Ivanov Dmitri
December 2006

De overdracht van gegevens van de centrale processor naar elk randapparaat en omgekeerd wordt geregeld door het instellen van een IRQ-interruptverzoek...

Interrupts en adressen

De overdracht van gegevens van de centrale processor naar elk randapparaat en omgekeerd wordt geregeld door het instellen van een interruptverzoek (IRQ) en een I/O-adres. Bij een extern randapparaat worden het interruptverzoek en het I/O-adres toegewezen aan de poort waarmee het is verbonden.

Alleen al de woorden “interrupt request” geven aan dat de CPU wordt onderbroken en de opdracht krijgt om om te gaan met gegevens die van een bepaald apparaat komen. Er zijn in totaal 16 interrupts - van 0 tot 15. Alle seriële en parallelle poorten vereisen over het algemeen hun eigen interruptverzoek, behalve dat COM1 en COM3, evenals COM2 en COM4, ​​vaak een gemeenschappelijk interruptverzoek hebben.

Voor elke poort moet u een uniek I/O-adres opgeven, dat vergelijkbaar is met een mailbox voor correspondentie die binnenkomt op het CPU-adres, waarin deze wordt opgeslagen totdat deze wordt verwerkt. Als een interruptverzoek of I/O-adres tegelijkertijd door meer dan één apparaat wordt gebruikt, zal geen van deze correct werken en kan de pc zelfs vastlopen.

Als er problemen zijn met een poort, controleer dan welke interrupt-aanvragen en I/O-adres eraan zijn toegewezen.

Bedieningspaneel - Systeem - Apparaten - COM- en LPT-poorten

Als u vóór een regel een gele cirkel met een uitroepteken ziet, kunt u de oorzaak van de “interferentie” vinden. Klik met de gemarkeerde regel op "Eigenschappen - Bronnen". Zoek in het veld 'Lijst met conflicterende apparaten' wat het conflict veroorzaakt. Als blijkt dat het een oud bord is dat Plug & Play niet ondersteunt, wordt het vermeld als een “Onbekend apparaat”.

Om het probleem op te lossen, wijzigt u het interruptverzoek of het I/O-adres voor een van de overtredende apparaten. Als de poort zich op het moederbord bevindt, gebruikt u hiervoor het programma System Setup (BIOS).

Om de Systeeminstellingen te openen tijdens het opstarten van de pc, drukt u op "Delete", "F1" of een andere toets - lees dit in de systeemdocumentatie. In veel installatieprogramma's kunt u aan elke specifieke poort een interruptverzoek en een I/O-adres (bronnen instellen) toewijzen, waardoor de oude worden overschreven.

Zoek een ongebruikt interruptverzoek of I/O-adres.

Configuratiescherm - Systeem - Apparaten - Computer

U ziet een volledige lijst met toegepaste bronnen. Als er geen ongebruikte interruptverzoeken zijn, probeer dan de ongebruikte poort uit te schakelen met behulp van System Setup.

Daarna...

Systeem - Apparaten - Conflicterend apparaat - Bronnen

Schakel de automatische configuratiefunctie uit. In het venster "Lijst met bronnen" selecteert u het brontype, klikt u op de knop "Wijzigen" en geeft u in het veld "Waarde" een nieuwe (ongebruikte) interruptaanvraagwaarde of I/O-adres op.

Parallelle poortparameters instellen

Parallelle poorten worden afgekort als LPT. De computer wijst automatisch de adressen LPT1 tot en met LPT3 toe aan elke gedetecteerde parallelle poort.

Als u een tweede parallelle poort installeert, zorg er dan voor dat deze geen bestaand interruptverzoek gebruikt. Op sommige computers gebruiken LPT1 en LPT2 standaard IRQ7. Stel met Apparaatbeheer IRQ5 in voor LPT2. Als dit niet mogelijk is, gebruik dan het CMOS-installatieprogramma van uw systeem.

Standaard parallelle poortbroninstellingen

LPT-poort Onderbrekingsverzoek I/O-adres
LPT1 IRQ7 ZVS
LPT2 IRQ7 378
LPT3 IRQ5 278

Seriële poortparameters instellen

Elke seriële poort wordt geïdentificeerd door een van de acht mogelijke COM-adressen - COM1, COM2, etc., die elk hun eigen unieke I/O-adres en interruptverzoek hebben.

Wees voorzichtig bij het installeren van een apparaat dat een COM-poort op uw pc vereist. De COM1- en COM2-poorten hebben standaard I/O-adressen en interruptverzoeken die nergens gewijzigd mogen worden (kunnen doorgaans alleen gewijzigd worden in het Setup CMOS-programma van uw pc). Als u een COM1- of COM2-poort aan een nieuw apparaat moet toewijzen, opent u bij het opstarten van de pc het installatieprogramma en schakelt u de seriële poort die aan COM1 of COM2 is toegewezen uit, of, als u de overeenkomstige instellingen voor het apparaat moet wissen, toegevoegd apparaat, wijzig het interruptverzoek en het adres ter identificatie van de I/O

Houd er rekening mee dat alle standaard I/O-adressen alleen de derde en vierde interrupts gebruiken. Omdat twee apparaten niet hetzelfde interruptverzoek mogen delen, kunt u proberen nieuwe externe apparaten toe te wijzen aan poort COM3 via COM3 door handmatig interruptverzoeken en I/O-adressen in te stellen met behulp van Apparaatbeheer (dialoogvenster "Eigenschappen: Systeem").

Standaard seriële poortbroninstellingen

COM-poort Onderbrekingsverzoek I/O-adres
COM1 IRQ4 3F8
COM2 IRQ3 2F8
COM3 IRQ4 ZE8
COM4 IRQ3* 2E8
COM5 IRQ4* ZEO
COM6 IRQ3* 2EO
COM7 IRQ4* 338
COM8 IRQ3* 238

*Kan worden geïnstalleerd met Windows 9x Apparaatbeheer (Eigenschappen: Systeem)

Optimalisatie van seriële poorten

De computer heeft een of twee ingebouwde 9-pins seriële poorten, meestal aan de achterkant van de computer. Met behulp van een dergelijke poort kan slechts 1 bit aan gegevens per tijdseenheid worden overgedragen, terwijl via een parallelle poort 8 bits kunnen worden overgedragen. De snelheid van de seriële poort is afhankelijk van de universele asynchrone transceiver (UART), die de parallelle datastroom die door de pc-bus gaat, omzet in een single-bit-stroom.

Moderne pc's worden doorgaans geleverd met een 16550 UART-model. In dit geval is de maximale doorvoer 115 kbps, wat voldoende bandbreedte biedt voor de meeste seriële apparaten. Oudere UART-modellen 16450 en 8250 kunnen deze taak niet langer aan. Maar soms zijn de prestaties van de UART 16550 misschien niet voldoende, omdat sommige analoge modems gecomprimeerde gegevens verwerken met een snelheid van 230 kbps, en ISDN-adapters - tot 1 Mbps. Dus als u hogere gegevensoverdrachtsnelheden nodig heeft, koop dan een uitbreidingskaart met een 16750 UART-model dat op 921 kbps kan werken.

Werken met parallelle poorten

Parallelle poorten worden doorgaans gebruikt voor printers, hoewel ze ook andere apparaten, zoals scanners, op een pc kunnen aansluiten. Met hun hulp kun je gegevens overbrengen met snelheden van 40 KB/s tot 1 MB/s, en soms zelfs hoger.

In principe worden alle pc's geleverd met één parallelle poort in de vorm van een 25-pins connector op het achterpaneel. Om een ​​tweede poort toe te voegen, moet u een I/O-controller kopen en deze in het uitbreidingsslot op het moederbord installeren. Er zijn vier soorten parallelle poorten: unidirectioneel, bidirectioneel, verbeterde mogelijkheden (EPP-poort) en verbeterde mogelijkheden (ECP-poort). Elk van hen heeft verschillende snelheden en mogelijkheden. De meeste nieuwe pc-poorten ondersteunen alle vier de modi. Als u wilt weten welke een parallelle poort heeft, kijkt u in het CMOS-installatieprogramma van uw pc onder het gedeelte Geïntegreerde randapparatuur.

Unidirectionele poort soms ook SPP-poort genoemd. Deze basisconfiguratie geeft gegevens door met een snelheid van 40-50 KB/s in slechts één richting: naar de printer of een ander extern apparaat.

Bidirectionele poort. Biedt tmet overdrachtssnelheden van 100 tot 300 KB/s tussen een pc en een extern apparaat. In dit geval komt informatie over de status van de laatste de computer binnen.

Verbeterde poort (EPP). Ontworpen voor externe schijven en netwerkadapters die hoge prestaties vereisen. Biedt gegevensoverdrachtsnelheden van 400 KB/s tot 1 MB/s of meer.

Bij het installeren van de EPP-optie in het System Setup-programma worden versies 1.7 en 1.9 aangeboden. Voor vrijwel alle randapparatuur die de afgelopen jaren is aangeschaft, moet je kiezen voor 1.9.

Uitgebreide capaciteitspoort (ECP). Verhoogt de snelheid en breidt de mogelijkheden van gegevensuitwisseling tussen een extern apparaat en een computer uit. Als de printer en andere randapparatuur ECP ondersteunen, rapporteren ze rechtstreeks de apparaatstatus en fouten.

Als in het programma. System Setup stelt de ECP-optie in, waarna er een regel verschijnt om een ​​DMA-kanaal (direct memory access channel) te selecteren. Het moet op dezelfde manier worden ingesteld als voor een interruptverzoek. Om DMA-kanaalconflicten te voorkomen, bekijkt u de gratis kanalen in het venster "Eigenschappen: Computer", zoals hierboven beschreven. Als het conflict niet kan worden vermeden, keer dan terug naar de bidirectionele poortmodus.

De beste haven voor een data-orkaan.

In nieuwe systemen en randapparatuur werden parallelle en seriële poorten vervangen door een universele seriële bus ( Universele seriële bus, USB). Met zijn hulp kunt u gegevensoverdrachtsnelheden tot 12 Mbit/s bereiken en met slechts één poort ook toetsenborden, monitoren, muizen en vele andere (tot 127) apparaten aansluiten, die net als met de SCSI-interface die lost soortgelijke problemen op, kan worden aangesloten "ketting". In dit geval wordt slechts één interruptverzoek gebruikt. De USB-bus kan ook op oudere computers worden geïnstalleerd door de juiste uitbreidingskaart aan te schaffen.

Soms moet u het probleem oplossen van het verbinden van een elektronisch apparaat met een computer, of het nu gaat om gegevensuitwisseling of afstandsbediening. In dit artikel wordt beschreven hoe dit kan worden geïmplementeerd via een seriële poort. Het belangrijkste voordeel is dat de standaard Windows-programmeerinterface (API) directe controle over de uitvoerlijnen mogelijk maakt, er directe controle over geeft, en de functie heeft om te wachten op een gebeurtenis die verband houdt met de COM-poort. Bovendien maakt de RS-232-standaard, volgens welke de COM-poorten zijn gemaakt, het aansluiten en loskoppelen van kabels mogelijk terwijl de apparaten in werking zijn (hot-pluggable).

Beschrijving

COM-poort (seriële poort)– bidirectionele interface die gegevens in seriële vorm (bit voor bit) verzendt via het RS-232-protocol. Dit is een vrij gebruikelijk protocol dat wordt gebruikt om het ene apparaat (bijvoorbeeld een computer) met andere te verbinden via draden van maximaal 30 meter lang. De logische signaalniveaus verschillen hier van de standaardniveaus: het logische éénniveau is van +5 tot +15V, het logische nulniveau is van -5 tot -15V, wat extra circuittransformaties vereist, maar een goede ruisimmuniteit biedt.

Overweeg een 9-pins connector (DB-9M). Hieronder vindt u de pin-out:

Pinnr. Naam Karakter van het signaal Signaal
1 DCD Invoer Gegevensdrager detecteren
2 RxD Vrije dag Gegevens verzenden
3 TxD Invoer Gegevens ontvangen
4 DTR Vrije dag Dataterminal gereed
5 GND - Grond
6 DSR Invoer Dataset gereed
7 RTS Vrije dag Verzoek om te verzenden
8 CTS Invoer Duidelijk om te verzenden
9 R.I. Invoer Ringindicator

We zullen het meest geïnteresseerd zijn in pin 2 (datatransmissie), 3 (dataontvangst) en 5 (aarde). Dit is de minimale instelling voor tweerichtingscommunicatie tussen apparaten.

Ik zal niet in detail ingaan op de beschrijving van het protocol. Hiervoor zijn er GOST's, enz. Daarom zullen we verder gaan en praten over hoe we dit beest kunnen beheersen.

Sollicitatie

Zoals reeds vermeld verschillen de RS-232 LAN-niveaus van de standaard TTL-niveaus. Daarom moeten we de spanningswaarden op de een of andere manier converteren. Die. maak 5V van +15V en 0V van -15V (en omgekeerd). Eén manier (en waarschijnlijk de eenvoudigste) is door een speciale MAX232-chip te gebruiken. Het is gemakkelijk te begrijpen en kan tegelijkertijd twee logische signalen omzetten.

Hieronder ziet u een diagram van de opname ervan:


Ik denk dat er geen problemen hoeven te zijn. Dit is één van de mogelijkheden om deze chip te gebruiken: data overbrengen van een microcontroller naar een computer en andersom. Het verzonden signaal gaat naar de T-pinnen X IN aan één kant en aan R X IN aan de andere kant. Ingangssignalen worden overgenomen van T X UIT en R X UIT respectievelijk.

Programmering

Laten we het eerst hebben over het programmeren van poorten op een laag niveau. Dit zal correcter zijn. Ik heb veel zenuwen besteed aan het begrijpen van deze interface totdat ik me begon te verdiepen in het principe van de werking ervan op een lager niveau dan eenvoudige karakteroverdracht. Als dit duidelijk is, zullen er geen problemen zijn met talen op hoog niveau.

Hieronder staan ​​de adressen van de COM-poorten waarmee we zullen moeten werken:

Naam van de haven Adres IRQ
COM1 3F8u 4
COM2 2F8u 3
COM3 3E8u 4
COM4 2E8u 3

Ze kunnen variëren. U kunt de waarden instellen in de BIOS-instellingen. Dit zijn de basisadressen. De adressen van de registers die verantwoordelijk zijn voor de werking van de havens zullen hiervan afhangen:

Adres DLAB Lezen/schrijven Afkorting Naam registreren
+ 0 =0 Schrijven Zenderhoudbuffer
=0 Lezen Ontvangerbuffer
=1 Lezen/schrijven Deler Vergrendeling Low Byte
+ 1 =0 Lezen/schrijven IER Onderbreken Activeren Registreren
=1 Lezen/schrijven Deler Vergrendeling Hoge byte
+ 2 - Lezen IIR Identificatieregister onderbreken
- Schrijven FCR FIFO-controleregister
+ 3 - Lezen/schrijven LCR Lijncontroleregister
+ 4 - Lezen/schrijven MCR Modemcontroleregister
+ 5 - Lezen LSR Lijnstatus registreren
+ 6 - Lezen MSR Modemstatus registreren
+ 7 - Lezen/schrijven Krasregister

De eerste kolom is het adres van het register ten opzichte van het basisadres. Voor COM1: het LCR-registeradres is bijvoorbeeld 3F8h+3=3FB. De tweede kolom is een DLAB-bit (Divisor Latch Access Bit), dat verschillende doeleinden voor hetzelfde register definieert. Hiermee kunt u 12 registers bedienen met slechts 8 adressen. Als DLAB=1 bijvoorbeeld, zullen we door toegang te krijgen tot adres 3F8h de waarde van de lage byte van de frequentiedeler van de klokgenerator instellen. Als DLAB = 0, wordt bij toegang tot hetzelfde adres de verzonden of ontvangen byte naar dit register geschreven.

“Nul”-register

Het komt overeen met registers voor het ontvangen/verzenden van gegevens en het instellen van de frequentiedelercoëfficiënt van de generator. Zoals hierboven vermeld, als DLAB = 0, wordt het register gebruikt om ontvangen/verzonden gegevens op te nemen, maar als het gelijk is aan 1, wordt de waarde van de lage byte van de frequentiedeler van de klokgenerator ingesteld. De datatransmissiesnelheid is afhankelijk van de waarde van deze frequentie. De hoge byte van de deler wordt naar de volgende geheugencel geschreven (dat wil zeggen: voor de COM1-poort is dit 3F9h). Hieronder ziet u de afhankelijkheid van de gegevensoverdrachtsnelheid van de delercoëfficiënt:

Onderbreken Enable Register (IER)

Als DLAB=0, wordt het gebruikt als register voor het besturen van interrupts van een asynchrone adapter; als DLAB=1, wordt de hoge byte van de frequentiedeler van de klokgenerator daarin ingesteld.

Interrupt Identificatie Register (IIR)

Een interrupt is een gebeurtenis die de uitvoering van het hoofdprogramma stopt en de uitvoering van de interruptroutine begint. Dit register bepaalt het type interrupt dat heeft plaatsgevonden.

Lijncontroleregister (LCR)

Dit is het controleregister.

Beetje 7 1 Divisor Latch Access Bit – instelling van de gegevensuitwisselingssnelheid
0 Normale modus (onderbrekingsregeling, gegevensontvangst/-overdracht)
Beetje 6 Regeleinde simuleren (stuurt een reeks van meerdere nullen)
Bits 3 – 5 Beetje 5 Beetje 4 Beetje 3 Pariteit selectie
X X 0 Geen pariteit
0 0 1 Vreemde pariteit
0 1 1 Zelfs pariteit
1 0 1 Hoge pariteit (plakkerig)
1 1 1 Lage pariteit (plakkerig)
Beetje 2 Aantal stopbits
0 1 stopbit
1 2 stopbits voor 6,7 of 8 databits of 1,5 stopbits voor 5 databits.
Bits 0 en 1 Beetje 1 Beetje 0 Aantal databits
0 0 5 bits
0 1 6 bit
1 0 7 bit
1 1 8 bit

Pariteitscontrole omvat de overdracht van nog een bit: de pariteitsbit. De waarde ervan wordt zo ingesteld dat het totale aantal enen (of nullen) in een pakket bits even of oneven is, afhankelijk van de instelling van de poortregisters. Deze bit wordt gebruikt om fouten te detecteren die kunnen optreden tijdens de gegevensoverdracht als gevolg van interferentie op de lijn. Het ontvangende apparaat herberekent de pariteit van de gegevens en vergelijkt het resultaat met de ontvangen pariteitsbit. Als de pariteit niet overeenkomt, wordt ervan uitgegaan dat de gegevens met een fout zijn verzonden.

Het stopbit geeft het einde van de gegevensoverdracht aan.

Modemcontroleregister (MCR)

Modemcontroleregister.

Beetje Betekenis
0 DTR-lijn
1 RTS-lijn.
2 Lijn OUT1 (reserve)
3 Lijn OUT2 (reserve)
4 Diagnose uitvoeren wanneer de ingang van een asynchrone adapter is kortgesloten met de uitgang.
5-7 Gelijk aan 0

Lijnstatusregister (LSR)

Een register dat de status van de lijn bepaalt.

Beetje Betekenis
0 Gegevens ontvangen en klaar om te worden gelezen, worden automatisch gereset wanneer gegevens worden gelezen.
1 Overloopfout. Er werd een nieuwe byte aan gegevens ontvangen, maar de vorige was nog niet door het programma gelezen. De vorige byte gaat verloren.
2 Pariteitsfout, gewist na het lezen van de lijnstatus.
3 Synchronisatiefout.
4 Er is een verzoek gedetecteerd om de transmissie "BREAK" te onderbreken: een lange reeks nullen.
5 Het zenderhoudregister is leeg en er kan een nieuwe byte naar worden geschreven voor verzending.
6 Het zenderschuifregister is leeg. Dit register ontvangt gegevens van het vasthoudregister en serialiseert deze voor verzending.
7 Time-out (apparaat is niet op de computer aangesloten).

Modemstatusregister (MSR)

Modemstatusregister.

Nou, dat is alles. Door deze registers te bedienen, kunt u rechtstreeks communiceren met de COM-poort en de verzending en ontvangst van gegevens regelen. Als u niet aan het geheugen wilt sleutelen, kunt u kant-en-klare componenten gebruiken voor verschillende programmeeromgevingen: C++, VB, Delphi, Pascal, enz. Ze zijn intuïtief, dus ik denk dat het niet nodig is om hier op hen te concentreren.

Een bijzonder kenmerk van deze poort vergeleken met andere “seriële” technologieën is het feit dat er geen timingvereisten zijn tussen 2 bytes. Er zijn alleen timingvereisten tussen de bits van één byte (inclusief start, stop en pariteit). Het omgekeerde van de tijdpauze tussen de bits van één byte wordt de baudsnelheid genoemd - de baudsnelheid. Ook in deze technologie bestaat er geen concept van “pakket”.

Andere 'seriële' technologieën, zoals X.25, USB of Ethernet, hebben een 'pakket'-concept en stellen strikte timingvereisten op tussen alle bits van een enkel pakket.

Om deze reden werd deze poort in Cisco IOS-terminologie async genoemd - in tegenstelling tot synchrone serieel, d.w.z. X.25. Om dezelfde reden heet de Windows-module die PPP via deze poort implementeert AsyncMac.sys (de PPP-standaard beschrijft afzonderlijk de implementatie van PPP, die het concept van "pakket" gebruikt, via een seriële poort die dit concept niet heeft) .

Sommige industriële communicatieprotocollen leggen strikte timingvereisten op tussen seriële poortbytes. Dergelijke protocollen zijn uiterst moeilijk te implementeren in multitasking-besturingssystemen met zwakke real-time ondersteuning, zoals Windows, en vereisen daarom vaak MS-DOS en verouderde software van bijna 20 jaar geleden op de besturingscomputer.

Doel

De meest gebruikte standaard voor de seriële poort van personal computers is RS-232C. Vroeger werd de seriële poort gebruikt om een ​​terminal aan te sluiten, later voor een modem of muis. Het wordt nu gebruikt om verbinding te maken met en te communiceren met hardware voor de ontwikkeling van embedded computersystemen, satellietontvangers, kassa's, maar ook met apparaten voor beveiligingssystemen voor faciliteiten.

Via een COM-poort kunt u twee computers met elkaar verbinden via een zogenaamde “nulmodemkabel” (zie hieronder). Het wordt al sinds de dagen van MS-DOS gebruikt voor het overbrengen van bestanden van de ene computer naar de andere, in UNIX voor terminaltoegang tot een andere machine, en in Windows (zelfs moderne) voor een debugger op kernelniveau.

Het voordeel van de technologie is de extreme eenvoud van de apparatuur. Het nadeel is de lage snelheid, de grote connectorgroottes, de vaak hoge eisen aan de responstijd van het besturingssysteem en het stuurprogramma en een hoog aantal interrupts (één per helft van de hardwarewachtrij, d.w.z. 8 bytes).

Connectoren

Op moederborden van toonaangevende fabrikanten (bijvoorbeeld Intel) of kant-en-klare systemen (bijvoorbeeld IBM, Hewlett-Packard, Fujitsu Siemens Computers) wordt het volgende symbool gebruikt voor de seriële poort:

De meest gebruikte D-vormige connectoren, gestandaardiseerd in 1969, zijn 9-pins en 25-pins (respectievelijk DB-9 en DB-25). Voorheen werden ook DB-31 en ronde acht-pins DIN-8 gebruikt. De maximale transmissiesnelheid in de normale versie van de poort is 115.200 baud.

Relevantie

Er zijn standaarden voor het emuleren van een seriële poort via USB en via Bluetooth (deze technologie is grotendeels ontworpen als een “draadloze seriële poort”).

Niettemin wordt software-emulatie van deze poort nog steeds veel gebruikt. Bijna alle mobiele telefoons emuleren bijvoorbeeld een klassieke COM-poort en modem in zichzelf om tethering te implementeren: computertoegang tot internet via de GPRS/EGDE/3G-apparatuur van de telefoon. In dit geval wordt USB, Bluetooth of Wi-Fi gebruikt voor de fysieke verbinding met de computer.

Ook wordt software-emulatie van deze poort aangeboden aan “gasten” van virtuele VMWare- en Microsoft Hyper-V-machines, waarvan het belangrijkste doel is om een ​​debugger op Windows-kernelniveau te verbinden met de “gast”.

Apparatuur

De connector heeft contacten:

DTR (Data Terminal Ready - gereedheid om gegevens te ontvangen) - uitvoer op de computer, invoer op de modem. Geeft aan dat de computer klaar is om de modem te gebruiken. Het resetten van deze lijn zorgt ervoor dat de modem vrijwel volledig opnieuw wordt opgestart naar de oorspronkelijke staat, incl. ophangen (sommige controleregisters overleven zo'n reset). Op UNIX gebeurt dit wanneer alle toepassingen gesloten bestanden op het stuurprogramma voor de seriële poort hebben. De muis gebruikt deze draad om stroom te ontvangen.

DSR (Data Set Ready - gereedheid voor gegevensoverdracht) - invoer op de computer, uitvoer op de modem. Geeft aan dat de modem gereed is. Als deze regel op nul staat, wordt het in sommige besturingssystemen onmogelijk om de poort als bestand te openen.

RxD (gegevens ontvangen) - invoer op de computer, uitvoer op de modem. Een stroom gegevens die een computer binnenkomt.

TxD (gegevens verzenden) - uitvoer op de computer, invoer op de modem. Een stroom gegevens afkomstig van een computer.

CTS (Clear to Send - gereedheid om te verzenden) - invoer op de computer, uitvoer op de modem. De computer moet de gegevensoverdracht onderbreken totdat deze draad op één is ingesteld. Wordt gebruikt in het hardware-stroomcontroleprotocol om overflow in de modem te voorkomen.

RTS (Request to Send - verzoek om te verzenden) - uitvoer op de computer, invoer op de modem. Het modem moet de gegevensoverdracht onderbreken totdat deze draad op één is ingesteld. Wordt gebruikt in het hardware-stroomcontroleprotocol om overflows van hardware en stuurprogramma's te voorkomen.

DCD (Carrier Detect - aanwezigheid van carrier) - invoer op de computer, uitvoer op de modem. Ingesteld op één door het modem nadat een verbinding tot stand is gebracht met het modem aan de andere kant, opnieuw ingesteld op nul wanneer de verbinding wordt verbroken. De computerhardware kan een interrupt afgeven wanneer een dergelijke gebeurtenis zich voordoet.

RI (Ring Indicator - belsignaal) - ingang op de computer, uitgang op de modem. Door de modem ingesteld op één na detectie van het belsignaal van een telefoongesprek. De computerhardware kan een interrupt afgeven wanneer een dergelijke gebeurtenis zich voordoet.

SG (Signal Ground) - gemeenschappelijke signaaldraad van de poort, is geen gemeenschappelijke grond, in de regel geïsoleerd van de computerkast of modem.

Een nulmodemkabel maakt gebruik van twee gekruiste paren: TXD/RXD en RTS/CTS.

De standaard (sinds de originele IBM PC) poorthardware heet UART 16550 (momenteel opgenomen in de SuperIO-chip op het moederbord, samen met een aantal andere apparaten). Sinds de tijd van de IBM-pc is er een hardwarebyte-wachtrij in verschenen, waardoor het aantal interrupts dat door het apparaat wordt uitgegeven aanzienlijk wordt verminderd.

Programmatische toegang tot de COM-poort

UNIX

Er is een registersectie voor elke poort. Deze secties hebben de volgende namen:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Serial\Parameters\Serial10000

waarbij de laatste waarde “Serial10000” een uniek nummer is voor elke nieuwe COM-poort die aan het systeem wordt toegevoegd, voor de tweede – “Serial10001”, enz.

Om te communiceren met apparaten die Bluetooth ondersteunen, hebben sommige programma's (bijvoorbeeld: een programma dat de contactenlijst synchroniseert met een mobiele telefoon; een programma dat GPS-coördinaten ophaalt van een GPS-ontvanger) een COM-poort op de computer van de gebruiker nodig.

Programma's die COM-poorten gebruiken om communicatie te ondersteunen met behulp van draadloze Bluetooth-technologie, rechtstreeks ontwikkeld door Microsoft, zijn onder meer:

  • HotSync gebruikt in draagbare computers
  • ActiveSync, gebruikt in zak-pc's

Besturingssysteem/2

Het bestaande COM.SYS-stuurprogramma ondersteunt slechts 4 COM-poorten, die elk een eigen interruptlijn moeten hebben. Om COM-poorten te bedienen met een gemeenschappelijke interruptlijn, moet u het SIO-stuurprogramma gebruiken.

Nulmodem kabel

Hoofd artikel: Nulmodem kabel

In sommige gevallen is het mogelijk om een ​​vereenvoudigde versie van de kabel te gebruiken, waarbij alleen pin 2, 3 en 5 worden gebruikt.

Zie ook

  • Seriële poortsignalen

Opmerkingen

Koppelingen

  • Vertaling van de programmeergids voor de COM-poort in POSIX-besturingssystemen
  • Programmeren van de poort in Java - hiermee kunt u vanuit Windows werken, in tegenstelling tot officiële pakketten van Sun.
  • Programmeren van een COM-poort in C++ voor Windows. Kant-en-klare bibliotheek, broncodes, voorbeeldprogramma's.
  • Yashkardin V.L. Seriële poort. Programmeren van een COM-poort in Windows en MS-DOS. Zachte Electro (2009). Gearchiveerd van het origineel op 8 februari 2012.

). Ondanks het feit dat sommige computerinterfaces (bijvoorbeeld Ethernet, FireWire en USB) ook een seriële methode gebruiken voor het uitwisselen van informatie, wordt de naam "seriële poort" toegewezen aan de RS-232-standaardpoort.

Encyclopedisch YouTube

  • 1 / 5

    De meest gebruikte standaard voor de seriële poort van personal computers is RS-232C. Vroeger werd de seriële poort gebruikt om een ​​terminal aan te sluiten, later voor een modem of muis. Het wordt nu gebruikt om verbinding te maken met hardware voor de ontwikkeling van embedded computersystemen, satellietontvangers, kassa's, beveiligingssystemen voor faciliteiten en vele andere apparaten.

    Via een COM-poort kunt u twee computers met elkaar verbinden via een zogenaamde “nulmodemkabel” (zie hieronder). Het wordt al sinds de dagen van MS-DOS gebruikt voor het overbrengen van bestanden van de ene computer naar de andere, in UNIX voor terminaltoegang tot een andere machine, en in Windows (zelfs moderne) voor een debugger op kernelniveau.

    Het voordeel van de technologie is de extreme eenvoud van de apparatuur. Het nadeel is een lage snelheid, grote connectorgroottes, maar ook vaak hoge eisen aan de responstijd van het besturingssysteem en het stuurprogramma en een groot aantal interrupts (één per helft van de hardwarewachtrij, dat wil zeggen 8 bytes).

    Connectoren

    Op moederborden van toonaangevende fabrikanten (bijvoorbeeld Intel) of kant-en-klare systemen (bijvoorbeeld IBM, Hewlett-Packard, Fujitsu Siemens Computers) wordt het volgende symbool gebruikt voor de seriële poort:

    De meest gebruikte D-vormige connectoren, gestandaardiseerd in 1969, zijn 9- en 25-pins (respectievelijk DE-9 en DB-25). Voorheen werden ook DA-31 en ronde acht-pins DIN-8 gebruikt. De maximale transmissiesnelheid in de normale versie van de poort is 115.200 baud.

    Relevantie

    Er zijn standaarden voor het emuleren van een seriële poort via USB en via Bluetooth (deze technologie is grotendeels ontworpen als een “draadloze seriële poort”).

    Niettemin wordt software-emulatie van deze poort nog steeds veel gebruikt. Bijna alle mobiele telefoons emuleren bijvoorbeeld een klassieke COM-poort en modem in zichzelf om tethering te implementeren: computertoegang tot internet via de GPRS/EDGE/3G-apparatuur van de telefoon. In dit geval wordt USB, Bluetooth of Wi-Fi gebruikt voor de fysieke verbinding met de computer.

    Ook wordt software-emulatie van deze poort aangeboden aan “gasten” van virtuele VMWare- en Microsoft Hyper-V-machines, waarvan het belangrijkste doel is om een ​​debugger op Windows-kernelniveau te verbinden met de “gast”.

    In de vorm van een UART, die verschilt qua spanningsniveaus en de afwezigheid van extra signalen, is deze aanwezig in bijna alle microcontrollers, behalve de kleinste SoC-ontwikkelaarsborden, en is ook aanwezig op de kaarten van de meeste apparaten, maar de connector bevindt zich niet op de behuizing. Deze populariteit is te danken aan de eenvoud van deze interface, zowel vanuit fysiek oogpunt als aan het gemak van toegang tot de poort vanuit de software in vergelijking met andere interfaces.

    Apparatuur

    De connector heeft contacten:

    DTR (Data Terminal Ready - gereedheid om gegevens te ontvangen) - uitvoer op de computer, invoer op de modem. Geeft aan dat de computer klaar is om de modem te gebruiken. Het resetten van deze regel veroorzaakt een vrijwel volledige herstart van de modem naar de oorspronkelijke staat, inclusief het ophangen (sommige controleregisters overleven een dergelijke reset). Op UNIX gebeurt dit wanneer alle toepassingen gesloten bestanden op het stuurprogramma voor de seriële poort hebben. De muis gebruikt deze draad om stroom te ontvangen.

    DSR (Data Set Ready - gereedheid voor gegevensoverdracht) - invoer op de computer, uitvoer op de modem. Geeft aan dat de modem gereed is. Als deze regel op nul staat, wordt het in sommige besturingssystemen onmogelijk om de poort als bestand te openen.

    RxD (gegevens ontvangen) - invoer op de computer, uitvoer op de modem. Een stroom gegevens die een computer binnenkomt.

    TxD (gegevens verzenden) - uitvoer op de computer, invoer op de modem. Een stroom gegevens afkomstig van een computer.

    CTS (Clear to Send - gereedheid om te verzenden) - invoer op de computer, uitvoer op de modem. De computer moet de gegevensoverdracht onderbreken totdat deze draad op één is ingesteld. Wordt gebruikt in het hardware-stroomcontroleprotocol om overflow in de modem te voorkomen.

    RTS (Request to Send - verzoek om te verzenden) - uitvoer op de computer, invoer op de modem. Het modem moet de gegevensoverdracht onderbreken totdat deze draad op één is ingesteld. Wordt gebruikt in het hardware-stroomcontroleprotocol om overflows van hardware en stuurprogramma's te voorkomen.

    DCD (Carrier Detect - aanwezigheid van carrier) - invoer op de computer, uitvoer op de modem. Ingesteld op één door het modem nadat een verbinding tot stand is gebracht met het modem aan de andere kant, opnieuw ingesteld op nul wanneer de verbinding wordt verbroken. De computerhardware kan een interrupt afgeven wanneer een dergelijke gebeurtenis zich voordoet.

    RI (Ring Indicator - belsignaal) - ingang op de computer, uitgang op de modem. Door de modem ingesteld op één na detectie van het belsignaal van een telefoongesprek. De computerhardware kan een interrupt afgeven wanneer een dergelijke gebeurtenis zich voordoet.

    SG (Signal Ground) - gemeenschappelijke signaaldraad van de poort, is geen gemeenschappelijke grond, in de regel geïsoleerd van de computerkast of modem.

    Een nulmodemkabel maakt gebruik van twee gekruiste paren: TXD/RXD en RTS/CTS.

    Aanvankelijk werd in de IBM PC en IBM PC/XT de poortapparatuur gebouwd op de UART 8250-chip van National Semiconductor, waarna de chip werd vervangen door de 16450, software die compatibel was met de vorige, maar snelheden tot 115.200 bits per uur mogelijk maakte. ten tweede verscheen de 16550-chip, die een bidirectionele FIFO-databuffer bevatte om de belasting van de interruptcontroller te verminderen. Momenteel opgenomen in de SuperIO-chip op het moederbord, samen met een aantal andere apparaten.