无法使用qt

时间:2018-08-15 15:01:38

标签: c++ qt spi imx6

您好,我正在为imx6飞思卡尔微处理器开发Qt应用程序。我正在使用qtcreator 4.2.1。 我需要使用imx6的SPI模块。在第一时间,我构建了3.14内核版本,并制作了一个以spidev_test示例为基础的程序。我的程序是:

第一个SPI配置:

int ret = 0;
device = "/dev/spidev0.0";
bits = 8;
speed = 4500000;
mode = 0;
delay = 0;

fd = open(device, O_RDWR);
if (fd < 0){
    pabort("can't open device");
}
else{
    qDebug("Open device");
}

/*
 * spi mode
 */
ret = ioctl(fd, SPI_IOC_WR_MODE, &mode);
if (ret == -1){
    pabort("can't set spi mode");
}

ret = ioctl(fd, SPI_IOC_RD_MODE, &mode);
if (ret == -1){
    pabort("can't get spi mode");
}
/*
 * bits per word
 */
ret = ioctl(fd, SPI_IOC_WR_BITS_PER_WORD, &bits);
if (ret == -1){
    pabort("can't set bits per word");
}

ret = ioctl(fd, SPI_IOC_RD_BITS_PER_WORD, &bits);
if (ret == -1){
    pabort("can't get bits per word");
}
/*
 * max speed hz
 */
ret = ioctl(fd, SPI_IOC_WR_MAX_SPEED_HZ, &speed);
if (ret == -1){
    pabort("can't set max speed hz");
}
ret = ioctl(fd, SPI_IOC_RD_MAX_SPEED_HZ, &speed);
if (ret == -1){
    pabort("can't get max speed hz");
}
qDebug("spi mode: %d\n", mode);
qDebug("bits per word: %d\n", bits);
qDebug("max speed: %d Hz (%d KHz)\n", speed, speed/1000);

然后传递函数:

void SpiCom :: transfer(int fd,unsigned char word){

int ret;
uint8_t rx[] = {0, };

spi_ioc_transfer tr;
unsigned char data[] = {word};
tr.tx_buf = (unsigned long)data;
tr.rx_buf = (unsigned long)rx;
tr.len = 1;
tr.delay_usecs = delay;
tr.speed_hz = speed;
tr.bits_per_word = bits;

ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr);
if (ret < 1)
    pabort("can't send spi message");

dataReaded = (unsigned char)rx[0];

}

使用3.14版本的内核,我的程序运行良好,但是我必须更新到4.9内核版本,然后我的程序无法正常工作。当我要传输数据时,始终显示“无法发送spi消息”消息错误。 如果我使用gcc编译器编译程序的这一部分,则可以,但是当我使用qt编译器并执行应用程序时,它显示消息错误。 我正在四处寻找,但找不到任何东西。 如果有人可以帮助我。

0 个答案:

没有答案