Por fin llegaron las CPLDs lo que abre la puerta a una de las partes más interesantes -para mí- de este proyecto, su programación.
Versión corta: Las CPLDs ya están programadas y listas.
Versión menos corta (pero más divertida):
Xilinx iMPACT/ISE Webpack
La opción más inmediata para programar la CPLD es el iMPACT/ISE Webpack, una "pequeña" aplicación de una suite de Xilinx del año 2013 que necesita ser descargada en 4 partes, en total de más de 7GB, 7GiB para neo-puristas, y viene a ocupar más de 23GB una vez instalada y que, así como quien no quiere la cosa, te exige un registro especial con todos tus datos personales por unas supuestas leyes de "exportación" de tecnología "ultra-peligrosa" usanas. Quien haya comprado componentes (comunes, como "peligrosas" resistencias, condensadores, etc.) en ciertos proveedores de allende los mares cuyos términos y condiciones te autorizan personalmente a ti a utilizarlos pero, en un lenguaje jurídico no especialmente cordial, te advierten de que no puedes cederlos a terceros sin autorización escrita del gobierno usano, sabe de lo que hablo.
Retomando el tema, unas capturas de iMPACT y del programador Xilinx DLC9LP:
que siento que pueda ser una opción poco accesible por lo que, después de barajar otras y dado que están disponibles los ficheros .JED, .VHD y .XSVF, he optado por lo conocido y seguro, la versión 2.3 del cargador de ROMs para CPC de @overCLK.
Generador de ROMs para CPC
Una nota sobre esta aplicación, una vez descargada para cacharrear con ella se necesitan el Java 8 JDK y Apache Maven. Si usáis Maven desde la consola (de comandos) de Windows contiene una originalidad que podría chocar con algunas versiones del intérprete de comandos o con intérpretes de comandos de terceros tan avanzados como poco actualizados. Al grano, donde en ./bin/mvn.cmd dice:
Código: Seleccionar todo
"%JAVACMD%" ^
%JVM_CONFIG_MAVEN_PROPS% ^
%MAVEN_OPTS% ^
%MAVEN_DEBUG_OPTS% ^
-classpath %CLASSWORLDS_JAR% ^
"-Dclassworlds.conf=%MAVEN_HOME%\bin\m2.conf" ^
"-Dmaven.home=%MAVEN_HOME%" ^
"-Dlibrary.jansi.path=%MAVEN_HOME%\lib\jansi-native" ^
"-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^
%CLASSWORLDS_LAUNCHER% %MAVEN_CMD_LINE_ARGS%
se sustituye por:
Código: Seleccionar todo
"%JAVACMD%" %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %CLASSWORLDS_JAR% "-Dclassworlds.conf=%MAVEN_HOME%\bin\m2.conf" "-Dmaven.home=%MAVEN_HOME%" "-Dlibrary.jansi.path=%MAVEN_HOME%\lib\jansi-native" "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %CLASSWORLDS_LAUNCHER% %MAVEN_CMD_LINE_ARGS%
y, automágicamente, compatibilidad total.
Arduino UNO R3
Volviendo a la programación de las CPLDs y retomamos nuestro improvisado programador:
y lo intentamos con un Arduino UNO R3:
pero, el siguiente escollo que podría surgir es que el vendedor tuviera un lapsus (sin querer, claro) y omitiera mencionar que te envió el modelo con el "old bootloader". No hay problema, solo hay que actualizar el bootloader del UNO R3 utilizando nuestro programador favorito y los siguientes comandos. Primero, programando los fuses:
avrdude -v -cstk500 -p m328p -B0.5 -PCOM36 -e -U efuse:w:0x05:m -U hfuse:w:0xD6:m -U lfuse:w:0xFF:m
y después, escribiendo el nuevo bootloader que podéis encontrar en el directorio ./hardware/arduino/avr/bootloaders/optiboot/ de vuestro Arduino IDE (ejecutad el comando desde ese directorio o añadid la trayectoria completa al comando):
avrdude -v -cstk500 -p m328p -B0.5 -PCOM36 -e -U flash:w:optiboot_atmega328.hex -U lock:w:0x0F:m
destaco en negrita los parámetros que deberían ser modificados cuando se usan otros programadores o cuando el número de puerto serie es otro.
Una vez listo, podemos programar sin problemas la CPLD desde el programador de CPLDs del cargador de ROMs o de código derivado del mismo (./src/main/java/com/grelobites/romgenerator/view/CpldProgrammerController.java).
Como recuerdo haber leído que la gran mayoría de los que lo intentaron, no veían muy claros los pines a conectar en el esquema que ofrece el programador de CPLDs del cargador de ROMs, aprovecho esta mención para señalar que podéis encontrar las imágenes sin reducir con la resolución original en el directorio ./src/main/resources/cpld-programmer del código fuente.
Arduino Nano
Para continuar con el cacharreo pruebo también con un Arduino Nano 328P-AU para el que he añadido al programador -por probarlo- un modulo conversor DC-DC basado en el AMS1117-3.3:
y, de nuevo, consigue programar sin problemas la CPLD pero, como en realidad el conversor DC-DC no es necesario, se puede eliminar junto al conector JTAG de la breadboard para pinchar directamente el Arduino Nano tomando ventaja de la coincidencia exacta de los pines del software (de Arduino) con el conector JTAG.
Fase completada
Utilizando esta configuración con el resto de las CPLDs, en un rato hemos acabado con todas programadas dejándolas listas para ser enviadas.