Cómo funcionan los controladores de dispositivo

1

¿Alguien puede explicar cómo funcionan los controladores de dispositivo? He visto a Arduino y otras placas de desarrollo comunicándose con el puerto USB de la PC con la ayuda de un chip FTDI. Se puede hacer que esto funcione después de instalar el controlador del dispositivo. Entonces, ¿cuál es el papel del chip FTDI y el controlador aquí? ¿Por qué no podemos hacer este trabajo sin un chip FTDI, conectando directamente la MCU de Atmel (solo he trabajado con las MCU de AVR) y teniendo el controlador adecuado?

    
pregunta Bishal

2 respuestas

4

El chip FTDI se conecta en un lado a través de una interfaz USB a una PC, y en el otro presenta una interfaz UART al microcontrolador; a este último parece como si un cable RS232 se hubiera conectado al dispositivo a través de un cambiador de nivel RS232-UART.

Esto tiene dos ventajas. En el lado de la PC, la interfaz USB se convierte en un puerto COM virtual, lo que facilita que los programas se comuniquen con ella, ya que no necesitan pasar por un controlador USB especial, solo tienen que hablar con el puerto COM, y, por lo tanto, ni siquiera son conscientes de que haya un puerto USB involucrado y no es necesario tener un código para hablar con un controlador USB especial.

Normalmente no es necesario instalar el controlador para el chip FTDI, ya que hay tantos dispositivos que utilizan variaciones del chip FTDI, las versiones más recientes de Windows y Linux vienen con un controlador USB / FTDI ya incorporado. .

En el lado del microcontrolador, lo mismo es cierto: en lugar de tener que escribir software para que funcione como un dispositivo USB (suponiendo que el microcontrolador tenga un puerto USB), el programa de firmware del microcontrolador solo tiene que lidiar con la interfaz El UART que es mucho más fácil. Entonces, en ambos extremos, la PC y el microcontrolador, el software cree que hay un cable RS232 entre la PC y la placa, y no está consciente de que haya un cable USB.

Si no se usa un chip FTDI y el microcontrolador tiene una interfaz USB, entonces se puede conectar un cable USB directamente entre el cable del microcontrolador y la PC. Luego se puede escribir el firmware en el microcontrolador para presentar una interfaz de "dispositivo" USB a la PC. (Esto contrasta con la interfaz USB "host", que se usaría, por ejemplo, si un dispositivo USB, como una tarjeta de memoria o un mouse, estuviera conectado al microcontrolador).

Si es posible, los programadores que escriben este tipo de firmware intentan utilizar la interfaz HID (dispositivo de interfaz humana), que inicialmente estaba destinada a ser utilizada por dispositivos como teclados y ratones. Sin embargo, dado que el controlador USB HID siempre se incluye en el sistema operativo (de lo contrario, ¡su teclado no funcionaría al arrancar!), Nunca necesita cargarse, y es relativamente fácil escribir software en la PC para interactuar con él.

La situación más difícil es cuando se necesita un protocolo USB especial. Esto hace la vida mucho más complicada para los implementadores de firmware (lado del microcontrolador) y software (lado de la PC). Cuando el dispositivo USB está enchufado y enumerado, el sistema operativo (Windows o Linux, etc.) no podrá encontrar un controlador incorporado para él. Por lo tanto, el software para el dispositivo debe incluir un controlador USB especial, que el usuario deberá instalar antes de usar el dispositivo.

    
respondido por el tcrosley
2

Esto se debe a que las computadoras domésticas usan ciertos estándares para comunicarse. Existe el puerto serie, el puerto paralelo (obsoleto), cualquier versión de USB, Ethernet, tal vez la fibra óptica, (e) sata, etc.

Un microcontrolador usualmente usa diferentes estándares como I2C o SPI, la única interfaz común es el enlace serial (RS232).

Cada una de estas interfaces tiene su ventaja y su desventaja: la serie es fácil de implementar pero lenta, Ethernet es buena para cables muy largos, sata se usa para dispositivos de almacenamiento masivo y es muy rápida ... Cada interfaz generalmente necesita algo de dedicados hardware, y es por eso que su microcontrolador no tiene un puerto sata: eso es algo que pocos diseñadores usarían, por lo que no vale la pena ponerlo en cada chip, lo que aumenta los costos.

¡Pero, por supuesto, puede emular hardware a través del software! Eso es bastante complicado, probablemente necesitarías un poco de cambio de nivel fuera de tu chip porque generalmente los voltajes difieren de una interfaz a otra, pero puedes. Entonces, si su chip no tiene HW dedicado I2C, puede escribir su propio código y emularlo. Eso, por supuesto, utiliza una gran cantidad de CPU, y a veces eso no es posible. El chip FTDI hace este trabajo por usted: se ocupa de los niveles de señal (usb es un enlace LVDS) y probablemente proporciona algunos marcos o lo que sea. Y probablemente tiene una interfaz I2C. Usar I2C es mucho más fácil que con USB. Por el lado del microcontrolador, solo tiene que hablar con el chip FTDI a la manera I2C, su micro probablemente tiene una interfaz I2C HW y está listo para comenzar.

Por el lado de la computadora, el problema es que este chip FTDI no es un dispositivo estándar como mouse o gamepad, probablemente puede emular varios dispositivos y puedes elegir cuál diciéndolo a través de I2C. El punto es que necesita algunos drivers. Un controlador es una pieza de software que se interconecta con una pieza de hardware: en este caso, el nivel es un poco más: el lado de la computadora del controlador USB tiene su propio controlador, pero la manera de comunicarse con el chip FTDI es personalizada. Tal vez necesite algunos paquetes extraños al principio para inicializarse correctamente, tal vez tenga una velocidad máxima que sea mucho más baja de lo que el estándar USB considera ... Piense en el controlador como una pieza de código que el lado del software expone dos búferes: data_in y data_out , mientras que el lado del hardware se ocupa de cómo enviar estos buffers a su dispositivo personalizado.

Es como lo que está haciendo en el lado del microcontrolador: inicia la comunicación I2C, configura algunos registros, comienza a enviar datos.

Podrías hacer el trabajo sin ningún chip de interfaz, como sugieres, pero eso sería mucho más difícil. Tendría que encontrar una manera de conectarse a una interfaz de bajo nivel de su PC, eso significa encontrar un puerto I2C gratuito, si lo hubiera, y conectar su MCU allí. O otra interfaz de bajo nivel, por supuesto. Usted está intercambiando toneladas de velocidad, tiempo, confiabilidad, reutilización por algunos centavos ahorrados en un FTDI.

    
respondido por el Vladimir Cravero

Lea otras preguntas en las etiquetas