[meta-ti] SPI_IOC_MESSAGE: Bad file descriptor

Riko Ho antonius.riko at gmail.com
Mon Jul 17 01:59:54 PDT 2017


Dear Meta-TI Members,

I tried to transmit bytes via SPI but

I got :

===

root at beaglebone:~/SPIDEV# ./spiDevLib
/dev/spidev1.0: spi mode 0, 8 bits per word, 24000000 Hz max
SPI_IOC_MESSAGE: Bad file descriptor
===

What do I miss here ?

Code :

int spi_init(char filename[40])
     {
         int file;
     __u8    mode, lsb, bits;
     __u32 speed=2500000;

         if ((file = open(filename,O_RDWR)) < 0)
         {
             printf("Failed to open the bus.");
             /* ERROR HANDLING; you can check errno to see what went 
wrong */
         //com_serial=0;
             exit(1);
             }

         ///////////////
         // Verifications
         ///////////////
         //possible modes: mode |= SPI_LOOP; mode |= SPI_CPHA; mode |= 
SPI_CPOL; mode |= SPI_LSB_FIRST; mode |= SPI_CS_HIGH; mode |= SPI_3WIRE; 
mode |= SPI_NO_CS; mode |= SPI_READY;
         //multiple possibilities using |
         /*
             if (ioctl(file, SPI_IOC_WR_MODE, &mode)<0)   {
                 perror("can't set spi mode");
                 return;
                 }
         */

             if (ioctl(file, SPI_IOC_RD_MODE, &mode) < 0)
                 {
                 perror("SPI rd_mode");
                 return;
                 }
             if (ioctl(file, SPI_IOC_RD_LSB_FIRST, &lsb) < 0)
                 {
                 perror("SPI rd_lsb_fist");
                 return;
                 }
         //sunxi supports only 8 bits
         /*
             if (ioctl(file, SPI_IOC_WR_BITS_PER_WORD, (__u8[1]){8})<0)
                 {
                 perror("can't set bits per word");
                 return;
                 }
         */
             if (ioctl(file, SPI_IOC_RD_BITS_PER_WORD, &bits) < 0)
                 {
                 perror("SPI bits_per_word");
                 return;
                 }
         /*
             if (ioctl(file, SPI_IOC_WR_MAX_SPEED_HZ, &speed)<0)
                 {
                 perror("can't set max speed hz");
                 return;
                 }
         */
             if (ioctl(file, SPI_IOC_RD_MAX_SPEED_HZ, &speed) < 0)
                 {
                 perror("SPI max_speed_hz");
                 return;
                 }


     printf("%s: spi mode %d, %d bits %sper word, %d Hz max\n",filename, 
mode, bits, lsb ? "(lsb first) " : "", speed);

     //xfer[0].tx_buf = (unsigned long)buf;
     xfer[0].len = 3; /* Length of  command to write*/
     xfer[0].cs_change = 0; /* Keep CS activated */
     xfer[0].delay_usecs = 0, //delay in us
     xfer[0].speed_hz = 2500000, //speed
     xfer[0].bits_per_word = 8, // bites per word 8

     //xfer[1].rx_buf = (unsigned long) buf2;
     xfer[1].len = 4; /* Length of Data to read */
     xfer[1].cs_change = 0; /* Keep CS activated */
     xfer[0].delay_usecs = 0;
     xfer[0].speed_hz = 2500000;
     xfer[0].bits_per_word = 8;

     return file;
     }

-- 
*

/*******/
Sent by Ubuntu LTS 16.04,
Kind regards,
Riko Ho
/*******/

*
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.yoctoproject.org/pipermail/meta-ti/attachments/20170717/3bfec189/attachment.html>


More information about the meta-ti mailing list