¿Raspberry Pi como programador JTAG?

6

Aparte del problema obviamente no trivial de escribir el software, ¿hay alguna razón práctica por la que el puerto GPIO de una Raspberry Pi no pueda usarse como programador JTAG? Lo pregunto porque estoy haciendo un trabajo de pasatiempo al conectar un CPLD a mi Raspberry Pi y sería conveniente poder programarlo directamente en lugar de usar un dispositivo JTAG y una computadora independientes.

¿Hay algún problema con los voltajes, tiempos, etc.?

    
pregunta John Burton

3 respuestas

5

OpenOCD tiene un controlador sysfsgpio genérico y ha tenido un controlador Raspberry Pi BCM2835 por bastante tiempo , y AFAICT, la velocidad es buena (por ejemplo, el parpadeo STM32F1 está limitado por la velocidad de su flash): se pueden obtener fácilmente unos 4 MHz y para muchos casos no se necesita un circuito externo. También hay soporte para SWD , pero aún no está en la parte superior.

Debes clonar el Git HEAD actual y compilarlo de forma nativa con --enable-bcm2835gpio , y luego usar config de interface/raspberrypi-native.cfg .

Consulte el manual oficial de README y Texinfo para obtener información específica.

Con respecto a la parte de hardware de la pregunta: si el voltaje objetivo es igual o muy cercano a 3.3 V, puede conectar los pines de la Raspberry Pi directamente a la interfaz de destino, de lo contrario, podría (no siempre es necesario, ya que muchos microcontroladores modernos tienen Los 5 pines "tolerantes a V", por lo que se pueden conectar a fuentes con voltajes más altos que sus V cc sin ningún daño, ¡pero compruebe la documentación primero!) Es necesario agregar un búfer de conversión de voltaje adecuado.

Para proporcionar una mejor adaptación de impedancia, se recomienda tener resistores en serie de 47-100 ohmios en cada línea de señal, cerca del conector Raspberry Pi. Para obtener más detalles, consulte la explicación detallada de Michael Schwingen, Re: Capacidad de la unidad de alto rendimiento en Raspberry Pi .

    
respondido por el Paul Fertser
1

Una cosa que consideraría es que incluso si la E / S de bit banging es lenta, es posible que pueda programar (lentamente) un CPLD que luego podría usarse para realizar otras operaciones mucho más rápidamente. Por ejemplo, si tenía diez pines de salida D0-D9 que estaban todos en el mismo puerto de E / S, junto con un pin de entrada, podría usar D9 como entrada de "disparador", donde un cambio de estado (ascendente o descendente) después de una breve demora (el tiempo suficiente para que todos los otros pines se acomoden), provocaría que el CPLD haga algo. D8 podría seleccionar si se suponía que el "algo" era "generar los datos en D0-D7" o algo más. El D4-D7 podría entonces seleccionar una de las 16 operaciones a realizar (habilitar / deshabilitar un modo donde las salidas simplemente siguen los estados de D0-D2, configurar un modo de aceleración de exploración de límites donde cada bit suministrado por el ARM marcará un grupo) de tres bits, que pueden ser fijos alto, bajo fijo o seguir el estado ARM, etc.) No estoy seguro de qué tipo de tiempo normalmente esperaría obtener de la E / S de la Raspberry Pi, pero incluso una relativamente pequeña CPLD podría ser capaz de acelerar las cosas en gran medida.

    
respondido por el supercat
0

Puede crear un pequeño circuito de interfaz que lea los datos que llegan a través de los pines GPIO y los reenvíe con los niveles de voltaje, temporización, etc. Es posible que deba cambiar el voltaje si la Raspberry Pi está funcionando a un voltaje menor / más alto que el CPLD, pero no tengo idea del momento.

    
respondido por el Saad

Lea otras preguntas en las etiquetas