Entendiendo a los programadores para microcontroladores

2

Estoy confundido acerca del concepto de un programador para los microcontroladores. Espero que alguien pueda aclarar.

Cuando uso un Arduino, puedo usar otro Arduino para programarlo a través de los pines SPI. Entiendo que esto significa que los pines SPI se comportan como pines de programación que utilizan un determinado protocolo de programación cuando se cumplen ciertas condiciones que ponen al microcontrolador en el modo de programación. Entonces, el programador no es más que un hardware que sabe hablar el protocolo de programación.

Cuando leo sobre los procesadores ARM, a menudo leo que necesito un Segger JLink. De lo contrario no puedo programarlo. Los kits de desarrollo a menudo tienen un chip Segger en el tablero. Por lo tanto, este es un programador para chips ARM. Si es así, ¿por qué un Arduino, o algún otro hardware de propósito general, tampoco puede hablar el protocolo de programación para ARM?

Además, ¿qué tiene de especial los programadores que tiene que ser hardware y no solo software siempre que los pines del microcontrolador estén bien conectados y el software pueda controlar esos pines? Si este es realmente el caso, ¿por qué los productos de Segger son tan caros? ¿Cuál es su salsa secreta que parece darles algún tipo de monopolio?

Si es importante para esta discusión, el microcontrolador específico en el que estoy pensando es el nRF51822 con un ARM Cortex M0.

    
pregunta Ana

3 respuestas

4

No hay salsa mágica, solo se trata de relojes y líneas de datos que suben y bajan de voltaje en la sucesión correcta. A veces, los voltajes de programación son un poco más altos que los voltajes normales de la interfaz, pero eso no es difícil de reproducir. Como notaste, tu arduino también puede hacer eso, si sabes cómo funciona el protocolo. Y ahí es donde radica el problema.

Por un lado, cuanto más complejo sea el microcontrolador, más complejo será el protocolo para programarlo. Tendrá modos para inicializar diferentes formas de memorias, establecer parámetros de configuración que controlen el comportamiento fundamental del controlador (por ejemplo, los "fusibles" de Atmel que pueden apagar el SPI o deshabilitar el oscilador interno de la fuente del reloj). El protocolo sobre cómo hacer esto es de muy bajo nivel y, por lo general, no es de interés para el desarrollador que desea usar el controlador para su propio producto. Así que, naturalmente, es el creador del microcontrolador que proporciona una capa de abstracción entre el controlador y la PC, lo que facilita la programación del controlador.

El otro aspecto es el monopolio para obtener ganancias al vender el hardware y el software necesarios para programar un determinado controlador. La mayoría de las empresas no están interesadas en facilitar la programación de sus dispositivos con programadores externos o de bricolaje. No porque sean malvados, sino simplemente porque su política de precios es hacer que el controlador sea barato, pero la periferia necesaria para desarrollarlo es costoso, lo que se traduce en un menor costo por dispositivo. Por lo tanto, algunas empresas incluso pueden hacer un esfuerzo adicional y agregar mecanismos de seguridad y protocolos a prueba de falsificaciones. Un ejemplo simple sería un algoritmo de generación de clave secreta y un algoritmo de verificación de clave, en el programador y el controlador, respectivamente. Cuando comienza la programación, realizan un apretón de manos con autenticación de desafío-respuesta. Así que incluso si huele el protocolo y vuelve a reproducir los bits exactos en las líneas, no funcionará porque el controlador ofrecerá aleatoriamente un desafío diferente en el apretón de manos, y su programador de loros producirá una respuesta incorrecta, diciéndole al controlador que es No hablar con el programador original.

    
respondido por el DerManu
1

No es ese blanco y negro. Entre la familia AVR, tienen más de un protocolo en serie, uno es más doloroso que el otro. Los AVR son agradables ya que tienes el chip en reinicio, así que si tu programa hace algo estúpido como reutilizar los pines de programación (sí, se ha hecho allí más de una vez) y el chip está diseñado para que no esté reiniciado, es posible que no estés capaz de reprogramarlo, pero a veces hay otras soluciones.

Se trata del proveedor de chips y de las funciones que desean colocar a qué costo. Una parte de 8 pines con múltiples pines dedicados a la programación sería una muy mala idea, incluso un doble propósito podría ser malo, ya que el usuario podría no ser capaz de diseñar su placa para usar esos pines y hacer que sea programable en el campo. Si tienes suficientes alfileres, podrías ir tan lejos como para dedicarlos si no quieres muxearlos. Depende del proveedor / diseñador del chip decidir qué protocolo o qué conjunto desean utilizar. Como ya se mencionó, algunas veces quieren hacerlo, así que tienes que comprar sus herramientas porque mantienen el protocolo en secreto y de propiedad. Pueden proporcionar múltiples soluciones para que sea más fácil para el usuario.

Algunos, muchos en estos días, permiten la autoprogramación, el mcu puede programar su propio flash desde el código que se ejecuta en el mcu. Así que eso abre la puerta a los bootloaders. Siempre puede hacer su propio protocolo en un caso como este para no tener que depender del proveedor. Pero algunos de ellos tienen una o dos capas de cargadores de arranque, uno que colocan y protegen de usar, supongo que el AVR uno es el hardware, el otro es el software, el cargador de arranque que la gente arduino coloca y usa con un uart. No es raro, especialmente con los basados en ARM, tener un serial, usb y tal vez spi u otro en el incorporado, colocado por el proveedor de chips, el cargador de arranque. Ata un pin de entrada al reinicio o conjunto de pines y el gestor de arranque asume el control y no inicia la aplicación, sino que espera a que el programa de campo. NXP, ST, Atmel, son proveedores que hacen esto.

Algunos, verdaderos, son solo jtag, ahora con el pin reducido SWD jtag, a menudo ofrecen eso como una solución junto con los demás, y algunos son solo jtag. Pero como ya no usamos partes flash paralelas que todos programaron con el mismo protocolo y solo necesitabas una abstracción para leer y escribir las direcciones, las herramientas jtag a menudo no se meten con el aprendizaje de los protocolos de todos los chips posibles que existen. use una herramienta especial de ellos o lo hace de otra manera (por ejemplo, mi preferencia, escriba un programa y descárguelo y haga que use la programación automática, algunas de las soluciones, (stlink, etc.) en realidad descargue un programa o diseño , y luego la herramienta habla de lo que se descarga para apoyar la tarea)

esto depende de usted como usuario, para agregar esto a las cosas que debe buscar al elegir el mcu para su proyecto. ¿Cómo lo programamos? ¿Va a programar en masa estas cosas, programa por tarjeta, deje que las TIC se encarguen de ello? Pero antes de llegar a la producción en masa, ¿cuál es su solución para los desarrolladores de software, terminan formando tableros bricking porque no hay una solución en los tableros prototipo para reprogramar? ¿O expones algo, etc.? Si el chip no da buenas soluciones, eso se suma al costo del desarrollo. Ciertamente, trabaje con sus desarrolladores de software antes de diseñar el tablero, por lo general, un par de pasadores de uart y una correa a menudo son suficientes para hacer un gestor de arranque si aún no hay uno. O una correa y un jtag, pueden hacer que su aplicación se detenga muy temprano, si la correa está ajustada, y luego tomar el jtag para depurar, descargar programas o reprogramar el chip.

En los viejos tiempos, acabas de quitar el baile de graduación y lo borraste, luego lo pegabas en un programador, o lo dejabas para borrar y tomaba el siguiente borrado y lo programaba, lo ponía de nuevo en el zócalo del tablero. Eso o sacó el mcu y lo puso en el borrador y / o el programador.

La mayoría ahora tiene una solución de programación de campo o puede crear su propia solución de programación de campo (en software) si hay suficientes pines. Si no es así, cree una placa con zócalo para los prototipos de desarrollador y un accesorio para reprogramar, o simplemente deseche las piezas hasta que los desarrolladores hagan lo correcto.

    
respondido por el old_timer
0

Como dice DerManu, no tiene nada de mágico, solo muchos detalles de implementación. La gente compra emuladores porque construir y programar los suyos es un dolor. Eche un vistazo a algunos elementos clave de la lista de características de J-Link:

  • Velocidad de descarga de hasta 3 MByte / s
  • Inteligencia en el firmware del emulador [manejo de casos de borde extraño]
  • Compatible con todas las cadenas de herramientas populares
  • Compatibilidad con la depuración de múltiples núcleos
  • Admite un número ilimitado de puntos de interrupción de software en la memoria flash
  • ¡Es posible establecer puntos de interrupción en la memoria flash externa de los sistemas Cortex-M solo con la tecnología de Puntos de Interrupción de Flash Ilimitados de J-Link!
  • Soporte de plataforma cruzada (Microsoft Windows, Linux, Mac OS X)
  • Admite el acceso simultáneo a la CPU por varias aplicaciones
  • Servidor remoto incluido. Permite utilizar J-Link de forma remota a través de TCP / IP
  • DLL de interfaz RDI / RDDI disponible
  • El software viene con GDBServer gratuito, lo que permite el uso de J-Link con todas las soluciones de depuración basadas en GDB
  • Software de programación flash de producción (J-Flash) disponible
  • Descarga de flash independiente del depurador (flash interno, flash CFI, flash SPIFI)
  • Admite el búfer de seguimiento interno de CPU / MCU (ETB, MTB, ...)
  • Admite el rastreo ETM (J-Trace Cortex-M, J-Trace ARM)
  • Se puede conectar a la PC host a través de USB o Ethernet (J-Link PRO)
  • Rango de voltaje objetivo amplio: 1.2V - 3.3V, 5V tolerante
  • Todas las señales JTAG pueden ser monitoreadas, se puede medir el voltaje objetivo
  • Fuente de alimentación de destino: J-Link puede suministrar hasta 300 mA para el objetivo con protección de sobrecarga
  • Hay un SDK disponible (permite el uso personalizado de J-Link)
  • Varios adaptadores de destino y adaptadores de aislamiento óptico disponibles
  • Admite múltiples interfaces de destino (JTAG, SWD, FINE, SPD, ...)

Eso es mucho trabajo! El modelo de gama baja cuesta menos de $ 400 y el modelo de gama alta es de alrededor de $ 1000, lo que realmente no es malo para un emulador JTAG con controladores, soporte IDE, alojamiento de depuración remota, etc. Recuerde que estos tienen un mercado objetivo estrecho: Segger ¡Se jacta de vender más de 400,000 unidades! Y el mercado es en su mayoría otras compañías, que no se atreverán a gastar $ 1000; un buen osciloscopio cuesta entre 5 y 10 veces más. La inversión en desarrollo de software para un microcontrolador dado es mucho, mucho más grande que la inversión en herramientas de programación.

Ciertamente, podrías intentar hacer que un programador utilice un Arduino, podría ser un proyecto divertido. Pero definitivamente será un proyecto, y no un truco rápido.

    
respondido por el Adam Haun

Lea otras preguntas en las etiquetas