Direccionar a la FPGA desde el driver

27 views
Skip to first unread message

daniel garcia

unread,
May 22, 2012, 6:55:30 PM5/22/12
to Linux en-Caja
Hola a todos intento leer y escribir desde el driver de mi proyecto a
la FPGA, intente de la manera que encontre en linuxencaja en proyectos
santeriores:

Definir constantes
#define FPGA_CS JZ_GPIO_PORTB(26)
#define FPGA_BASE_BEGIN 0x15000000
#define FPGA_BASE_END 0x17FFFFFF

instanciar una variable
static void __iomem *ioaddress;

en la funcion de inicializacion static int __init irq_init(void)
jz_gpio_set_function (FPGA_CS, JZ_GPIO_FUNC_NONE);
jz_gpio_set_function (FPGA_CS, JZ_GPIO_FUNC_NONE);
ioaddress = __ioremap(FPGA_BASE_BEGIN, FPGA_BASE_END -
FPGA_BASE_BEGIN, _CACHE_UNCACHED);

Y al utilizar ioaddress que se supone almacena el valor virtual de la
direccion asi:
data_x = (unsigned int)(ioread32(ioaddress)& 0xFF);
data_y = (unsigned int)(ioread32(ioaddress+4)& 0xFF);

No obtengo los datos que loco en la FPGA, es mas ni siquiere accede a
ella, coloque un led para que se apagara cuando el procesador leyera,
pero no lo hace.

No se que este mal o quien podria darme una guia de como puede acceder
a la FPGA desde el driver para leer o escribir en esta. asi sea de
otra forma.

De antemano Gracias

capantojar

unread,
May 22, 2012, 11:30:29 PM5/22/12
to linux...@googlegroups.com
Hola
Usted tuvo que haber creado un modulo periférico en la FPGA, el cual debe asignarle una dirección, ésta dirección usted la escoje y debe ir en el módulo Address decoder (ver diagrama de bloques en http://linuxencaja.net/wiki/Xburst-FPGA_Interface) esta dirección toca sumarla a la dirección base para que el address decode active por medio de un chip select  el periféfico que quiere leer o escribir, (éste chip select es diferente al FPGA_CS) 
ejemplo  lectura periferico en el Driver :

static ssize_t periférico1_read(struct file *filp, char *buffer, size_t count, loff_t *offset)

  static int dato;
  dato = inb(BASE + periférico1_OFFSET);  //La direccion del modulo es 0xB5001800
  return copy_to_user(buffer, &dato, sizeof(dato)) ? -EFAULT : 0; //Envía al espacio de usuario el dato
}

Donde BASE es la dirección de la FPGA y periférico1_OFFSET es la direccion del modulo dentro de la FPGA

 En caso de que sólo disponga de un sólo periférico, le diría que siga el ejemplo del ADC que no usa driver en el espacio de kernel, todo lo hace en espacio de usuario, pero lo mas probable es que la nota del  proyecto incluya un driver.

Espero le ayude en algo

Andrés Gómez

unread,
May 23, 2012, 4:31:09 PM5/23/12
to linux...@googlegroups.com
Hola Todos!!

Me presento, soy Andres Gomez, docente ocacional universitario y amante de las soluciones libres.

Desde que me enteré del grupo por el amigo Andres Calderon siempre le he expresado mi admiracion y siempre le he dicho a Andres el constante deseo de aprender y hacer un poquito de lo que uds hacen.

Despues de muchos ires y venires, finalmente he organizado mis tiempos y quiero empezar a trabajar (desde cero) con sitemas embebidos.
Particularmente quiero empezar por los embebidos para router wifi,es decir, empezar a manejar OpenWRT.
He tratado de empezar de forma autodidacta, pero no he encontrado la forma. Ya he bajado copias del codigo, he generado el menu, seleccionado paquetes y compilado el OpenWRT obteniendo binarios de 6MB, pero eso ha sido todo.... de customizacion aun nada.

Uds me pueden guiar para saber como empezar el camino?

Bueno, muchas gracias!!

saludos

--
C. Andrés Gómez R.
Ing. Telecomunicaciones

Reply all
Reply to author
Forward
0 new messages