Comunicación en serie en Netduino – Parte 1


La comunicación serie, en esencia, es un proceso de enviar datos un bit a la vez secuencialmente a través de un único canal de comunicación. Para enviar , por comunicación paralela los bits de cada uno de los datos se envían simultáneamente a través de diferentes canales de comunicación asociados con un puesto al lado del otro.

Este  concepto es muy amplio, al punto que se puede decir que la comunicación en serie se utiliza en todo la comunicación a larga distancia y la mayoría de aplicaciones comerciales, donde el costo de las dificultades de cable de sincronización y hacer la comunicación en paralelo lo hace más práctico.

Por otra parte, en las distancias cortas, también buses serie se están convirtiendo cada vez más comunes debido a las desventajas de los buses paralelos de interconexión (densidad) que se añaden para reducir el costo de implementación de información de serialización ,convirtiendo en una ruta de comunicación en serie sin de nuevo a los nuevos dispositivos integrados.

Además, incluso si la misma placa periférica entre el número de pines utilizados se reduce drásticamente, por ejemplo, para enviar un byte de 8 bits necesitaría ocho pines, mientras que la serie sólo uno sería suficiente.        A través de este concepto thernet, CAN, I2C, SPI son comunicaciones serie todos, sin embargo, cuando hablamos de la comunicación serie con un PC u otras tarjetas  recordamosel conector DB9 del antiguo protocolo RS-232/RS-485 utilizando el PC.

En realidad eso es correcto ,aunque la verdad es que el 90% de las veces nos enteramos de comunicación en serie coincide  con el estándar RS-232,pero esto no es estrictamente cierto  .   Sólo para conocer   otras opciones tenemos una lista de las comunicaciones seriales importantes que han considerado en la wikipedia:


       Desde esta lista podemos ver algunos protocolos ampliamente utilizados como SATA, que sustituye al cable paralelo tradicional que causaron muchos problemas en el viejo PC para comunicarse con unidades de disco duro, y el protocolo de Ethernet que no importa la transmisión de datos de forma debido a la cantidad de capas, pero es importante tener en cuenta que también es una comunicación serie.    

   Así, lo que nos interesa es el mismo «interfaz serial» o «puerto serie», conocido como RS-232. Si tiene algunos años  sin duda recuerda el momento en que el USB no era tan conocido y los dispositivos se conectaban en PC fabricados por IBM a través del puerto serie, conectores DB-9.(de hecho equipos más viejos utilizabanel puerto de comunicaciones serie para comunicarse con el PC, como los módems, ratones, teclados, algunas impresoras, escáneres y otros equipos de hardware. )

 

El estándar RS-232 se fijó inicialmente para una comunicación a través de 25 cables diferentes, puertos paralelo (denominado LPT1 puerto con un gran conector DB-25). IBM para utilizar el modelo para el diseño de su IBM-PC, redujo  solo 9 pins y esto se convirtió en el puerto serie estándar. El 25-pin (DB-25) estándar se conoce como paralelo porque era cerca de dos comunicaciones en serie que podrían operar en paralelo duplicando la velocidad.

 

  Una pregunta que viene a la mente es que ahora se aprovecha utilizar este estándar de comunicación viejo y obsoleto. La gran ventaja es que no hay una capa entre los datos que reciba a través del puerto de serie y el código, por lo que puede «ver» los datos que se transmiten a través del bus es ideal para la comunicación con dispositivos de baja velocidad.

     

Si ha realizado la actualización firmeware la Netduino recuerda el » controlador de la cámara del GPS «, que fue utilizado por SAM7X a comunicarse con el PC a través del puerto USB. Este controlador se hizo para emular un SAM7X serie para la comunicación USB, tanto es así que al iniciar SAM-BA ha seleccionado un USB emulado por software de carga. 

Esta emulación de serie de USB ha sido implementado por la mayoría de fabricantes de aplicaciones, pero simple como cargar la solución de software y depuración de código (ver Launchpad de Texas y los Super-Arduino microcontroladores).  

     Dicha comunicación fue hecha por la Asociación de Industrias Electrónicas (EIA), el estándar RS-232 (versión más conocida es la RS-232-C, pero eso no importa mucho) en el año 1969! Para más detalles, lea el artículo de la wikipedia . La Conexión     a pensar de que incluye 9 pines en el conector necesarios aunque la conexión en serie, por definición, requiere sólo una manera de enviar datos desde un dispositivo a otro.

En realidad ocurre, hay algunas consideraciones que hacer al respecto. Resalte la primera señal de referencia; tiene que haber una manera de interconectar las referencias entre los dos dispositivos  el voltaje de la señal entre GND (de referencia) y la vía que transporta la señal son iguales.

En segundo lugar, tiene la cuestión de la dirección, ya que es necesario que los dos dispositivos pueden enviar y recibir información a través de dos vias pues  un solo bus podría causar una colisión es entonces interesante utilizar uno de dos vías para el envío de otra para la recepción de los bits.    

   Con esto montar la conexión en serie de tres cables más básico que se ajuste en más 70% del desarrollo se implementa utilizndoa los pines 2, 3 y 5 de las aplicaciones de conectores DB9. Es importante destacar que las clavijas envían (llame TX) y recepción (RX llamarlo) entre los dos dispositivos que deseen conectarse deben ser cruzadas de manera que lo que se envía por la primera a través de su pin TX se recibe en el puerto del segundo RX       

Los otros pines están dedicados al control del flujo de datos aquí abajo tiene diagramas de conexiones RS-232 y la tabla indicando una breve descripción de la funcionalidad:


PIN
 DB-25
DB-9
Abreviatura
Descripción
Transmitir datos
2
3
TX
La transmisión de datos.
Recepción de datos
3
2
RX
Recibiendo datos.
Solicitud de envío
4
7
RTS
Enviar solicitud. Activo antes de cada transmisión.
Clear to Send
5
8
CTS
Borra enviar.
Conjunto de datos preparado
6
6
DSR
Indica que el módem o el periférico está listo
GND
7
5
SG
Tierra de señal común.
Detección de portadora
8
1
CD
Transporte de Detección
Terminal de datos preparado
20
4
DTR
DTR indica que el terminal está listo para iniciar el intercambio de información
Indicador de llamada
22
9
Rhode Island
Indica «zumbido»



       Ahora que entiende los pines, también es importante tener en cuenta que el modelo de comunicación utilizado por RS232 difiere de la utilizada por TTL (CMOS o 3,3 V disponible en Netduino), donde el nivel 1 se asocia con el nivel 0 a 5V y 0V  ,En el estándar RS232, el nivel «1» se asocia con una tensión de-3V a-18V, mientras que «0» se asocia con una tensión de 3V a 18V.Cualquier voltaje dentro de este rango se toma como «1» o «0». 

De  hecho ese es el motivo de usar el chip MAX232 para la comunicación en serie  ya  que  Netdiuno ofrece versión TTL (aunque el nivel de 3,3 V) a los pines D0 y D1 (COM1) y el control de flujo está en los pines 8 y 7, como se ve en la siguiente figura:





       Ahora que sabemos donde se encuentra el canal de RX y TX en el Netduino continúaremos  con la  explicación de por qué la comunicación no ha comentado nada aún sobre el mensaje. El mensaje representado por los bits de datos individuales que pueden ser encapsulados en mensajes de múltiples bits. 

Un byte (8 bits SET) es un ejemplo de una unidad de mensaje que puede viajar a través de un canal de comunicación digital y que es la implementación de hardware de la mayoría de los puertos serie: mensajes encapsulados en bytes de 8 bits de cada pocillo 8 bits recibieron un hardware ‘buffer’ acumula en un byte si envía varios que crea el denominado «marco», es decir, la unidad de mensaje de nivel superior. 

Estas múltiples niveles de encapsulación facilitan mensajes de reconocimiento e interconexiones de datos complejos en mensajes de texto en particular pues la     mayoría de los mensajes digitales son más que unos pocos bits en nuestro texto pequeño caso

¿Por qué no ser práctico o económico para transferir todos los bits de un mensaje de forma simultánea?Pues , el mensaje se rompe en trozos más pequeños y se transmite secuencialmente. La transmisión de bits en serie convierte el mensaje en un bit a la vez a través de un canal. Cada bit representa una porción del mensaje. Los bits individuales son luego reordenados el objetivo de componer el mensaje original.En general, un canal pasará sólo un bit a la vez.

 Características de Comunicación      

  El rendimiento se refiere a la velocidad a la que los datos se envían a través de un canal y se mide en las transiciones eléctricas por segundo. En el EIA, una transición por señal de bit se produce, por ejemplo, una velocidad en baudios de 9600 corresponde a una transferencia de datos de 9.600 por segundo, o un período de aproximadamente 104 ms (1/9600 s). Los valores típicos son Baudios:









Velocidad de transmisión 2400 4800 9600 19200 38400 57600 115200



        Es importante señalar que el mensaje viaja libremente en el canal sin embargo no todos los canales se puede utilizar, a continuación, que se llama » eficiencia del canal de comunicación «, que se define como el número de bits de información utilizable (datos) enviados a través del canal por segundo .

 No incluye los bits de sincronización, el formato, y la detección de errores que se puede agregar a la información antes de transmitir el mensaje, y siempre será, como máximo, igual a uno.         A la hora de identificar el inicio y el final de un marco de mensajes los datos serializados no se envían  de manera uniforme a través de un canal ininterrumpido y os paquetes de información regulares son enviados seguido de una pausa.

Los paquetes de datos binarios se envían de esa manera, y es responsabilidad del usuario (programador) crear su Protocolo de adaptación de la pausa o un tiempo de inicio validador carácter de marco . Así, los datos del circuito receptor deben saber el momento adecuado para leer los bits individuales de este canal y deben ser capaces de identificar aún más cuando empieza a enviar información y que el período de los bits ( Baude Rate ). Si se ve comprometido el conocimiento de este período se generen pérdidas en el mensaje.         

Tal comunicación es asíncrona  porque no dudaron en reportar cualquier cosa que el puesto como una señal de reloj, la información viaja a través de un solo canal y el receptor debe conocer reconocer el protocolo, es decir, tanto en el transmisor y el receptor se debe establecer de antemano de modo que se establece la comunicación. 

A través de un receptor de envio libre generará una señal interna del envío del primer mensaje de acuerdo con el tiempo establecido en la velocidad de transmisión para recibir los mensajes subsiguientes con el mismo tampón . En los datos de protocolo EIA se envía en paquetes pequeños de 10 o 11 bits, de los cuales 8 son el mensaje.Cuando el canal está inactivo, la señal correspondiente en el canal tiene un nivel alto. Un paquete de datos comienza siempre con un nivel lógico bajo se alcanza la señalización del receptor de una transmisión ha comenzado. Este iniciador poco se conoce en la literatura como el « bit de inicio «es también responsable de poner en marcha el temporizador interno advirtiendo al receptor que la transmisión se inició y que tendrá que verificar el canal a intervalos fijos para leer el mensaje.

Poco después de que el bit de inicio , 8 bits de datos de mensajes son enviados de acuerdo a lavelocidad de transmisión del transmisor. El proceso termina con el «bit de parada» ¿qué es exactamente un bit de paridad, la única protección de una pérdida en el mensaje.     

    El bit de paridad puede ser entendida como el número de bits ‘1 ‘de ser enviado en el byte de mensaje .Para validar el mensaje se añade al final de cada dígito binario de paridad de transmisión RS-232.. Bueno el hardware en sí ya es una validación de la detección de errores en las transmisiones, desde su cálculo es extremadamente simple (para la colocación en un chip dedicado) Hay dos tipos de código de paridad que se pueden configurar en la mayoría de los procesadores: la paridadpar y paridad impar . La paridad es incluso cuando el número de bits de valor de ‘1 ‘es incluso; de lo contrario, es extraño .  

 

Para  empezar podemos hacer que el Netduino transmitir una señal para TX y RX recibirlo por. Y lo hacemos mediante la colocación de un puente D0 entrantes y pins D1, como se muestra.













         Una vez hecho esto, el siguiente paso es comenzar a Visual Studio 2010 y crear el proyecto con este código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
using System;
using System.IO.Ports;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.NetduinoPlus;
using System.Text;
namespace NetduinoPlusSerialExample
{
    públic  class Program
    {
        static de serie SerialPort;
        estatic Led OutputPort;
        públic static void Principal ()
        {
            / / Inicializa el puerto serie es COM1 (usando D0 y D1)       
            serial = new SerialPort ( "COM1" , 56000,
                                    Parity.None, 8, StopBits.One);
            / / Abrir el puerto serie, así que podemos enviar y recibir datos       
            serial.Open ();
            / / Añadir una-controlador de eventos para el manejo de datos de entrada       
            serial.DataReceived + =
                New SerialDataReceivedEventHandler (serial_DataReceived);
                        
            Led = new OutputPort (Pins.ONBOARD_LED, falso );
            / / Enviar la primera fecha!
            byte [] msg = Encoding.UTF8.GetBytes ( "Netduino \ n" );
            serial.Write (msg, 0, msg.Length);
        }
        
        private estatic  vacío serial_DataReceived (Object sender,
            Y SerialDataReceivedEventArgs)
        {
            Thread.Sleep (100);
            int = BytesToRead serial.BytesToRead;
            / / Empieza a leer la corriente
            if  (BytesToRead> 0)
            {
                / / Obtener el tiempo de espera
                byte [] = tampón new byte [BytesToRead];
                Serial.read (tampón, 0, buffer.length);
                cadena = restoredText
                    new cadena (Encoding.UTF8.GetChars (buffer));
                Debug.Print (restoredText);
                / / Volver a enviar
                serial.Write (tampón, 0, buffer.length);
                Led.Write ( true );
            }
            
            Led.Write ( false );
        }
    }
}



         Si usted tiene un osciloscopio se puede ver fácilmente la señal que viaja por el puente :

 


        El resultado de esta broma es que el código envía una inicial de datos que es recibido por el propio Netduino para volver a presentar de nuevo los datos para el mismo bus COM1. Vacila un montón de cosas que se mencionan acerca de este código, a partir de la declaración de laSerialPort que se declara como estática . 


        Cuando se declara una variable como static significa que la variable pertenece a la clase en sí no da acceso a los modificadores externos y el valor de la preservación de acceso, en este caso también se hace además de la main (void) , la función estática recibir interrupción. 
        La construcción del puerto serial puede utilizar los constructores de SecretLabs como en el ejemplo de abajo, o utilizar como en el ejemplp  del código anterior con cadena y conocida valores numéricos.

1
serial = nuevo SerialPort (SerialPorts.COM1, 56000, Parity.None, 8, StopBits.One);


        Después de configurar el puerto serie está abierta para la comunicación y se le asigna un puerto para cada evento de señalización de datos está disponible para leer introducir una función para manejar el recibo; También puede comprobar si el puerto de datos para ser leído a través de un bucle infinito, pero esto es ineficiente en breve tratado de aportar algo al blog mejor y más práctico de usar. 
         Finalmente, se realiza el envío de una información texto. Tenga en cuenta que la funciónSerialPort.Write (byte []) recibe una matriz de bytes a ser enviado, esto significa que el texto no se puede enviar directamente y se requiere un paso de serialización. Este ajuste del texto en unamatriz de bytes se hace Encoding.UTF8.GetBytes () que pertenece a la System.Text.

   
          Una vez enviados los datos, si no vacila hay mal contacto en el cable que utilizó como unpuente , se recibirá el mensaje y la función serial_DataReceived () se llama, tenga en cuenta que al principio me hacer esperar al programa de 100ms ayuda para que el mensaje no llega «perforación». «! Netduino \ n»

Recuerda enviar Estamos enviando un marco serán llamados de 10 bytes y esta interrupción después de recibir la primera byte, el evento no se puede esperar de esta visión para depurar el código:


      Usted puede probar hasta 1ms, la respuesta sigue siendo perfecto. Finalmente, hacemos el proceso inverso descubrimos cuántos bytes están disponibles para la lectura después de 1 ms todos los bytes ya están en la memoria intermedia de recibir el mensaje se transfiere a la variable de tipo byte [] y de nuevo se necesita una conversión para que sea una cadena que luego es llevado inmediatamente a través de un constructor de cadena .




 El Netduino inicialmente no permitía la compatibilidad con USB libre comunicación, es decir, el USB ,por lo que sólo sirvió para hacer la carga y descarga de aplicaciones de software y no para otros usos . Esto a primera vista parece una decepción con el Netduino ,pero todo tiene solución, el final, que no era sólo interesado en el uso de un USB. En el foro Netduino tiene un post de Chris Walker hablando de ello, como usar el USB con un ejemplo de un dispositivo HID USB. 

El problema es que para que esto se hizo parte de cargar el software de depuración y tienen que migrar a UART serie.      

   Netduino Esto permite que el programa está incrustado en los pasadores de UART de E / S 1 y 2. Por supuesto, es interesante utilizar el MAX232 realizar la conversión con una tarjeta en sí,

     

 

 

En el  próximo post veremos algunos más pruebas y al final  un escudo  donde se vera programación de Netduino través del puerto serie