Los ARM utilizan JTAG o SWD, y los núcleos ARM de microcontroladores más comunes son las series Cortex, que están casi exclusivamente programadas y depuradas en SWD.
Tanto JTAG como SWD están bien definidos, y la mayoría de los proveedores describen cómo ingresar y manipular el Puerto de acceso de depuración (DAP), que es la forma en que usualmente se accede a los buses internos, CPU, memorias y periféricos. La interfaz física entre la PC que estás utilizando para desarrollar / depurar y el puerto JTAG / SWD de la micro es el adaptador.
Si bien es cierto que puede usar prácticamente cualquier cosa para conectarse al puerto y manipular la interfaz SWD, la mayoría de los proveedores tendrán su propio "sabor" de adaptador. El uso de la herramienta recomendada por el proveedor suele ser la ruta de menor resistencia, ya que el proveedor admitirá su adaptador, su software recomendado funcionará con su adaptador y las cosas deberían documentarse razonablemente bien, haciendo que las cosas sean lo más suaves posible.
Dicho esto, mi experiencia con las herramientas de proveedores es que son herramientas de calidad inferior, rápidas y sucias. A menudo tengo problemas con OpenOCD y las herramientas de los proveedores (principalmente ST-Link, Olimex, OpenSDA, etc.), especialmente con la depuración. Déjeme decirle: nada es más frustrante que finalmente lograr que un sistema incorporado muestre un error en un entorno de depuración y algo entre el software / ide del depurador (gdb, eclipse, etc.), OpenOCD, el el controlador del proveedor y el adaptador del proveedor se desincronizan, se interrumpe la conexión de depuración y se requiere reiniciar el hardware para volver a intentarlo. Esta inestabilidad frustrante del entorno abre la puerta a proveedores como Segger, que hacen sus propios adaptadores JTAG / SWD, brindan un excelente soporte y cuyas herramientas funcionan con muchos proveedores diferentes. Hay algo que decir para que una única interfaz unificada se use con prácticamente todos los dispositivos con los que trabaja.
Pasé mucho tiempo evitando J-Link debido al precio y porque preferí usar software abierto y herramientas de proveedores. Comencé a usar los adaptadores J-Link hace unos años en un proyecto que ya los tenía y no he mirado atrás. Sus herramientas son todas multiplataforma y su depurador independiente, Ozone, es increíble. Rara vez he tenido ese problema de "mitad de la inestabilidad de depuración" con OpenOCD y J-Link, y nunca lo he tenido con Ozone.
Segger también ha dado el paso bastante agradable de ofrecer una "actualización" gratuita a cualquier depurador integrado en un kit de desarrollo que convierte al depurador específico del proveedor en un J-Link con licencia. Por supuesto, esto es para que pruebes y utilices sus herramientas para que las compres para usarlas en tus propios tableros, pero es una táctica brillante. Más información aquí para ST-Link, siga sus enlaces "Modelos - > Otros J-Links" para otros proveedores. También tienen descuentos educativos y hardware J-Link "lite" que tiene un precio muy razonable (¿USD $ 50 creo?) Y está restringido a los núcleos del procesador Cortex.
Ahora Segger no es el único adaptador de terceros que existe: hay disponible un depurador de código abierto que apunta específicamente a gdb. Es la Black Magic Probe . Venden hardware, pero también tienen esquemas completos, diseños y software publicados bajo la licencia GPL. No he tenido la oportunidad de usar estos aún, pero estoy muy emocionado de probar este depurador. La implementación del protocolo GDB en el depurador debería mejorar considerablemente la estabilidad. Por supuesto, también existen otros sistemas de gama superior, como Lauterbach y los adaptadores AbDIron (BDI2000 y BDI3000) (ahora extintos). Las herramientas más sofisticadas / más caras generalmente están conectadas en red en lugar de estar conectadas directamente a la PC de depuración, ofrecen interfaces JTAG (mucho) más rápidas y muchas veces también tienen puertos de rastreo separados disponibles que, con MCU compatibles, le proporcionan un registro detallado de cada instrucción ejecutada la hora en que se ejecutó y el procesador interno se indica después de cada instrucción.
Siempre puedes implementar el tuyo también. He incorporado mis propias interfaces SWD en Cypress 'PSoC5LP para resolver un problema particular que me permitió programar una cadena completa de dispositivos a través de una conexión USB para la fabricación. Podría usar un puerto paralelo o un par de líneas GPIO para mover las señales también. Todo depende de lo que estés buscando.