SPI es uno de los dos protocolos serie más utilizado
para la comunicación entre circuitos electrónicos pertencientes a un mismo sistema.
Este protocolo es frecuentemente usado para memorias flash.
SPI 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 SPI en forma nativa, y debido a que los programas mencionados
pueden ser configurados este plug-in no necesita de ningún circuito complejo. Es básicamente un
conector, cables y algunos resistores. 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 SPI se decidió implementar este plug-in
utilizando cables separados (flying leads):
flashrom:
Flashrom es un proyecto de software libre. Sirve para leer, escribir y/o verificar memorias tipo flash. Su uso principal es para flashear motherboards (actualización del BIOS). Todas las pruebas realizadas fueron llevadas a cabo utilizando Debian GNU/Linux. Flashrom puede compilarse para varios UNIXes, pero no fue verificado el funcionamiento de MILK en estos entornos. La versión de flashrom utilizada fue la v0.9.7+r1782. Las pruebas se llevaron a cabo con memorias Micron M25P10-A y N25Q032A, y Winbond W25X40. Flashrom soporta chips FT2232H en forma nativa, por lo que basta con indicarle que use el ft2232_spi como programmer (opción -p). Es posible seleccionar el canal agregando ,port=X, de esta manera -p ft2232_spi,port=B selecciona el canal B de MILK.
flashrom + parche:
Muchas FPGAs pueden configurarse desde una memoria SPI. En el caso particular de FPGAs como las Lattice iCE40 esta es la forma más común de configuración, y no disponen de puertos JTAG. Por lo que es común que implementaciones basadas en estas FPGAs dispongan de un puerto SPI para acceder a la memoria de configuración. En estos casos aparece una aplicación particular de flashrom. Lamentablemente este escenario tiene particularidades que impiden usar flashrom sin modificaciones, entre ellos:
- Es necesario controlar la línea de reset de la FPGA para mantenerla reseteada durante la
configuración.
- Luego de que la FPGA lee la configuración de la memoria SPI envía un comando que pone a la
memoria en bajo consumo. Es necesario primero despertarla.
- Es prudente hacer que la línea CS del SPI se deshabilite cuando la FPGA terminó de
configurarse, ya que la FPGA la usará para seleccionar la memoria SPI.
- Es deseable poder leer el estado de la señal CDONE para saber si la FPGA logró configurarse.
Esto es opcional ya que no todas las placas con iCE40 permiten acceder a esta señal.
Para lograr que flashrom cumpla con estas condiciones fue necesario modificarlo. Como base se
tomó la versión v0.9.9-r1954 y se realizaron los siguientes cambios:
parche. Una versión compilada para Debian GNU/Linux
corriendo plataformas Intel modernas (64 bits) puede descargarse aquí:
flashrom Debian 64 bits.
Con este parche aplicado aparece un nuevo tipo de cable FT2232H denominado ice40. De esta manera
un cable MILK con el plug-in SPI base puede ser usado para configurar memorias SPI
conectadas a una iCE40. Para esto basta con indicar -p ft2232_spi:type=ice40,port=A para el
canal A de MILK o -p ft2232_spi:type=ice40,port=B para el canal B. Es importante tener en
cuenta que las líneas SPI son las indicadas como "Lattice iCE40" en el
esquemático. Las diferencias más importantes con un uso de SPI genérico
son:
- La línea de CS es reemplazada por GPIO0.
- Es indispensable controlar la línea CRESET_B usando GPIO3.
- Opcionalmente puede conectarse GPIO2 a la línea CDONE de la FPGA. En este caso conviene
agregar ,cdone=1 a la opción -p antes indicada.
Utilizando este método se logró configurar la iCE40 del kit iCE Blink en 6 segundos, mucho menos
que 1 minuto 6 segundos necesarios utilizando Lattice Diamond Programmer.
AVRDUDE:
AVRDUDE es un proyecto de software libre. Su nombre proviene de "AVR Downloader/UploaDEr". Esta herramienta permite configurar CPUs tipo AVR (por ejemplo el ATmega usado en los Arduino), así como también realizar debug in-circuit. Todas las pruebas realizadas fueron llevadas a cabo utilizando Debian GNU/Linux. AVRDUDE puede compilarse para otros UNIX y Windows, pero no fue verificado el funcionamiento de MILK en estos entornos. La versión de AVRDUDE utilizada fue la v6.1. Las pruebas se llevaron a cabo con CPUs ATmega32. Utilizando el plug-in SPI base y las conexiones indicadas como "avrftdi" es posible utilizar MILK. Basta con seleccionar avrftdi como programmer (-c avrftdi). Cabe destacar que esto asume que el canal usado es el A. Si se desea utilizar el canal B es necesario editar /etc/avrdude.conf y cambiar el valor de usbdev en la sección id="avrftdi".
Lattice Diamond Programmer:
El entorno Diammond de Lattice permite desarrollar con las FPGAs
de dicho fabricante. Las herramientas necesarias para configurar FPGAs pueden descargarse en
forma independiente bajo el nombre de Diamond Programmer.
Esta herramienta se encuentra disponible para Linux y Windows, sin embargo, todas nuestras pruebas
fueron realizadas en Linux.
Las versiones actuales del Lattice Diamond Programmer soportan cables basados en FT2232H. Basta con seleccionar
el cable HW-USB-2B (FTDI). Es posible seleccionar cualquiera de los dos canales desde la
herramienta.
Si bien la herramienta soporta configurar una amplia variedad de dispositivos, ya sea usando SPI,
como también JTAG, todas nuestras pruebas fueron realizadas con placas basadas en iCE40. Por lo tanto
sólo se verificó el funcionamiento como cable SPI.
En este caso las conexiones son las mismas que las explicadas en la sección flashrom + parche.
Se pueden encontrar instrucciones detalladas de uso en los manuales de Lattice y en los manuales
de los kits de desarrollo de Lattice.
Un detalle interesante que notamos es que la herramienta tarda alrededor de un minuto en detectar
a la FPGA y la memoria conectados, lo que es bastante molesto. También notamos que la herramienta
gráfica no es la misma que la ofrecida para línea de comandos. En nuestro caso la versión de línea
de comandos fallaba en detectar que reloj usar para el SPI y terminaba usando uno muy bajo (15 kHz aprox.)
haciendo imposible su uso. El soporte técnico de Lattice no pudo ayudarnos a resolver este
problema.
|