IceZUM Alhambra desde Asturias

150 views
Skip to first unread message

Antonino Canal Cobián

unread,
Jan 4, 2017, 6:01:51 PM1/4/17
to FPGAwars: explorando el lado libre

Hola, qué tal. Dado que el proyecto de FPGAs libres me encanta, me he animado y he pedido la placa de la IceZum y los componentes, y estas fiestas me he puesto a soldar a mano. La cosa no ha sido nada fácil, pero al fin he acabado. Os adjunto unas fotos.
El problema es que a la hora de probar la placa, el ordenador me detecta el FTDI, puedo instalar los drivers con el Icestudio, pero el programa no me detecta la placa IceZum. Aparece en administradores de dispositivos DUAL RS-232 HS (interface0) y DUAL RS-232 HS (interface1).
No es problema del ordenador, porque trabajo bien con la ICEstick y la ICE40 HX8k Breakout board.

Supongo que tengo alguna soldadura mal. ¿Alguna pista para intentar repara la "avería?

Ah, excelente diseño. He aprendido mucho soldando estos componentes tan pequeños.


robert...@gmail.com

unread,
Jan 5, 2017, 5:41:42 AM1/5/17
to FPGAwars: explorando el lado libre
Pues así de entrada y salvo error "serigráfico", yo diría que la inductancia de potencia 2R2 no está bien orientada, aunque ya te digo, igual el modelo que tienes tu lleva la serigrafía con otra orientación.

robert...@gmail.com

unread,
Jan 5, 2017, 5:43:50 AM1/5/17
to FPGAwars: explorando el lado libre
De todas formas, lo correcto si no lo has hecho ya, sería comprobar las tensiones en todos los testpoint. 1V2, 3V3, 3V3X, 5V, etc 


El jueves, 5 de enero de 2017, 0:01:51 (UTC+1), Antonino Canal Cobián escribió:

Obijuan

unread,
Jan 5, 2017, 7:55:14 AM1/5/17
to FPGAwars: explorando el lado libre
Hola Antonio!

Prueba a enviarle un bistream directamente con el iceprog, que no hace ninguna comprobación de cadenas, para ver si el hardware está ok

Apio y Icestudio comprueban la cadena de indentificación para saber qué placa es. En el caso de la icezum la cadena es:

$ apio system --lsftdi
Number of FTDI devices found: 1
Checking device: 0
Manufacturer: Mareldem, Description: IceZUM Alhambra v1.1 - B01-001

Saludos, Obijuan


El jueves, 5 de enero de 2017, 0:01:51 (UTC+1), Antonino Canal Cobián escribió:

Antonino Canal Cobián

unread,
Jan 5, 2017, 8:20:53 AM1/5/17
to FPGAwars: explorando el lado libre
Claro, programé mal la EEPROM. Me sale (o más bien le puse) Manufacturer: Lattice, Description: Lattice FTUSB Interface Cable.

Antonino Canal Cobián

unread,
Jan 5, 2017, 8:27:21 AM1/5/17
to FPGAwars: explorando el lado libre
Lo que pasa es que la placa que monté es la anterior, la Rev 1.0K. ¿Cambia la cadena de descripción?



El jueves, 5 de enero de 2017, 13:55:14 (UTC+1), Obijuan escribió:

Antonino Canal Cobián

unread,
Jan 5, 2017, 8:28:07 AM1/5/17
to FPGAwars: explorando el lado libre, robert...@gmail.com
La bobina está bien. Usé una de Wurt. Y las tensiones dan bien...

Antonino Canal Cobián

unread,
Jan 5, 2017, 8:48:05 AM1/5/17
to FPGAwars: explorando el lado libre

Pues enviando el bitstream con el icprog no va. Y ya puse bien la cadena de identificación. Puede ser problema de hardware...


El jueves, 5 de enero de 2017, 0:01:51 (UTC+1), Antonino Canal Cobián escribió:

Antonino Canal Cobián

unread,
Jan 5, 2017, 9:06:49 AM1/5/17
to FPGAwars: explorando el lado libre
El programa icestickprog.c

¿Qué es RC?


/*
 *  icestickprog -- simple programming tool for modified Lattice iCEstick dev boards
 *
 *  Copyright (C) 2014  Clifford Wolf <clif...@clifford.at>
 *  
 *  Permission to use, copy, modify, and/or distribute this software for any
 *  purpose with or without fee is hereby granted, provided that the above
 *  copyright notice and this permission notice appear in all copies.
 *  
 *  THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 *  WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 *  MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 *  ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 *  WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 *  ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 *  OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 *
 *
 *  Usage example: ./icestickprog < LED_Rotation_bitmap.bin
 *
 *  This tool is programming the iCE FPGA directly, not the serial prom. In
 *  order for this to work you have to desolder the flash chip and one zero
 *  ohm resistor and connect the FT2232H SI pin directly to the iCE SPI_SI
 *  pin, as shown on this picture:
 *
 *     http://www.clifford.at/gallery/2014-elektronik/IMG_20141115_183838
 *
 *  See "icestickflash" in this directory for a programming tool that programs
 *  the serial flash chip on an unhacked icestick board.
 */

#define _GNU_SOURCE

#include <ftdi.h>
#include <stdio.h>
#include <unistd.h>

struct ftdi_context ftdic;

void check_rx()
{
	while (1) {
		unsigned char data;
		int rc = ftdi_read_data(&ftdic, &data, 1);
		if (rc <= 0) break;
		printf("unexpected rx byte: %02x\n", data);
	}
}

void error()
{
	check_rx();
	printf("ABORT.\n");
	ftdi_usb_close(&ftdic);
	ftdi_deinit(&ftdic);
	exit(1);
}

unsigned char recv_byte()
{
	unsigned char data;
	while (1) {
		int rc = ftdi_read_data(&ftdic, &data, 1);
		if (rc < 0) {
			printf("Read error.\n");
			error();
		}
		if (rc == 1)
			break;
		usleep(100);
	}
	return data;
}

void send_byte(unsigned char data)
{
	int rc = ftdi_write_data(&ftdic, &data, 1);
	if (rc != 1) {
		printf("Write error (single byte, rc=%d, expected %d).\n", rc, 1);
		error();
	}
}

void send_spi(unsigned char *data, int n)
{
	send_byte(0x11);
	send_byte(n-1);
	send_byte((n-1) >> 8);

	int rc = ftdi_write_data(&ftdic, data, n);
	if (rc != n) {
		printf("Write error (chunk, rc=%d, expected %d).\n", rc, n);
		error();
	}
}

void set_gpio(int slavesel_b, int creset_b)
{
	unsigned char gpio = 1;

	if (slavesel_b) {
		// ADBUS4 (GPIOL0)
		gpio |= 0x10;
	}

	if (creset_b) {
		// ADBUS7 (GPIOL3)
		gpio |= 0x80;
	}

	send_byte(0x80);
	send_byte(gpio);
	send_byte(0x93);
}

int get_cdone()
{
	unsigned char data;
	send_byte(0x81);
	data = recv_byte();
	// ADBUS6 (GPIOL2)
	return (data & 0x40) != 0;
}

int main()
{
	// ---------------------------------------------------------
	// Initialize USB connection to FT2232H
	// ---------------------------------------------------------

	printf("init..\n");

	ftdi_init(&ftdic);
	ftdi_set_interface(&ftdic, INTERFACE_A);

	if (ftdi_usb_open(&ftdic, 0x0403, 0x6010)) {
		printf("Can't find iCEstick USB device (vedor_id 0x0403, device_id 0x6010).\n");
		error();
	}

	if (ftdi_usb_reset(&ftdic)) {
		printf("Failed to reset iCEstick USB device.\n");
		error();
	}

	if (ftdi_usb_purge_buffers(&ftdic)) {
		printf("Failed to purge buffers on iCEstick USB device.\n");
		error();
	}

	if (ftdi_set_bitmode(&ftdic, 0xff, BITMODE_MPSSE) < 0) {
		printf("Failed set BITMODE_MPSSE on iCEstick USB device.\n");
		error();
	}

	// enable clock divide by 5
	send_byte(0x8b);

	// set 6 MHz clock
	send_byte(0x86);
	send_byte(0x00);
	send_byte(0x00);

	printf("cdone: %s\n", get_cdone() ? "high" : "low");

	set_gpio(1, 1);
	usleep(100);


	// ---------------------------------------------------------
	// Reset
	// ---------------------------------------------------------

	printf("reset..\n");

	set_gpio(0, 0);
	usleep(100);

	set_gpio(0, 1);
	usleep(2000);

	printf("cdone: %s\n", get_cdone() ? "high" : "low");


	// ---------------------------------------------------------
	// Program
	// ---------------------------------------------------------

	printf("prog..\n");

	while (1)
	{
		static unsigned char buffer[4096];
		int rc = read(0, buffer, 4096);
		if (rc <= 0) break;
		printf("sending %d bytes.\n", rc);
		send_spi(buffer, rc);
	}

	// add 48 dummy bits
	send_byte(0x8f);
	send_byte(0x05);
	send_byte(0x00);

	// add 1 more dummy bit
	send_byte(0x8e);
	send_byte(0x00);

	printf("cdone: %s\n", get_cdone() ? "high" : "low");


	// ---------------------------------------------------------
	// Exit
	// ---------------------------------------------------------

	printf("Bye.\n");
	ftdi_disable_bitbang(&ftdic);
	ftdi_usb_close(&ftdic);
	ftdi_deinit(&ftdic);
	return 0;

}


El jueves, 5 de enero de 2017, 0:01:51 (UTC+1), Antonino Canal Cobián escribió:

Jesús Arroyo

unread,
Jan 5, 2017, 10:48:37 AM1/5/17
to FPGAwars: explorando el lado libre
Creo que RC se refiere a "Read count". Esta variable almacena el número de bits que se leen del FTDI. Como es un valor negativo se trata de un error, concretamente el -1 es LIBUSB_ERROR_IO.

Parece que el chip FTDI no está soldado correctamente. Puedes comprobar la orientación y la conectividad de los pines.

Un saludo.

Antonino Canal Cobián

unread,
Jan 5, 2017, 2:22:13 PM1/5/17
to FPGAwars: explorando el lado libre
Creo que fastidié el chip, de tanto soldarlo y desoldarlo. Voy a pedir otro y probar a ver. Barato no es je,je.

Eladio Delgado

unread,
Jan 5, 2017, 4:53:13 PM1/5/17
to fpga-wars-explora...@googlegroups.com

Hola Antonio,

Enhorabuena por el trabajo realizado!!!

Sí ya has configurado el FTDI como te ha comentado Juan en Twitter, lo más probable es un problema de soldadura algún componente incorrecto o mal orientado.

Además de las tensiones que te comenta Roberto está la 1V8, aunque debe estar bien si te detecta el FTDI.

Saludos,
Eladio


--
Has recibido este mensaje porque estás suscrito al grupo "FPGAwars: explorando el lado libre" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a fpga-wars-explorando-el-lado-libre+unsubscribe@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a fpga-wars-explorando-el-lado-li...@googlegroups.com.
Visita este grupo en https://groups.google.com/group/fpga-wars-explorando-el-lado-libre.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/fpga-wars-explorando-el-lado-libre/7fd0745f-a67a-41fc-986d-83d66ad093fb%40googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
0 new messages