2011-01-17 14 views
12

Ok, estoy un poco confundido acerca de la programación de procesadores ARM. Un aluvión de preguntas:¿Cómo obtener código ARM en un dispositivo real, JTAG? Posible hacer Impromptu JTAG con Arduino?

  • ¿Cómo se obtiene el binario compilado en un procesador ARM?
  • ¿Es JTAG el método normal (creo que eso es lo que mi investigación ha indicado ...)?
  • ¿Es el único método?
  • Si es un método válido, ¿cómo lo usa exactamente de esa manera?
  • Si no lo es, ¿qué es/cómo lo hago?

Además, se puede usar algo como un Arduino para crear una interfaz JTAG impromptu (si eso es precisamente lo que se necesita para programar dispositivos ARM). . .?

Ya configuré QEMU para probar el código y demás, pero no estoy seguro de cómo proceder para obtener mi código en el ámbito físico.

Básicamente estoy preguntando: ¿JTAG es el programador de dispositivos del mundo ARM? ¿Puedo parodiar uno con un Arduino (Arduino wiggler Clone o.o)? Si JTAG no es, ¿qué es y puedo suplantarlo?

Oh ... Y podría necesitar una mejor explicación de cómo funciona exactamente JTAG.

Ahora por un poco de información básica:
Tengo un viejo Dispositivo Palm (LifeDrive), que tiene el procesador XScale PXA270 creo. Ya no parece haber ningún desarrollo comunitario activo, y ya no me sirve para nada, así que solo quiero jugar/perder el tiempo con eso. Básicamente, esta podría ser una buena manera de jugar con lo que es esencialmente una masa de sensores y otras entradas y salidas diversas, y también acostumbrarse al ensamblado ARM.

Siéntase libre de decirme si estoy tomando el enfoque equivocado, pero al menos proporcione alternativas (aunque estoy bastante concentrado en jugar con el LifeDrive específicamente, si solo quisiera jugar con la programación integrada, lo haría) en mi Arduino en su lugar.)

Casi todo en este momento todo es un tiro en la oscuridad. Estoy un poco cansado de dar vueltas sin rumbo fijo, así que publiqué esto.

+0

¿Cómo se obtiene el binario compilado en un procesador x86? –

+0

A través de un emulador. –

+0

Ni siquiera intentaré competir con la excelente respuesta de Clifford. Tengo una serie de ejemplos de brazo para una serie de paneles de brazo de bajo costo. El descubrimiento stm32f4 por $ 20 es un buen camino, lo que necesita cargar viene con el tablero. El descubrimiento de la línea de valor de $ 10 stm32, similar/misma historia. http://github.com/dwelch67/ Tengo algunos simuladores de brazos, así como miniaturas y samples de ámbar, para que puedas mojarte los pies gratis. –

Respuesta

15

¡Esa es una gran cantidad de preguntas! Aquí hay algunas respuestas:

¿Cómo se obtiene el binario compilado en un procesador ARM?

Varía según una serie de factores.

¿Es JTAG el método normal (creo que eso es lo que mi investigación ha indicado ...)?

La mayoría (quizás todos) de los modernos dispositivos basados ​​en ARM incluyen una interfaz JTAG (los núcleos blandos en un FPGA quizás sean exceptuados). En general, esto se puede utilizar para programar en un chip o flash externo o cargar directamente en la memoria RAM. La interfaz JTAG también es la interfaz para las características de depuración y rastreo en el chip. Algunos dispositivos tienen interfaces de depuración/programación adicionales, como ARM's SWD, por ejemplo.

¿Es el único método?

En algunos casos. Algunos microcontroladores basados ​​en ARM incluyen una ROM del cargador de arranque en el chip que puede admitir serial, USB, NAND Flash u otros medios de programación de flash en el chip. A veces, tal instalación es muy simple y solo pretende cargar y ejecutar un gestor de arranque secundario que se ejecuta desde la RAM y realiza la programación flash real.

Si es un método válido, ¿cómo lo usa exactamente de esa manera?

Utilizando el software de host apropiado. JTAG es una interfaz muy simple, y no define ninguna funcionalidad en particular, solo un medio de transferencia de datos. Normalmente, el software de programación necesitará saber con qué dispositivo se está comunicando, y si la memoria flash no está en chip, necesitará conocer el dispositivo flash y su dirección. A menudo, la cadena de herramientas de desarrollo incluirá soporte para la programación del dispositivo, especialmente para dispositivos con memoria en chip. Si está utilizando la cadena de herramientas GNU, puede usar OpenOCD para programar el dispositivo e interconectar el depurador de GNU.

Si no lo es, ¿qué es/cómo lo hago?

Si su objetivo es COTS, bien puede incluir un gestor de arranque que ya permita la actualización de software a través de USB, serie o Ethernet, por ejemplo.

Además, puede usarse algo como un Arduino para crear una interfaz JTAG improvisada (si eso es realmente lo que se necesita para programar dispositivos ARM). . .?

Probablemente, como he dicho JTAG en sí mismo es trivialmente simple de implementar, el problema es hacer que sea compatible con cualquier software de host que utilice (o hacer que el software sea compatible con él). Los adaptadores JTAG "wiggler" más sencillos se implementan utilizando E/S de puerto paralelo para PC, no particularmente rápido, pero funcional.

Básicamente estoy preguntando: ¿JTAG es el programador de dispositivos del mundo ARM?

Se definió originalmente como una boundary scan test interface, pero ahora es ampliamente utilizado en la mayoría de los microprocesadores y microcontroladores que incluyen depuración y programación en chip.

¿Puedo hacer una parodia con Arduino (Arduino wiggler Clone o.o)? Si JTAG no es, ¿qué es y puedo suplantarlo?

No es una cuestión de "spoofing", la interfaz se puede implementar de muchas maneras. Cómo lo implementas afecta principalmente a la velocidad de la interfaz. Se puede alcanzar 16   MHz, pero un ondulador de puerto paralelo más simple probablemente no soportaría más de 500   kHz. Es una interfaz síncrona, por lo que las velocidades de reloj variables no son un problema.

Oh ... Y podría necesitar una mejor explicación de cómo funciona exactamente JTAG.

estoy seguro de que no puedo hacer algo mejor que la explicación de la Wikipedia en JTAG. Pero para la implementación en su dispositivo de destino, debe consultar el manual de referencia/hoja de datos de la parte.

Tengo un viejo Dispositivo Palm (LifeDrive), que tiene el procesador XScale PXA270 creo.

"Creer" probablemente no sea suficiente; necesitarás saber. ¿Están los pines JTAG incluso expuestos en el tablero? Sería habitual en un producto de consumo omitir un conector JTAG real. Incluso si hay uno, es probable que sea un conector patentado y pin-out (JTAG mismo no define ninguno, y hay varios definidos para ARM, pero lo que puede encontrar en una placa de desarrollo puede no estar incluido en el producto de consumo final.

Básicamente, esto podría ser una buena manera de llegar a jugar un poco con lo que es esencialmente una masa de sensores, y otras entradas y salidas de varios, y también acostumbrarse al lenguaje ensamblador ARM.

Probablemente sea mejor obtener una placa de desarrollo lista para usar con interfaces y pines de E/S expuestos. En un producto de consumo, es probable que solo los pines que requiere la aplicación de destino estén expuestos, y incluso entonces pueden no ser accesibles si están conectados a dispositivos BGA. Además, XScale está en el extremo complejo de los dispositivos ARM (cayendo aproximadamente entre ARM9 y ARM11), si no está familiarizado con tales dispositivos y cosas como el control del reloj PLL, el control y el tiempo de SDRAM y la configuración de MMU, puede consultar algo más simple. No solo eso, sino que tanto el Flash como la RAM serán de chip, necesitará detalles de la asignación de direcciones de la memoria y de otros dispositivos externos, así como los detalles necesarios de sincronización SDRAM. Al ser un dispositivo de consumo, dichos detalles pueden no estar disponibles de otra forma que no sea mediante ingeniería inversa.

Dicho esto, respecto al comentario anterior sobre los cargadores de arranque, Palm proporciona a user installable ROM update para el dispositivo, por lo que debe tener un gestor de arranque. Sin embargo, aún necesitaría detalles sobre el formato de archivo de imagen y el protocolo de transferencia de datos. Es poco probable que se publiquen, y probablemente sean difíciles de aplicar ingeniería inversa.

si yo sólo quería jugar con programación integrado, lo haría en mi lugar Arduino.)

Hay un montón de placa de desarrollo ARM de bajo costo disponibles. Pruebe Olimex por ejemplo: incluso tienen un bajo costo "Wiggler" clone JTAG adapter.

+0

Muchas gracias por su excelente respuesta: D. Sí, de hecho es el PXA270, y encontré algo en hackndev que describe dónde están los pines JTAG en la vida. Además, sé (¡creo que al menos!) donde la mayoría de los diversos dispositivos están mapeados en la memoria al arrancar, ¿eso sería útil en esta situación? – JBailey

+0

bien, eso lo hace mucho más factible. aún más difícil que una junta de evaluación. –

+0

Acepto el desafío = p – JBailey

0

No puedo ayudarlo específicamente, pero sí trabajo con ARM. Es con los compiladores ARM y los enlazadores y las pruebas con depuradores diseñados específicamente para el dispositivo, y luego el código se muestra en los medios que el dispositivo ejecuta de forma nativa.

Por lo tanto, va a necesitar una forma de actualizar la información en un medio que su Palm puede ejecutar, o va a necesitar un emulador de software para probarlo. Desearía saber más sobre Palm, pero estoy más relacionado con el desarrollo del juego :) Parece que JTAG podría ser un emulador x86 de algún tipo, por lo que probablemente comenzaría allí.

+0

JTAG es una especie de interfaz de depuración de circuitos. . . Algo así como varios chips en el tablero se conectan entre sí, y luego se puede acceder y depurar usando una interfaz JTAG. No estoy muy seguro de mí mismo, pero gracias por responder de todos modos. Pero cuénteme más acerca de cómo se transmite el código a los "medios" (y qué tipo de medios son). ¿Y qué quiere decir que el dispositivo funciona de forma nativa? ¿Algo así como cómo las PC arrancan desde un disco duro? – JBailey

+0

La mayoría de los dispositivos tienen un área en la RAM donde se ven por primera vez para poder ejecutar su código, un área de correa de arranque per se. Esa área generalmente tiene un comando jmp donde quieres que viva tu código de inicio. El código que controla esto que he encontrado generalmente se llama crt.s o algo similar. Esto configura el tamaño de la pila, borra la RAM, carga la estática y demás, luego llama a una rutina "principal" que la mayoría de los códigos C/C++ esperan como entrada. Sí, como un disco duro. Para muchas computadoras portátiles/juegos, las tarjetas SD se usan para arrancar. Más por venir ... –

+0

Para ver un ejemplo de un dispositivo en el que he trabajado, consulte gbadev.org para obtener más información sobre cómo crear una aplicación para Game Boy Advanced y Game Boy DS. Estos son dispositivos ARM7/ARM9 con una gran cantidad de documentación y ayuda en el foro. También le dará un buen curso intensivo sobre programación básica integrada. He estado trabajando en tierra incrustada durante tanto tiempo que ahora me molesta cuando trabajo en sistemas con sistemas operativos ahora :) –

1

JTAG es la forma más fácil de acceder a la placa para ejecutar desde RAM o flash.Es una herramienta de depuración que le permite leer y escribir todos los registros internos de una CPU y también controlar todos los pines de E/S. La mayoría de las CPU modernas admiten JTAG.

Puede ser tan simple como un bit broger de puerto paralelo (wriggler) o hardware caro para construir un propósito. Compraría un pequeño dispositivo USB para comenzar así one. This tipo lo usó con un PXA270.

Para todas las cosas OpenOCD relacionadas ir here. Esto ayudará con la depuración y programación y enumeran todo tipo de hardware JTAG simple.

Una nota sobre el procesador que tiene. No parece ser ampliamente compatible. Tal vez deberías mirar una placa de desarrollo económica con un procesador más ampliamente compatible.

+0

Hmm, ¿OpenOCD no funcionará con el PXA270? En el sitio web de macraigor parece indicar que Wiggler es compatible con este procesador, o es más un problema con el software de host. Además, ¿cómo es UrJtag en comparación con Open OCD, o son ellos entidades separadas incomparables? – JBailey

+0

Funcionará. Open OCD es utilizado por la mayoría de las personas para ARM, no sé nada sobre UrTjag pero podría funcionar. – Gerhard

Cuestiones relacionadas