Здравствуйте, я разрабатываю приложение Qt для свободно распространяемого микропроцессора imx6. Я использую qtcreator 4.2.1.
Мне нужно использовать модуль SPI imx6. На первом я собираю версию ядра 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 :: перевод (int fd, беззнаковое слово) {
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, а затем моя программа не работает. Когда я хочу передать данные, всегда отображается сообщение об ошибке «Не удается отправить сообщение».
Если я компилирую эту часть программы с помощью компилятора gcc, но когда я использую компилятор qt и запускаю приложение, он показывает сообщение об ошибке.
Я ищу везде, но ничего не могу найти.
Если кто-то может мне помочь.
Задача ещё не решена.
Других решений пока нет …