ARM SoC UART interacción con UART periférico

0

Lamento no haber podido encontrar esta respuesta en este sitio o en este sitio web. Tengo un ARM SoC (host) que necesita comunicarse con el periférico que tiene un controlador ARM Micro mediante UART. Linux se ejecuta sobre ARM SoC. A continuación están mis preguntas.

  1. Desde el lado del host, si quiero escribir o leer datos, entiendo que tenemos que hacer: (Los pasos a continuación son de la "Guía de programación en serie para sistemas operativos POSIX": Michael R. Sweet) fd = abierto ("/ dev / ttyS0", O_RDWR | O_NOCTTY | O_NDELAY); fcntl (fd, F_SETFL, FNDELAY); Modo crudo hay otras cosas que entiendo

    Debajo están las cosas que no entiendo: 1.1 ¿También necesito configurar el puerto serie del host en el espacio de usuario? Por ejemplo, la configuración de la velocidad en baudios, el tamaño de los caracteres, la comprobación de paridad, el control del flujo del hardware, etc., o el controlador de Linux se encargará de ello. No estoy seguro de dónde se debe manejar, el espacio del usuario o el espacio del controlador o U-Boot. 1.2 Además, quiero saber dónde se codificarán las cosas relacionadas con los registros ARM UART de SoC, ¿está en U-Boot o en algún otro lugar? En AVR, generalmente accedemos directamente a los registros.

  2. Ahora, el periférico del controlador ARM es de un proveedor. ¿Necesitamos escribir un controlador para ello o el proveedor lo proporcionará y tenemos que integrarlo? En caso afirmativo, explíquelo a un nivel muy alto sobre cómo debemos integrarlo. Presencia de código en U-Boot, espacio del controlador.

Una cosa más, entiendo que el código que usamos para controlar los periféricos se llama código de controlador y está presente en el espacio del kernel de Linux del host. ¿Cuál es el nombre del código para acceder a los registros UART de SoC (host) o cualquier otro registro en SoC? donde esta presente U-Boot, espacio del controlador o en otro lugar.

Entiendo que los expertos que están respondiendo esta pregunta habrían obtenido este conocimiento de algunos documentos, leer el código y hacer las cosas de manera práctica. Sería genial si puedo obtener sugerencias para los tres, pero incluso si obtengo los documentos de referencia, me sentiré feliz.

    
pregunta emb

1 respuesta

0
  1. Sí, necesita configurar la velocidad en baudios, la paridad, etc. por su cuenta. Pero no está tan mal si está en Linux o BSD (mencionó POSIX), no tiene que codificar todo esto en C. Puede usar lenguajes más abstractos como Python, que tienen bibliotecas para facilitar las interacciones de UART. Así: enlace También puede hacer todo esto en el espacio de usuario, no es necesario hacerlo en U-Boot y los parámetros se pueden cambiar cuando lo desee con diferentes programas de espacio de usuario.

  2. Depende del proveedor, la mayoría de los grandes tendrán un soporte de kernel Linux bastante decente para todos sus periféricos. Linux tiene sus propias bibliotecas y abstracciones para periféricos comunes como GPIO, UART, I2C, SPI, etc. Por lo tanto, el proveedor necesita escribir controladores para esas interfaces comunes y luego puede usarlos de manera idéntica, sin tener que preocuparse por el chip subyacente. Ese es el objetivo de todos modos. Si tiene que escribir el suyo, será difícil a menos que conozca su kernel bastante bien. Probablemente sea mejor pedir ayuda a alguien que lo haya hecho antes.

La mejor de las suertes.

    
respondido por el nemik

Lea otras preguntas en las etiquetas