¿Cómo puedo obtener 1-10MB / s de datos de depuración hacia y desde una placa de desarrollo?

2

Aquí está el problema fundamental que tengo: estoy mirando una placa de desarrollo para, digamos, un microprocesador o DSP de TI / AD / Microchip. Esto es mucho antes de un diseño de producto completo; Estamos hablando de trabajo de prueba de concepto aquí. Quiero enviar datos desde una PC para que sean procesados por mi firmware, o hacer que mi firmware envíe datos a mi PC. Y quiero que la tasa sea del orden de 1-10MB / s.

Hace más de 15 años, 1-10MB / s habría sido bastante nicho. kB / s habría sido más habitual, y la placa de desarrollo tendría un conector DB9. Podría haber conectado un cable serie entre la placa dev y mi PC, tal vez con un convertidor de USB a serie, y leer y escribir en COMX o /dev/ttySX .

Sin embargo, este esquema tiene una serie de limitaciones que ahora están empezando a aparecer:

  • Quiero MB / s, no kB / s.
  • La tasa máxima absoluta de UART que un dispositivo de 100MHz podría administrar es de solo 0.7 MB / s. Por otro lado, SPI permite hasta 3-4 MB / s.
  • Es increíblemente raro que las PC vengan con puertos serie ahora, por lo que se necesitan adaptadores especializados para interactuar con una PC, por ejemplo. Cable USB a serie.

Pero estoy perplejo por lo que podría usar para reemplazar el antiguo esquema serial. El contexto principal de esta pregunta es el envío de datos de depuración serializados entre las placas de desarrollo del proveedor y una PC antes de que se finalice el diseño, por lo que cualquier cosa que requiera dispositivos secundarios, por ejemplo. Bluetooth no es super útil. Los µPs con los que trabajo normalmente están en el ámbito de MSP430 de TI, PIC32M * de Microchip y DSP de bajo consumo como TI C55x o C674. Sus tableros de desarrollo normalmente vienen con encabezados conectados a periféricos SPI / I2C / UART.

Ethernet requeriría la implementación completa de una pila de red, lo que no es realmente práctico en los DSP o µP restringidos con los que trabajo a menudo. Además, la mayoría de las PC solo tienen un puerto Ethernet, si es que lo tienen, por lo que no podrá usarlo para redes cableadas.

El USB conectado a tierra requiere obtener un ID de proveedor de un tercero, y reinventar todo tipo de ruedas en el nivel del controlador y del software solo para obtener datos de un dispositivo a otro.

Idealmente, me gustaría poder volcar bytes en un registro periférico en mi µP y vaciarlo con Python en la PC o viceversa, usar un cable que la mayoría de los departamentos de TI tendrían, y obtener 1-10 MB / s. Un bono sería no tener que sondear todos los puertos disponibles de cualquier tipo para encontrar el dispositivo en una PC. ¿Es esto posible?

    
pregunta detly

3 respuestas

2

Se supone que el sucesor moderno de un puerto de comunicación RS232 es USB. Sin embargo, las personas deben darse cuenta de que, si se utiliza para fines de depuración, debe contar con un soporte serio de arquitectura a nivel del sistema, el puerto debe tener algunos puentes internos para los registros y las memorias de uP.

A partir de 2002, Intel ha intentado implementar funciones de depuración obligatorias en el controlador EHCI de estándar abierto. Incluso hubo algún apoyo para él , de Linux y del lado de Microsoft, aunque, como entiendo, todo el esfuerzo tuvo un éxito limitado.

Con la llegada de USB 3, el esfuerzo resucitó, consulte Especificaciones de la clase de depuración de USB 3.1 .

El conector Tipo-C más reciente también define " Modo de accesorio de depuración ", consulte pp 59-60. Creo que hay varias versiones auxiliares en los trabajos sobre cómo usar los pines de forma alternativa, incluida la funcionalidad JTAG.

Sin embargo, el viejo RS232 no se va y se niega a morir. La razón es que la mayoría de uP y mini-OS confían en los venerables puertos COM para muchas funciones, y todos los sabores de Linux / Android tienen un soporte de depuración incorporado en el kernel. Y el circuito / puerto UART es bastante simple de implementar en silicio con muy pocos recursos. Sin embargo, en lugar de colocar conectores DB-9 voluminosos (que a veces son más grandes que el dispositivo en sí), las personas están incorporando un convertidor UART-USB a bordo (generalmente del tipo FTDI), y usan los conectores USB uA / B en miniatura para conectarlos a depure el host, emule el puerto COM y use el software de terminal estándar para acceder a él.

    
respondido por el Ale..chenski
1

Supongo que está hablando de una interfaz UART o serie, RS232 es un estándar de pin y eléctrico (simplemente define qué niveles de voltaje son uno y cero pero no los cambios de estado, protocolos, velocidades, etc.).

No está seguro de dónde obtuvo el 160000, puede ir fácilmente mucho más rápido que eso con una parte barata de ftdi. Además de jtag, swd, spi, i2c, etc. rápidos con la misma parte (una con mpsse). (o ruede su propio protocolo).

Depende de su definición de PC, las computadoras de escritorio están muertas, las computadoras portátiles se están muriendo (todas son reemplazadas por tabletas y teléfonos), las PC primarias restantes son servidores y típicamente tienen al menos un puerto serie, ya que esa es la pantalla principal interfaz para el arranque / depuración, etc. Pero sé lo que quieres decir.

Debido a la falta general de necesidad de RS232, usb to uart funciona bien para una depuración primaria desde una PC host / desarrollo contra una placa / sistema / chip incrustado de destino.

Para los que mencionó, puede ejecutar al menos algunos de ellos con una solución USB uart, por lo que la MCU es el cuello de botella allí. De las partes disponibles, es más probable que encuentre otras con uarts que con usb, ciertamente no con Ethernet. Su interfaz número uno es uart, las partes ftdi y, probablemente, otras facilitan el acceso a los protocolos estandarizados o específicos del proveedor, o los pines de la correa ondulada para que pueda usar la uart para programar la parte en el circuito. Estos varían desde protocolos personalizados (avr xmega), hasta stock spi mientras se reinicia (avr si recuerdo bien), uart (msp430, una serie de otras marcas / modelos), jtag, swd para el córtex-ms, todo con un simple ftdi breakout board.

uart sigue dominando y generalmente tiene la huella más ligera en el gestor de arranque. Ethernet, como usted señaló, requiere una pila, incluso hacer trampa con UDP, aún necesita mucho más código que comprobar que el búfer de recepción no está vacío y leer un byte ya procesado en un periférico uart. usb, si el mcu tiene se puede hacer principalmente en hardware, por lo que hay algo que es algo liviano, pero a menudo todavía tiene que enumerarse y responder al host cuando se lo solicita, posiblemente más trabajo que una pila de udp descargada ( Los que he usado es otro que el EZ-USB 8051).

Puedes llegar a un MB / s con uart en algunos dispositivos, pero más rápido de lo que vas a tener que construir una pila USB o Ethernet o personalizada.

    
respondido por el old_timer
0

Si la MCU es una Cortex-M, puede mirar el J-Trace o J-Link de Segger y usarlo con RTT. RTT es un tipo de terminal sobre JTAG. La MCU coloca los datos en un búfer de RAM y el depurador los sondea. Anuncian una velocidad de 3 MB / s.

    
respondido por el filo

Lea otras preguntas en las etiquetas