您好,我正在为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编译器并执行应用程序时,它显示消息错误。 我正在四处寻找,但找不到任何东西。 如果有人可以帮助我。