Soy un SoC bastante nuevo y actualmente estoy trabajando con la plataforma de evaluación Zedboard. Incluí un SPI cuádruple en mi diseño de bloque y quiero comunicarme con él a través de Linux que se ejecuta en uno de los procesadores ARM. Necesito el SPI para transmitir/recibir 32 bits en una ráfaga y manejar la comunicación desde C++. Sin embargo, no puedo hacerlo funcionar.
El SPI cuádruple está configurado como estándar, sin FIFO y ancho de transacción = 32 bits. He actualizado el árbol de dispositivos de Linux de la siguiente manera:
axi_quad_spi_0@41E00000 { compatible = "xlnx,xps-spi-2.00.b", "xlnx,xps-spi-2.00.a"; #address-cells = <0x1>; #size-cells = <0x0>; interrupt-parent = <0x2>; interrupts = <0x0 0x39 0x1>; reg = <0x41e00000 0xffff>; xlnx,fifo-exist = <0x0>; xlnx,num-ss-bits = <0x2>; xlnx,num-transfer-bits = <0x20>; xlnx,sck-ratio = <0x10>; device@0 { compatible = "spidev"; reg = <0x0>; spi-max-frequency = <0x5f5e10>; }; device@1 { compatible = "spidev"; reg = <0x1>; spi-max-frequency = <0x5f5e10>; };Después de esto, puedo ver spidev0.0 y spidev.0.1 en /dev como se esperaba. Además, cuando escribo en los archivos del dispositivo con bits_per_word = 8, obtengo una ráfaga de 8 bits del SPI cuádruple pero con 32 períodos de reloj, es decir, obtengo el primer byte correspondiente a 1/4 de la ráfaga de 32 bits (visto con sondas de depuración). en Vivo). Supongo que veo esto porque el ancho de la transacción está configurado en 32 bits.
Sin embargo, cuando quiero cambiar la ráfaga a 32 bits (bits_per_word = 32) no funciona. Recibo el mensaje "xilinx_spi_setup_transfer, bits_per_word=32 no admitidos" en mi terminal Linux.
Yo uso el siguiente código en C++:
uint8_t tx[] = { 0xAD, 0xEF, 0x01, 0x23 }; uint8_t rx[4] = { 0 }; struct spi_ioc_transfer tr[2]; tr[0].tx_buf = (unsigned long)tx; tr[0].rx_buf = (unsigned long)rx; tr[0].len = 4; tr[0].delay_usecs = delay; tr[0].speed_hz = speed; tr[0].bits_per_word = 32; tr[0].cs_change = 0; ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr);He intentado compilar el controlador xilinx xilinx-spi.c pero cuando trato de instalarlo (con "modprobe xilinx_spi" en Linux) dice que "Dispositivo o recurso ocupado".
¿Cómo consigo que esto admita 32 bits para poder transmitir/recibir 32 bits en una ráfaga? ¿Alguien puede ayudarme aquí? ¡Gracias!
Hermano jacob