Avanti Indietro Indice

2. Modem e porte seriali: nozioni di base

Non occorre capire le fondamenta per usare ed installare un modem. Ma esserne a conoscenza può aiutare a capire cosa c'è che non va quando sorgono dei problemi. Dopo avere letto questa sezione, se si vuole approfondire, conviene consultare la sezione Come funzionano i modem in questo documento (ancora incompleta). Maggiori dettagli sulla porta seriale (inclusa la maggior parte di questa sezione) potrà essere trovata in Serial-HOWTO.

2.1 Il Modem converte da digitale ad analogico (e viceversa)

La maggior parte delle principali linee telefoniche sono già digitali ma le linee che portano presso la vostra abitazione (o posto di lavoro) sono generalmente analogiche, il che vuol dire che sono state predisposte per trasmettere un'onda elettrica che è l'esatta replica dell'onda sonora generata dalla vostra voce. Un'onda elettrica di questo tipo è chiamata "analogica". Se vista in un oscilloscopio sembra una curva sinusoidale di varia frequenza ed ampiezza. Un segnale digitale assume invece una forma squadrata. Ad esempio 3 v (volt) potrebbe essere un bit con valore 1, e 0 v potrebbe corrispondere ad un bit di valore 0. Per la maggior parte delle porte seriali (usate dai modem esterni) +12 v equivale ad un bit 0, e -12 v ad un bit 1 (alcune porte hanno valori di + o - 5 v).

Per inviare dati dal proprio computer attraverso la linea telefonica, il modem acquisisce il segnale digitale dal computer e lo converte in "analogico". Lo fa prima creando un'onda sinusoidale analogica, quindi "MODulandola". Visto che il risultato rappresenta comunque un dato digitale, potrebbe anche chiamarsi segnale digitale invece che analogico. Ma assomiglia ad un segnale analogico e quasi tutti lo chiamano analogico. Dall'altro capo della linea telefonica un altro modem "DEModula" questo segnale recuperando il segnale puro digitale originale. Mettete insieme l'inizio delle due parole sopracitate: "mod" e "dem" ed ecco l'origine della parola "modem" (ovviamente dovete togliere una delle due "d"). Un "modem" è quindi un MODulatore-DEModulatore. Per sapere cos'è la modulazione occorre consultare la sezione La modulazione in dettaglio.

2.2 Cos'è una porta seriale?

Introduzione alla seriale

La porta seriale è un dispositivo di I/O (Input/Output).

Visto che i modem hanno una porta seriale frapposta tra loro ed il computer, è necessario conoscere la porta seriale così come il modem.

La porta seriale è un dispositivo di IO (Inupt/Output). La maggior parte dei PC hanno due porte seriali. Ciascuna ha un connettore a 9 pin (talvolta a 25 pin) sul retro del computer. I programmi per computer possono inviare dati (byte) al pin di trasmissione (output) e ricevere dati dal pin di ricezione (input). Gli altri pin servono per controlli e per la messa a terra.

La porta seriale è molto di più che un semplice connettore. Essa converte i dati da paralleli a seriali e cambia la rappresentazione elettrica dei dati. All'interno del computer, i bit di dati scorrono parallelamente (usando diversi cavi allo stesso tempo). Il flusso seriale è uno scorrere di dati attraverso un solo cavo (così come sul pin di trasmissione e ricezione del connettore seriale). Perché la porta seriale possa creare un flusso di questo tipo, deve convertire i dati da paralleli (all'interno del PC) a seriali (e viceversa).

La maggior parte dell'elettronica della porta seriale si trova in un chip del computer (o in una sezione di un chip) conosciuto come UART. Per maggiori dettagli sugli UART consultare la sezione Cosa sono gli UART? In che modo influenzano le prestazioni? Ma potreste volere prima finire questa sezione, così da poter meglio capire come l'UART si pone all'interno dello schema globale delle cose.

Pin e cavi

I vecchi PC usavano connettori a 25 pin ma in realtà se ne usano circa 9, per cui la maggior parte dei connettori attuali sono di soli 9 pin. Ognuno dei quali è generalmente connesso ad un cavo. Oltre ai due cavi usati per ricevere e trasmettere i dati, un altro pin (cavo) è la messa a terra. Il voltaggio di ogni cavo è misurato in relazione al cavo di terra. Quindi il numero minimo di cavi da usare per una trasmissione bilaterale di dati è 3. È possibile anche fare a meno del segnale di terra ma con degradate prestazioni e talvolta con errori.

Ci sono altri cavi che servono per effettuare solo dei controlli (invio di segnali) e non per inviare byte. Tutti questi segnali potrebbero essere condivisi da un unico cavo, ma, al contrario, esiste un cavo separato dedicato ad ogni tipo di segnale. Alcuni (o tutti) questi cavi di controllo sono chiamati "linee di controllo del modem". Questi cavi di controllo sono impostati (on) a +12 volt oppure nello stato negativo (off) a -12 v. Uno di questi cavi segnala al computer di interrompere l'invio di dati attraverso la porta seriale. Al contrario, un altro cavo segnala al dispositivo connesso alla porta seriale di interrompere l'invio di dati al computer. Se il dispositivo connesso è un modem, altri cavi possono segnalare al modem di appendere la comunicazione o dire al computer che la connessione alla linea telefonica è stata effettuata o che il telefono sta squillando (cioè qualcuno sta tentando di connettersi). Vedere il Serial-HOWTO: Pinout and Signals per ulteriori dettagli

Il modem interno contiene una porta seriale

Per un modem interno non si sono connettori a 9 pin, ma il comportamento è quasi esattamente come se i cavi summenzionati esistessero. Invece di un segnale a 12 volt attraverso un cavo che porta lo stato di una linea di controllo del modem, il modem interno usa semplicemente un bit di stato nella propria memoria (un registro) per determinare lo stato di questo cavo "virtuale". La porta seriale dei modem interno è vista dal computer proprio come una porta seriale reale. Ivi inclusi anche i limiti di velocità che si possono impostare nelle porte seriali ordinarie come ad esempio 115200 bit per secondo. Sfortunatamente per Linux molti modem interni attuali non funzionano esattamente in questo modo ma invece usano un software MS Windows che li aiuta a svolgere il proprio compito. Essi non funzionaneranno sotto Linux. Vedere Modem interni da evitare: Winmodem, ecc. .

2.3 Indirizzi IO & IRQ

Poiché il computer deve comunicare con ciascuna porta seriale, il sistema operativo deve sapere che ciascuna porta seriale esiste e dove essa si trovi (il suo indirizzo di I/O). Esso deve anche conoscere quale cavo (numero di IRQ) deve usare la porta seriale per richiedere i servizi della CPU del PC. Quindi ogni dispositivo di porta seriale deve immagazzinare nella propria memoria non volatile sia l'indirizzo di I/O che il suo Interrupt reQuest Number: IRQ. Vedere Interrupt. Il bus PCI non funziona esattamente in questo modo visto che il bus PCI ha il suo proprio sistema di interrupt. Ma, visto che il BIOS che riconosce il PCI imposta i chip per mappare questi interrupt PCI come IRQ, praticamente si comporta proprio come descritto qui sopra ad eccezione del fatto che la condivisione degli interrupt è concessa (2 o più dispositivi possono usare lo stesso numero di IRQ).

Gli indirizzi I/O non sono uguali agli indirizzi di memoria. Quando un indirizzo I/O viene immesso nel bus indirizzi (address bus) del computer, un altro cavo viene elettrificato. Questo dice sia alla memoria principale di ignorare l'indirizzo, che a tutti i dispositivi che hanno indirizzi I/O (come le porte seriali) di controllare quell'indirizzo per vedere se combacia con quello del dispositivo. Se c'è corrispondenza, allora il dispositivo di I/O legge il dato sul bus dati.

2.4 Nome: ttyS0, ttyS1, ecc.

Le porte seriali sono etichettate come ttyS0, ttyS1, ecc. (generalmente corrispondenti a COM1, COM2, ecc. in DOS/Windows). La directory /dev ha un file speciale per ogni porta. Digitate "ls /dev/ttyS*" per vederli. Il fatto che possa esistere (ad esempio) un file ttyS3, non significa necessariamente che esista anche una corrispondente porta seriale fisica. Quale di questi nomi (ttyS0, ttyS1, ecc.) si riferisca a quale porta seriale viene determinato come segue. Il driver seriale (software) mantiene una tabella che mostra quale indirizzi I/O corrisponde a quale ttyS. Questa mappatura di nomi (tipo ttyS1) riferita a indirizzi I/O (e IRQ) può essere sia impostata che verificata dal comando "setserial". Vedere Cos'è Setserial. Questo non imposta gli indirizzi di IO e di IRQ sull'hardware stesso (che è impostato invece dai ponticelli o tramite software plug-and-play). Quindi quale porta fisica corrisponda ad esempio a ttyS1 dipende sia da quello che il driver della seriale pensa (tramite setserial) che da quello che è impostato nell'hardware. Se viene fatto un errore, la porta fisica potrebbe non corrispondere ad alcun nome (tipo ttyS2) e quindi con può essere usata. Vedere Dispositivi di porta seriale /dev/ttyS2, ecc. per ulteriori dettagli.

2.5 Interrupt

I byte entrano dalla linea telefonica al modem, sono converiti da analogico a digitale dal modem, quindi passati attraverso la porta seriale verso la loro destinazione all'interno del vostro computer. Quando la porta seriale riceve un certo numero di byte (potrebbe essere impostata a 1, 4, 8 o 14) nel suo buffer FIFO, segnala alla CPU di recuperarli inviando un segnale elettrico noto come interrupt su di certo cavo generalmente usato solo da quella porta. Quindi il FIFO attende un certo numero di byte quindi genera un interrupt.

Comunque questo interrupt potrebbe anche essere inviato se c'è un inaspettato ritardo mentre si attende l'arrivo del prossimo byte (conosciuto come timeout). Quindi se i byte sono ricevuti lentamente (come ad esempio se qualcuno digita su una tastiera di terminale) potrebbe essere generato un interrupt per ogni byte ricevuto. Per alcuni chip UART la regola è questa: se si possono ricevere 4 byte di seguito, ma nessuno di questi 4 arriva, allora la porta smette di aspettare altri byte ed invia un interrupt per recuperare i byte attualmente nel FIFO. Naturalmente, se il FIFO è vuoto, non verrà inviato nessun interrupt.

Ogni interrupt (all'interno del computer) è contraddistinto da un numero (IRQ) e la porta seriale deve sapere quale conduttore usare per inviare il segnale. Ad esempio, ttyS0 normalmente usa l'IRQ n. 4 conosciuto come IRQ4 (o IRQ 4). Una lista di questi interrupt ed altro può essere trovata in "man setserial" (cercare "Configuring Serial Ports"). Gli interrupt sono inviati ogniqualvolta la porta seriale necessiti di ricevere l'attenzione della CPU. È importante fare questo periodicamente poiché il buffer all'interno della porta seriale può trattenere solo 16 (1 nelle vecchie porte seriali) byte in arrivo. Se la CPU non riesce a rimuovere prontamente i byte ricevuti, poi non esiste più spazio libero per gli altri che stanno arrivando ed il piccolo buffer potrebbe sovraccaricarsi generando una perdita di byte di dati.

Per un modem esterno non c'è nessun modo (tipo controllo di flusso) per interrompere il flusso abbastanza rapidamente da prevenire questo. Per un modem interno il buffer FIFO a 16 byte si trova sulla stessa scheda ed un buon modem non ci andrà a scrivere se questo è pieno. Quindi un buon modem interno non sovraccaricherà il buffer da 16 byte ma potrebbe avere bisogno di usare Controllo di flusso da modem a modem per evitare che il modem stesso vada in sovraccarico. Questo rappresenta un vantaggio del modem interno rispetto ad un esterno.

Gli interrupt sono inviati anche quando la porta seriale ha appena mandato 16 dei suoi byte dal piccolo buffer di trasmissione verso il cavo esterno. In questo modo si fa spazio per 16 successivi byte da inviare all'esterno. L'interrupt notifica alla CPU il fatto così che si possano immettere ulteriori byte nel piccolo buffer di trasmissione per essere inviati. Ancora, quando una linea di controllo del modem cambia il proprio stato, viene inviato un interrupt. I buffer sopra menzionati sono tutti buffer hardware. La porta seriale ha anche degli ampi buffer nella memoria principale. Questo verrà spiegato più tardi.

Gli interrupt veicolano molte informazioni ma solo indirettamente. L'interrupt propriamente detto semplicemente dice ad un chip chiamato interrupt controller che una certa porta seriale necessita attenzione. L'interrupt controller poi invia il segnale alla CPU. La CPU attiva uno speciale programma per servire la porta seriale. Il programma viene chiamato routine di servizio di interrupt (interrupt service routine) che è parte del software del dispositivo seriale. Esso cerca di scoprire cosa è successo alla porta seriale, quindi svolge il compito come ad esempio il trasferimento di byte da (per) il buffer hardware della porta. Questo programma può facilmente scoprire cosa è accaduto poiché la porta seriale ha dei registri che puntano indirizzi di I/O conosciuti dal software del driver seriale. Questi registri contengono informazioni sullo stato della porta seriale. Il software legge questi registri e ispezionandone il contenuto, scopre cosa è accaduto, quindi esegue l'azione appropriata.

2.6 Compressione di dati (da parte del Modem)

Prima di continuare con le nozioni di base sulla porta seriale, occorre capire una certa cosa fatta dal modem: la compressione dei dati. In alcuni casi questo compito è in realtà svolto dal software gestito dalla CPU del computer ma, sfortunatamente, al momento attuale questo software funzione solamente in ambiente MS Windows. Ci occuperemo quindi del caso in cui il modem stesso esegue la compressione poiché questo è quello che accade così che il modem possa funzionare in ambiente Linux.

Per inviare dati più velocemente attraverso le linee telefoniche uno potrebbero comprimere (codificare) i dati usando uno schema di codifica personalizzato, che esso stesso dipende dai dati. Il dato codificato è più piccolo dell'originale (meno byte) e può essere inviato attraverso Internet in minore tempo. Questo processo è chiamato "compressione di dati".

Se scaricate file da Internet, essi sono probabilmente già compressi e non è possibile per il modem tentare di comprimerli ulteriormente. Il vostro modem può riconoscere che quelli che stanno transitando sono dati già compressi ed astenersi dal tentare di comprimerli ancora. Se state ricevendo dati che sono stati già compressi dall'altro modem, il vostro modem li decomprimerà e creerà molti più byte di quelli che sono stati spediti attraverso la linea telefonica. Quindi il flusso di dati dal vostro modem all'interno del vostro computer sarà maggiore di quello dalla linea telefonica verso di voi. Il rapporto di questo flusso viene chiamato rapporto di compressione. Rapporti di compressione superiori a 4 sono possibili, ma non molto probabili.

2.7 Correzione d'errore

Analogamente alla compressione dati, i modem potrebbero essere impostati per eseguire una correzione d'errore. Sebbene questo comporti un abbassamento del flusso di byte/secondo, il fatto che questa correzione d'errore tolga i bit di inizio e fine in realtà accresce il flusso di bit/secondo.

Per l'interfaccia della porta seriale con il mondo esterno, ogni byte composto da 8 bit ha 2 ulteriori bit aggiunti ad esso: un bit di inizio e un bit di stop. Senza la correzione di errore, questi bit di inizio e stop extra generalmente passano attraverso il modem verso la linea telefonica. Ma quando la correzione d'errore è attivata, questi bit extra sono eliminati e i byte di 8 bit sono composti in pacchetti. Questo è più efficiente e genera un flusso di bit/secondo più alto a dispetto del fatto che c'è qualche ulteriore byte aggiunto per l'intestazione dei pacchetti e per la correzione degli errori

2.8 Flusso di dati (velocità)

I dati (byte che rappresentano caratteri, immagini, ecc.) passano dal vostro computer al vostro modem, quindi all'esterno verso la linea telefonica (e viceversa). I rapporti di flusso (come ad esempio 56k (56000) bit/secondo) sono chiamati (non correttamente) "velocità". Ma quasi tutti dicono "velocità" al posto di "rapporto di flusso". Se non c'è compressione di dati il rapporto di flusso dal computer al modem dovrebbe essere circa lo stesso di quello che passa attraverso la linea telefonica.

In realtà ci sono due differenti velocità da considerare al vostro capo della linea telefonica.

Quando si compone un numero per connettersi ad un altro modem all'altro capo della linea telefonica, il vostro modem spesso visualizza un messaggio tipo "CONNECT 28800" oppure "CONNECT 115200". Cosa significa?. Bè, potrebbe essere sia la velocità DCE che quella DTE. Se essa è maggiore di quella delle specifiche del modem, allora deve trattarsi della velocità da-modem-a-computer (DTE). Questo è l'esempio di "CONNECT 115200" mostrato in precedenza. 28800 deve trattarsi invece della velocità da-modem-a-modem (DCE) visto che la porta seriale non ha questa velocità. Si potrebbe configurare il modem perché possa visualizzare entrambe le velocità. Alcuni modem visualizzano entrambe le velocità e visualizzano la velocità da modem-a-modem come (ad esempio): CARRIER 28800

Se avete un modem interno non vi aspettereste che ci sia un limite di velocità DTE dal vostro modem al vostro computer visto che il modem risiede all'interno del computer ed è praticamente una parte di esso. Ma questo limite c'è visto che il modem contiene al suo interno una porta seriale dedicata.

È importante capire che la velocità media è spesso minore di quella specificata, specialmente nella corta linea DTE (dal computer a modem). Attese (o tempi morti) generano una minore velocità media. Queste attese possono essere lunghe attese di forse un secondo a causa del Controllo di flusso. Di contro le attese possono anche essere molto brevi (tempi morti) corrispondenti a diversi micro-secondi che separano la fine di un byte e l'inizio dell'altro. In più, i modem passano a velocità inferiori se le condizioni della linea telefonica sono meno che perfette. Per una discussione riguardo quale sia la migliore velocità DTE vedere la sezione Quale velocità dovrei usare.

2.9 Controllo di flusso

Il controllo di flusso è la capacità di fermare il flusso dei byte in un cavo. Deve anche provvedere a fare ripartire il flusso senza perdere byte. Il controllo di flusso è necessario ai modem per consentire un salto nei rapporti di velocità.

Esempio di controllo di flusso

Ad esempio, consideriamo il caso in cui voi connettiate il vostro modem esterno a 36.6k tramite un corto cavo alla vostra porta seriale. Il modem invia e riceve byte attraverso la linea telefononica e 36.6k bit per secondo (bps). Non esegue nessuna compressione dati o correzione di errore. Voi avete impostato la velocità della porta seriale a 115,200 bit/secondo (bps) e state inviando dati dal vostro computer alla linea telefonica. Quindi il flusso dal vostro computer al vostro modem attraverso il corto cavo è di 115.2k bps. In ogni caso il flusso da modem verso la linea telefonica è solo di 33.6k. Visto che il flusso di dati (115.2k) sta entrando nel modem più velocemente del flusso di dati in uscita, il modem deve conservare il flusso in eccesso (115.2k -33.6k = 81.6k) in uno dei suoi buffer. Questo buffer andrebbe fatalmente in sovraccarico (esaurirebbe lo spazio a disposizione) a meno che il flusso a 115.2k venga interrotto.

Ecco che il controllo di flusso viene in soccorso. Quando il buffer del modem è quasi pieno, il modem invia un segnale di stop alla porta seriale. La porta seriale passa il segnale di stop al device driver ed il flusso a 115.2k bps viene fermato. Intanto il modem continua ad inviare dati a 33.6k bps recuperando i dati precedentemente accumulati nei suoi buffer. Visto che ora non sta arrivando niente nel buffer, il livello di byte inizia a diminuire. Quando non sono rimasti che pochi byte nel buffer, il modem invia un segnale di partenza alla porta seriale ed il flusso a 115.2k dal computer al modem riprende. In effetti, il controllo di flusso crea un rapporto di flusso medio (in questo caso 33.6k) che è significativamente inferiore a quello in entrata di 115.2k bps. Questo è il controllo di flusso "start-stop".

Quello di cui sopra è un semplice esempio di flusso di controllo per il flusso da computer al modem, ma esiste anche il controllo di flusso usato nella direzione opposta: dal modem (od altro dispositivo) al computer. Ogni direzione di flusso coinvolge 3 buffer: 1. quello nel modem 2. quello nel chip UART (detto FIFO) 3. nella memoria principale, gestito dal driver seriale. Il controllo di flusso protegge alcuni buffer dal rischio di sovraccarico. I piccoli buffer UART FIFO non sono protetti in questo modo ma dipendono invece da una veloce risposta agli interrupt che essi generano. FIFO significa "First In First Out" (il primo che entra è il primo che esce) e rappresenta quindi il modo in cui vengono gestiti i byte. Tutti e 3 i buffer usano la regola FIFO ma solo uno di essi si identifica anche con questo nome. Questa è l'essenza del controllo di flusso ma ci sono ancora ulteriori dettagli.

Non dovreste averne bisogno spesso del controllo di flusso nella direzione modem - PC. Per un complesso esempio di un caso dove è richiesto vedere "Complex Flow Control Example" nel Serial-HOWTO. Ma se non avete una velocità impostata tra il modem ed il computer (velocità della porta seriale) sufficientemente alta, allora dovrete rallentare il flusso dal modem al PC. Per fare questo dovete fermare l'incombente flusso di byte dalla linea telefonica. Il vostro modem deve dire all'altro modem di interrompere l'invio. Vedere Controllo di flusso da-modem-a-modem

Controllo di flusso hardware contro il controllo di flusso software

Se possibile, è meglio usare il flusso di controllo "hardware" che usa due linee dedicate di controllo del modem per inviare i segnali di "stop" e "start". I modem moderni usano quasi sempre il controllo di flusso hardware tra il modem e la porta seriale

Il controllo di flusso software usa le linee principali di ricezione e trasmissione per inviare i segnali di start e stop. Usa i caratteri di controllo ASCII DC1 (start) e DC3 (stop) a questo scopo. Essi sono semplicemente inseriti nel regolare flusso di dati. Il controllo di flusso software è non solo più lento nel reagire ma anche non consente l'invio di dati binari a meno di prendere speciali preacauzioni. Visto che è probabile che dati binari possano contenere DC1 e DC3, particolari accorgimenti devono essere presi per distinguere tra un DC3 che significa uno stop del controllo di flusso ed un DC3 che è parte del codice binario. La stessa cosa per DC1. Per far funzionare il controllo di flusso software con i dati binari occorre il supporto sia del modem (hardware) che del software.

Sintomi della mancanza di un controllo di flusso

Conoscere la teoria del controllo di flusso può essere di uso pratico. Per esempio usavo il mio modem per accedere ad Internet e tutto sembrava funzionare bene. Ma dopo alcuni mesi ho provato ad inviare un grosso file dal mio PC al ISP ottenenendo un grande numero di errori e ritrasmissioni (ma alla fine con Kermit sono riuscito a spedire un grosso file dopo parecchi tentativi). La ricezione nell'altra direzione (dal ISP a me) funzionava bene. Il problema risultò essere nella disabilitazione del controllo di flusso. Il buffer del mio modem si sovraccaricava durante l'invio di grossi file visto che nessun segnale di "stop" era mai inviato al computer per interrompere l'invio di dati al modem. Non c'erano problemi nella direzione dal modem al mio computer visto che la capacità (diciamo 115.2k) era sempre superiore del flusso attraverso la linea telefonica. La risoluzione consistette nell'abilitare il controllo di flusso inserendo un comando di attivazione del controllo di flusso nella stringa di inizializzazione del modem (avrebbe dovuto essere abilitato per default ma qualcosa era andato storto).

Controllo di flusso da-modem-a-modem

Questo è il controllo di flusso dei dati inviati attraverso le linee telefoniche tra due modem. In pratica, esso esiste solo quando è attivata la correzione di errori. In verità, anche senza correzione di errore è possibile attivare il controllo di flusso software tra modem, ma esso potrebbe interferire con l'invio di dati binari così non viene usato spesso.

2.10 Il percorso del flusso di dati; Buffer

Sebbene sia stato detto molto in proposito, tra cui il controllo di flusso, un paio di buffer FIFO a 16 byte nelle porte seriali (nell'hardware) ed un paio di buffer più ampi all'interno del modem, esistono ancora un altro paio di buffer. Essi sono degli ampi buffer (forse di 8k) nella memoria principale conosciuti anche come buffer di porta seriale. Quando un programma applicativo invia byte alla porta seriale (e al modem), essi vengono posti prima nel buffer di trasmissione della porta seriale nella memoria principale. La coppia consiste in questo buffer di trasmissione ed in quello di ricezione per il flusso di byte dalla parte opposta.

Il device driver seriale estrae diciamo 16 byte dal buffer di trasmissione, un byte alla volta e li mette nel buffer di trasmissione da 16 byte della porta seriale per la trasmissione. Una volta in questo buffer, non c'è modo di impedire che essi vengano trasmessi. Essi sono poi inviati al modem che dispone anch'esso di un buffer di dimensioni adeguate (diciamo 1k). Quando il device driver (che riceve ordini dal controllo di flusso) interrompe il flusso dei byte in uscita dal computer, interrompe in realtà il flusso di byte in uscita dall'ampio buffer di trasmissione della memoria principale. Anche dopo che questo è accaduto ed il flusso verso il modem è stato fermato, un programma applicativo può continuare a spedire i byte presenti nel buffer da 8k fino a che esso non si riempie.

Quando è pieno, il programma applicativo non può inviargli ulteriori byte (un istruzione di scrittura "write" in un blocco di programma in C) e l'applicazione si interrompe temporaneamente ed attende fino a che si libera un poco di spazio nel buffer. Quindi uno stop esercitato dal controllo di flusso è in definitiva capace di fermare il programma che sta inviando i byte. Anche se questo programma si interrompe il computer non smette necessariamente di elaborare. Potrebbe passare ad eseguire altri processi mentre sta aspettando causa lo stop del controllo di flusso. Quello suindicato era un esempio ultrasemplificato visto che un'altra alternativa è quella di fare sì che il programma applicativo stesso faccia qualcosa d'altro mentre sta attendendo di "scrivere"

2.11 I comandi del modem

I comandi al modem sono inviati ad esso dal programma di comunicazione attraverso lo stesso conduttore usato per inviare dati. I comandi sono delle brevi stringhe ASCII. Esempi sono "AT&K3" per abilitare il controllo di flusso hardware (RTS/CTS) tra il computer ed il modem; e "ATDT5393401" serve per comporre il numero 5393401. Notate che tutti i comandi sono prefissati da "AT". Alcuni comandi come l'attivazione del controllo di flusso aiutano a configurare il modem. Altri comandi come il comporre un numero fanno veramente qualcosa. Ci sono circa un centinaio di differenti possibili comandi. Quando il vostro software di comunicazione parte, lancia una stringa di inizializzazione "init string" composta da comandi al modem per configurarlo. Tutti i comandi sono inviati sulla linea ordinaria dei dati prima che il modem componga un numero (o riceva una chiamata).

Una volta che il modem è connesso ad un altro modem (modo on-line), tutto quello che il vostro computer manda al vostro modem va direttamente verso l'altro modem e non è interpretato dal modem come un comando. C'è un modo per "fuggire" da questo modo operativo e tornare al modo comandi dove tutto quello che viene inviato al modem viene interpretato come un comando. Il computer invia semplicemente "+++" con un determinato periodo di tempo prima e dopo questo "+++". Se lo spazio temporale è corretto, il modem si pone in modo comandi. Un altro modo di fare questo è tramite un segnale ad una certa linea di controllo del modem.

Ci sono svariate liste dei comandi modem su Internet. La sezione Siti Web ha dei collegamenti ad un paio di questi siti. Diversi modelli e marche di modem non usano esattemente lo stesso gruppo di comandi. Così quello che va bene per un modem potrebbe non andare bene per un altro. Alcuni comandi comuni (non si garantisce che funzionino su tutti i modem) sono elencati in questo HOWTO nella sezione Altri comandi modem

2.12 Software seriale: il modulo del device driver

Il device driver per la porta seriale è il software che fa funzionare la porta seriale. Viene ora fornito come modulo seriale. Questo modulo viene generalmente caricato automaticamente se necessario. Il kernel 2.2+ farà questo. Nei kernel precedenti, dovete avere kerneld in esecuzione per far sì che i moduli si autocaricano su richiesta. Altrimenti il modulo seriale necessita di essere esplicitamente elencato in etc/modules. Prima che i moduli divenissero popolari con Linux, il driver seriale era generalmente costruito all'interno del kernel. Se esso è ancora incorporato nel kernel (potreste avere selezionato questa opzione quando avete compilato il kernel) non lasciate che il modulo seriale venga caricato. Se lo fate finirete con avere due driver, viene rilevato che non potete usare le porte seriali ed otterrete un errore "I/O error" se tentate di aprirle.

Quando il modulo seriale è caricato, visualizza un messaggio sullo schemo circa l'esistenza di porte seriali (spesso mostrando un IRQ errato). Ma una volta che il modulo è usato da setserial per dire al device driver qual'è l'IRQ corretto, allora dovreste vedere una seconda schermata con il corretto IRQ, ecc. Vedere Cos'è Setserial per ulteriori informazioni su setserial.

Si potrebbe modificare il driver modificando il codice sorgente del kernel. La maggior parte del driver seriale si trova nel file serial.c. Per dettagli inerenti la scrittura di programmi per la porta seriale vedere Serial-Programming-HOWTO (attualmente in fase di revisione da parte di Vern Hoxie).


Avanti Indietro Indice