共有465人关注过本帖树形打印复制链接

主题:[求助]关于SPI求助,这里每个变量都是什么含义,谢谢!希望linux下的spi的软件应用有一个比较详细的说明

帅哥哟,离线,有人找我吗?
蜘蛛侦探
  1楼 | 信息 | 搜索 | 邮箱 | 主页


加好友 发短信
等级:新手上路
[求助]关于SPI求助,这里每个变量都是什么含义,谢谢!希望linux下的spi的软件应用有一个比较详细的说明  发帖心情 Post By:2018-11-16 16:08:00 [只看该作者]

特别是len是以什么为单位?然后tr[1]的变量speed_hz,bits_per_word又变成了0,到tr[2]又变了回来,最后ret是什么含义,好像linux下的spi的软件应用没有一个比较详细的说明。还有linux下spi是不是可以使用中断或者DMA?谢谢!


void ETA105::ETA105_ReadAD( )
{
    int ret,i1;
    uint8_t tx[] ={ 0x80,0x00 };
    uint8_t rx[4],rx2[4];
    uint16_t buffer[2];

    for(i1=0;i1<8;i1++)                       //读取八个通道的值
    {
        buffer[0]=0x0000;
        tx[0] = tx[0]+0x08;
        if(tx[0] > 0x3c)
            tx[0] = 0x04;
        //printf("tx=0x%.4x\n",tx[0]);
        tr[0].tx_buf = (unsigned long)tx;
        tr[0].rx_buf = NULL;
        tr[0].len = 2;
        tr[0].delay_usecs = 0;
        tr[0].speed_hz = Speed;
        tr[0].bits_per_word = Bits;

        tr[1].tx_buf = NULL;
        tr[1].rx_buf = (unsigned long)rx;
        tr[1].len = 2;
        tr[1].delay_usecs = 0;
        tr[1].speed_hz = 0;
        tr[1].bits_per_word = 0;
/*
        tr[2].tx_buf = NULL;
        tr[2].rx_buf = (unsigned long)rx2;
        tr[2].len = 2;
        tr[2].delay_usecs = 0;
        tr[2].speed_hz = Speed;
        tr[2].bits_per_word = Bits;*/
        ret = ioctl(m_fd, SPI_IOC_MESSAGE(2), tr );
        //ret = ioctl(m_fd, SPI_IOC_MESSAGE(1), tr );
        if (ret < 2 )
            pabort("can't send spi message");
        /*write(m_fd, tx, 2);
        read(m_fd, rx, 2);*/
        buffer[0] = rx[0];
        buffer[0] = buffer[0]<<8;
        buffer[0] |= rx[1];
/*        buffer[1] = rx2[0];
        buffer[1] = buffer[1]<<8;
        buffer[1] |= rx2[1];*/
        //sleep(1);
        printf("CH[%d]=%.3f\n", i1+1, buffer[0]/1000.000 );
        //printf("0x%.4X\n",buffer[0] );
        //printf("0x%.4X\n",buffer[1] );
        //sleep(1);
    }
    /*for( i1=0; i1<2; i1++ )
        printf("0x%.2X\n", rx[i1] );*/
}



  单帖管理 | 引用 | 回复 回到顶部
帅哥,在线噢!
hzc
  2楼 | 信息 | 搜索 | 邮箱 | 主页


加好友 发短信 员工
等级:业余侠客
  发帖心情 Post By:2018-11-16 17:42:00 [只看该作者]

你好,关于结构体中每个变量的意义,可以进入头文件中查看,里面的注释比较清楚,比如对于len的注释:图片点击可在新窗口打开查看

可以看出len的单位是byte,对于speed_hz和bits_per_word也可以从注释中看到定义,代码中tr[1]中的赋值不够严谨,应该和tr[0]保持一致,给你造成了困扰实在抱歉。

ret是接收ioctl函数的返回值,同样从头文件中的定义可以看到ioctl的返回值根据cmd不同会有不同的意义,这里就为实际读写的len。

DMA的话是在驱动中会自行启动,不需要在应用程序中设置。

关于说明,我们见光盘资料的编程手册中有对SPI的接口有一个简单的介绍,比较详细的资料可以参考linux提供的文档:https://www.kernel.org/doc/Documentation/spi/spidev

[此贴子已经被作者于2018-11-16 17:42:31编辑过]

  单帖管理 | 引用 | 回复 回到顶部
帅哥哟,离线,有人找我吗?
蜘蛛侦探
  3楼 | 信息 | 搜索 | 邮箱 | 主页


加好友 发短信
等级:新手上路
  发帖心情 Post By:2018-11-22 11:15:00 [只看该作者]

好的,谢谢您


  单帖管理 | 引用 | 回复 回到顶部
帅哥,在线噢!
hzc
  4楼 | 信息 | 搜索 | 邮箱 | 主页


加好友 发短信 员工
等级:业余侠客
  发帖心情 Post By:2018-11-22 12:26:00 [只看该作者]

图片点击可在新窗口打开查看不客气


  单帖管理 | 引用 | 回复 回到顶部

返回版面帖子列表

[求助]关于SPI求助,这里每个变量都是什么含义,谢谢!希望linux下的spi的软件应用有一个比较详细的说明

用户名:          
内容:
               签名