JTAG es un protocolo serie originalmente pensado
para realizar la verificación de circuitos electrónicos (boundary scan). En la actualidad
es ampliamente usado para configurar dispositivos y para la depuración de CPUs embebidas.
El FT2232H es muy popular para la implementación de cables JTAG, por lo que existe una gran
variedad de implementaciones y aplicaciones. Muchos de los cables JTAG abiertos se basan en
el Amontec JTAGKey, por ejemplo el Opendous.
Por esta razón se pensó en implementar un plug-in con un circuito similar. Sin embargo, todas
las aplicaciones que se probaron hasta el momento mostraron que no era necesario. Por esta razón
sólo se implementó un plug-in que es básicamente un conector, cables y algunos resistores.
JTAG base:
Este plug-in puede usarse con el siguiente software:
Probablemente pueda usarse con otros programas y/o sistemas operativos, las combinaciones
mencionadas fueron verificadas y en los links encontrará detalles de configuración para cada
software.
Debido a que el FT2232H implementa JTAG en forma nativa, y a que los programas mencionados
pueden ser configurados (o al menos engañados ...) este plug-in no necesita de ningún circuito
complejo. La configuración mostrada en este esquemático fue usada
exitósamente en todos los casos.
Al no haber un consenso en cuanto al conector JTAG se decidió implementar este plug-in
utilizando cables separados (flying leads):
OpenOCD:
OpenOCD es un proyecto de software libre. Su nombre deriva de Open On-Chip Debugger y se autodefine como "Free and Open On-Chip Debugging, In-System Programming and Boundary-Scan Testing". Su punto más fuerte es la depuración in-circuit, en particular para CPUs de la arquitectura ARM. Todas las pruebas realizadas fueron llevadas a cabo utilizando Debian GNU/Linux. OpenOCD puede compilarse para Mac OSX y Windows, pero no fue verificado el funcionamiento de MILK en estos entornos. La versión de OpenOCD utilizada fue la v0.7.0 (2013-04-09-11:07). Las pruebas se llevaron a cabo con una Beagleboard xM y con una Atmel SAM3U-EK. A continuación se describe como configurar OpenOCD y MILK para que funcionen juntos. Todos los archivos mencionados se encuentran disponibles en este archivo ZIP.
-
Para lograr una mejor integración con OpenOCD el método utilizado consistió en cargar una
configuración específica en la memoria flash de MILK. De esta manera el OpenOCD puede
verificar que está dialogando con MILK y no con otro dispositivo basado en el FT2232H.
Para esto es necesario grabar el contenido de eeprom.MilkJTAG_u en la flash de MILK. En
Debian GNU/Linux esto se puede hacer utilizando la herramienta ftdi_eeprom (paquete
ftdi-eeprom), y la configuración MilkJTAG_u.conf, de la siguiente
manera:
$ ftdi_eeprom --flash-eeprom MilkJTAG_u.conf |
-
Se debe configurar OpenOCD para reconocer un nuevo cable. El archivo
milk-basic.cfg describe al plug-in JTAG base
conectado en el canal A de MILK y milk-basic-B.cfg al mismo
plug-in, pero conectado en el canal B. Estos archivos deben copiarse al directorio de configuración
de OpenOCD (por ejemplo: ~/.openocd/interface/ftdi/).
-
Una vez configurado basta con invocar OpenOCD indicando la configuración de nuestro cable con la opción
-f. Así, por ejemplo, para una Beagleboard xM conectada al canal B (ya que funciona con
un JTAG de 1,8 V) usamos:
$ openocd -f interface/ftdi/milk-basic-B.cfg -f board/ti_beagleboard_xm.cfg |
UrJTAG:
UrJTAG es un proyecto de software libre. Su nombre deriva de Universal JTAG y se autodefine como "Universal JTAG library, server and tools". Su punto más fuerte es su soporte para una gran variedad de dispositivos, incluyendo FPGAs. Todas las pruebas realizadas fueron llevadas a cabo utilizando Debian GNU/Linux. UrJTAG puede compilarse para otros UNIX y Windows, pero no fue verificado el funcionamiento de MILK en estos entornos. La versión de UrJTAG utilizada fue la v0.10+r2007 (Debian). Las pruebas se llevaron a cabo con FPGAs de Xilinx, mayormente Virtex 4. Utilizando el plug-in JTAG base MILK puede usarse como un cable JTAGKey. Es decir, que para utilizar el canal A basta con seleccionar el cable de la siguiente manera:
cable jtagkey vid=0x0403 pid=0x6010 |
Y para el canal B:
cable jtagkey vid=0x0403 pid=0x6010 interface=1 |
Xilinx iMPACT:
El entorno de trabajo ISE de Xilinx utiliza la herramienta iMPACT para configurar las FPGAs y/o las memorias flash asociadas. Esta herramienta se encuentra disponible para Linux y Windows, sin embargo, todas nuestras pruebas fueron realizadas en Linux. Las versiones actuales de iMPACT soportan cables basados en FT2232H. Es posible utilizar iMPACT helper. En este caso podemos hacerle creer a iMPACT que en el puerto LPT2 tenemos un cable paralelo, que en realidad será MILK. Para esto debemos configurar el driver creando un archivo ~/.libusb-driverrc que diga:
LPT2 = FTDI:0403:6010
Esto sirve para el canal A de MILK. Si deseamos utilizar el canal B basta con poner:
LPT2 = FTDI:0403:6010:2
Usando este mecanismo se pudo configurar FPGAs Spartan 3E, Spartan 6 y Virtex 4.
Esta solución no requiere cambios en MILK, aunque la velocidad de transferencia no es la óptima.
Si deseamos sacarle el máximo jugo a iMPACT+MILK es posible utilizar el driver de Digilent que
incluye iMPACT. Basta con clonar un cable Digilent o hacerle creer al plug-in de iMPACT
que nuestro cable es uno de Digilent. Tuvimos éxito imitando un cable Digilent HS1. Para más
información sobre este método por favor contactarnos.
|