Cum funcționează un modem
Modemurile sunt niște dispozitive electronice de extensie a funcționalității computerelor, ajutându-le să se conecteze la anumite rețele, în special cele de tip dial-up, care folosesc linii telefonice pentru transmisia datelor (sau niște rețele de telefonie – mai nou, pentru modemurile 3G). Denumirea de modem vine de la funcția sa principală, și anume aceea de a modula și demodula semnale audio purtătoare de informație.
Pentru a înțelege modul cum funcționează un modem (nu este un model anume, ci unul abstractizat, generalist) vom porni de la următoarea schemă de principiu.
Deși funcționarea este destul de simplă, trebuie să explic mai multe scenarii de transfer a datelor, la sfârșit vorbind despre chestiuni precum modulație, baud, rată de transfer, port, și așa mai departe.
1. Recepția unui bit de date
- Un bit de date venind de pe linia telefonică (1) trece prin conectorul RJ11 (2) sub forma unei unde electrice modulate (3), undă pe care o vom aproxima ca având forma unei sinusoide (adică așa: ~ ).
- Felul în care un bit de date este codificat în acea oscilație se numește modulație – vom reveni la asta.
- Semnalul modulat (3) ajunge la întrerupătorul de linie (4). Ca să înțelegem ce înseamnă întrerupătorul de linie și la ce folosește, trebuie să ne amintim cum funcționau telefoanele cu disc: formând un număr pe cadran, prin tragerea discului de formare în sensul acelor de ceasornic, linia era întreruptă de numărul de ori echivalent cifrei formate, iar cifra zero întrerupea linia de zece ori (sau, oricum, pe acolo).
- Mai mult, întrerupătorul de linie (4) ne ajută să facem transmisia și recepția aproape simultană, fiindcă întrerupătorul de linie decuplează linia de recepție când are loc transmisia, și invers, de un număr foarte mare de ori (hai să nu vorbim despre eșantionare și extrapolare).
- De la întrerupătorul de linie (4), semnalul audio merge la receptorul audio (5), care receptor audio trimite semnalul, după o anume prelucrare (filtrare de paraziți, etc), către convertorul analog – digital (6) serial (bit cu bit), convertorul analog – digital (6) generând un număr binar (cod).
Convertorul analog – digital (6) este un dispozitiv simplu, care filtrează un număr de frecvențe. Astfel că fiecare frecvență audio, deci sunet, este asociată unui cod. Și reciproca este valabilă, vom vedea în partea a doua când oferind un cod unui convertor digital – analogic (20) acesta va genera frecvența care se traduce în același cod.
Evident, conversia dinspre sunet spre un număr digital și inversă este esențială la codificarea și decodificarea semnalelor.
- Numărul digital rezultat trece prin controlerul de magistrală externă (7) care se asigură că atunci când are loc recepția unui bit, transmisia este blocată, și invers. Oricum, rezultatul digital, numit în continuare cod, este depus spre stocare într-o memorie de tip tampon – buffer – (8).
- Memoria aceasta tampon (8) este folosită, printre altele, pentru a aproviziona cu date mecanismul de corecție și control al erorilor (9) – Error Correction and Control. Această memorie tampon are de obicei o capacitate mică (multiplu de 8 sau 9 biți, de obicei 3, deci 24 sau 27 de biți.
- Mecanismul de corecție și control al erorilor (9) folosește memoria tampon (8) pentru a face operații matematice și logice asupra codurilor rezultate (de exemplu controlul parității). Pentru fiecare cod rezultat (estimat printr-un byte) sunt două scenarii posibile:
- Codul nu este valid. Sărim la capitolul special pentru asta: 3. Controlul și corecția erorilor.
- Codul este valid. Mergem la pasul 7 din descriere.
- Codul, odată validat, este mutat de către microcontrolerul modemului (10) într-o altă memorie tampon (11), memorie zisă și buffer de intrare – ieșire și notată Buffer I/O, codul așteptând să fie trimis la magistrala PC-ului (13) prin blocul de intrare – ieșire (12).
- Memoria tampon de intrare – ieșire (11) este mai mare decât memoria tampon (8) pentru că acum comunicăm direct cu magistrala PC-ului, care magistrală nu vrem să o ținem ocupată prea mult timp. De aceea vom transmite datele în bloc, câte 4 bytes deodată, minim. Pentru aceasta:
- Microcontrolerul modemului va trimite datele în buffer (11).
- Va anunța controlerul DMA (14) că a umplut bufferul cu date.
- Va cere controlerului de magistrală (15) să trimită datele din buffer cât mai repede. Acesta așteaptă ca magistrala PC-ului (13) să-i dea acces de scriere, eventual cere accesul de la microprocesor – CPU – (19).
- După ce obține acces de scriere, controlerul de magistrală îi ordonă blocului de intrare – ieșire (12) să trimită datele care vor ajunge pe magistrala PC-ului (13).
- De acolo, deși n-am mai avut loc să reprezint și asta, blocul de intrare – ieșire al magistralei anunță controlerul de magistrală că au sosit date, iar controlerul de acces direct la memorie (16) – Direct Memory Access Controller – depune datele în memoria RAM (17), după cum acestea au fost marcate.
- Adresele de memorie la care vor fi depuse datele sunt setate din driver. De aceea ni se cere să setăm un port serial virtual, sau să folosim un port serial, pentru a ști de la ce adresă de memorie să luăm codul (cel venit pe linia telefonică și decodificat).
- Din memoria RAM (17), microprocesorul (18) poate cere datele folosind controlerul RAM (19).
2. Transmisia unui bit de date
- Microprocesorul (18) – CPU – transmite rezultatul unei operații interne (adunare, să zicem), numit în continuare cod, către o adresă de memorie din memoria RAM (17), prin intermediul controlerului RAM (18).
- Acea adresă de memorie unde se află codul îi aparține modemului. De aceea microprocesorul (18) îi dă ordin controlerului (nereprezentat) de magistrală să ceară acces de scriere pe magistrala (13) la care este conectat un anume dispozitiv – în acest caz modemul.
- Când controlerul de magistrală are acces de scriere, microprocesorul (18) îi ordonă blocului de intrare ieșire al PC-ului (nereprezentat) să scrie pe magistrala (13) datele de din blocul de memorie RAM (17) aferente modemului, prin intermediul controlerului DMA (16).
- În modem, blocul de intrare – ieșire (12) certifică faptul că datele au fost recepționate cu succes, le depune în memoria tampon (11) și-i cere controlerului de magistrală (15) să întrerupă accesul de scriere al PC-ului la magistrala modemului.
- De acolo, din memoria tampon (11), codul (datele) ajunge în memoria tampon (8) prin intermediul controlerului (10) al modemului.
- Mecanismul de corecție și control al erorilor (9) generează un cod de control ce va fi transmis odată cu codul prin intermediul controlerului de magistrală externă (7) care îi permite memoriei tampon să alimenteze cu date convertorul digital – analog (20) – Convertor Dl/A.
- Convertorul digital – analog (20) transformă fiecare cod digital într-un sunet, astfel încât acel sunet convertit de un convertor analog – digital (6) să producă fix codul inițial (același). Pentru aceasta, convertorul digital – analog (20) folosește un mecanism de modulație (vom vedea un pic mai în jos ce înseamnă).
- Semnalul analogic rezultat intră în emițătorul audio (21) care, prin întrerupătorul de linie (4) ajunge la linia telefonică (1) prin mufa RJ11 (2) a modemului.
3. Controlul și corecția erorilor
Blocul de corecție și control al erorilor (9) folosește diverși algoritmi pentru a detecta și, dacă este posibil, a repara erorile. Despre corecția și controlul erorilor am vorbit un pic.
- Așadar, dacă un cod nu este valid, blocul de corecție și control al erorilor (9) informează microcontrolerul (10) că a avut loc o eroare ce nu poate fi reparată.
- Microcontrolerul (10) resetează conținutul memoriei tampon (8) și formează un set de comenzi pe care le depune în aceasta.
- Cu ajutorul controlerului de magistrală externă (7) comenzile din memoria tampon (8) sunt transmise mai departe, la convertorul digital – analog și, de acolo, mai departe, conform pasului 7 din transmisia unui bit de date.
4. Anexa
- Modulația este procesul prin care unda (AM/ FM) sau mai multe dintre proprietățile unei unde numite purtătoare sunt schimbate în funcție de evoluția proprietăților undei modulate în raport cu unda modulatoare.
Sigur, există mai multe subcategorii în cadrul acelora prezentate mai sus, dar nu acesta este scopul articolului.
- Tipuri de modulare:
- analogică (la modemuri dial-up):
- AM: modulație în amplitudine a semnalului purtătoarei.
- FM: modulație în frecvență a semnalului purtătoarei.
- CW: unda continuă este folosită pentru a transmite cod Morse. Se bazează pe existența sau lipsa purtătoarei.
- PM: modulația de fază, la fel ca modulația FM, este o modulație de unghi a purtătoarei.
- digitală:
- ASK: schimbarea biților transmiși duce la schimbarea amplitudinii undei purtătoare.
- FSK: schimbarea biților transmiși duce la schimbarea frecvenței undei purtătoarei.
- PSK: schimbarea biților transmiși duce la schimbarea fazei undei purtătoare.
- BIOS-ul din cadrul modemului are un rol foarte practic. Când dispozitivul este pornit, microcontrolerul (10) cere date de la buffer-ul (8) care le va lua din memoria BIOS (22), eventual pe ruta care trece prin controlerul de magistrală externă (7). Mai mult, întreg programul de funcționare, inclusiv algoritmii de management al transferurilor dinspre și spre PC, dinspre și spre linia telefonică, inclusiv tipurile de modulație și o parte din algoritmii de corecție și control al erorii se află implementată în cod de program scris în această memorie EPROM.
- Unele blocuri din această schemă bloc pot să lipsească, conținutul variind de la modem la modem. După cum spuneam, acesta este designul unui modem abstractizat.
- De exemplu, la modemurile pe ISA lipsea complet controlerul de acces direct la memorie (14).
- La modemurile noi corecția și controlul erorilor se făcea de către microprocesor (18). O mizerie. Cea mai bună performanță se obține de la modemurile ce au corecție și control (9) implementate direct, măcar fiindcă degrevează microprocesorul de o sarcină suplimentară.
- La modemurile moderne, nu neapărat mai bune, circuitele de emisie audio (21) sau recepție audio (5) sunt mult mai simple, bazându-se pe instrucțiuni ale microprocesorului pentru codificare/ decodificare. De aceea modemurile aiurea cer microprocesor ce suportă instrucțiuni MMX.
- Baud este unitatea de măsură a informației analogice. Adică o valoare de 600 baud pe secundă îi corespunde unei rate de transfer de 600 de biți pe secundă.
- Ratele de transfer pentru modemurile analogice erau de până la 56 Kb/s, adică aproximativ 7 KB/s, dacă modemul folosea compresie hardware (erau mai scumpe, dar mai bune). Ratele de transfer corespund valorilor porturilor seriale.
Lasa un raspuns