Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

130
Views
Controlador Linux para quad spi en Zedboard

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

over 4 years ago · Santiago Trujillo
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!