Warning: touch() [function.touch]: Unable to create file /home/starterkit/starterkit.ru/html/error.log because Permission denied in /home/starterkit/starterkit.ru/html/errorhandler.php on line 51
Работа с SPI в Qt - Embedded Linux - Форум - starterkit.ru
Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru
Партнеры:
otladka.com.ua - г.Киев

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:0
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:4
Форум » starterkit.ru » Embedded Linux
Работа с SPI в Qt
rain62ster
Добавлено 08.09.2015 21:46
0
Сообщение: 1
rain62ster
0

Пункты: 3830
Регистрация: 02.10.2009
Медленно, со скрипом, продвигаюсь вперед. Изменил под свои нужды AT91-SK_800x480.dts/ Добавил matrix_keypad 5x4(работает), 7 Leds(работают), Также сделал попытку добавить нужный мне SPI. Получил в /device/ файл spi32766.2 -(допустимое имя?)
Внедряю в Qt программу фрагменты spidev_test.c с общеизвестного ресурса. Qt не принимает строку 262 fd = open(device, O_RDWR);
Не подскажете ли аналог open() в Qt.

PS: QFile::open() приспособить не получилось.
Спуститься к концу Подняться к началу
Персональная информация
titan83
Добавлено 09.09.2015 13:46 Сообщение: 2
titan83
3

Пункты: 3141
Регистрация: 16.12.2012
Если у вас правильно настроен настроен spidev, то на выходе вы будете иметь простой файл (у вас вроде так и есть). И Qt реально все равно, что за этим файлом скрывается.
Вот мой кусок кода.
bool QFRAM::openFRAMFile(QString paramFRAMFileName)
{
if (!(FRAMFile->isOpen()))
{
FRAMFile->setFileName(paramFRAMFileName);
if (FRAMFile->open(QIODevice::ReadWrite))
return true;
}
return false;
}
FRAMFile - это как раз QFile.
Работаю таким образом с микросхемой FRAM.
Спуститься к концу Подняться к началу
Персональная информация
rain62ster
Добавлено 09.09.2015 14:37 Редактировалось 09.09.2015 14:39 Сообщение: 3
rain62ster
0

Пункты: 3830
Регистрация: 02.10.2009
Цитата
Если у вас правильно настроен настроен spidev, то на выходе вы будете иметь простой файл (у вас вроде так и есть). И Qt реально все равно, что за этим файлом скрывается.

FRAMFile - это как раз QFile.
Работаю таким образом с микросхемой FRAM.



Спасибо за ответ. В общих чертах есть понимание, как использовать QFile.Хотелось, с целью лучшего понимания, "пошагово" пройти пример:
http://lxr.free-electrons.com/source/Documentation/spi/spidev_test.c


вот фрагмент из него:

Код

int fd;
fd = open(device, O_RDWR);
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");


частично переработал ввиду отсутствия pabort

Код

int fd;
fd = open("/dev/spi32766.2", O_RDWR);
ret = ioctl(fd, SPI_IOC_WR_BITS_PER_WORD, &bits);
if (ret == -1)
qDebug() << "can't set bits per word";

ret = ioctl(fd, SPI_IOC_RD_BITS_PER_WORD, &bits);
if (ret == -1)
qDebug() << "can't get bits per word";


Вы как то используете ioctl в Qt? Приведете пример ?
Спуститься к концу Подняться к началу
Персональная информация
titan83
Добавлено 09.09.2015 14:58 Сообщение: 4
titan83
3

Пункты: 3141
Регистрация: 16.12.2012
--> Вы как то используете ioctl в Qt? Приведете пример ?
spi_struct.tx_buf = (unsigned long)readCmd.data();
spi_struct.rx_buf = (unsigned long)result.data();
spi_struct.len = bytesCount + CMD_FIELD_SIZE + ADDR_FIELD_SIZE;

ioctl(FRAMFile->handle(), SPI_IOC_MESSAGE(1), &spi_struct);
readCmd, result - это QByteArray.
Спуститься к концу Подняться к началу
Персональная информация
titan83
Добавлено 09.09.2015 15:01 Сообщение: 5
titan83
3

Пункты: 3141
Регистрация: 16.12.2012
И на счет SPI_IOC_RD_BITS_PER_WORD - не знаю какая у вас плата, но у меня на 9G45 такая проверка очень удручала драйвер (ибо он не поддерживал эту опцию). В результате у меня ее просто нет.
Спуститься к концу Подняться к началу
Персональная информация
rain62ster
Добавлено 09.09.2015 15:10 Сообщение: 6
rain62ster
0

Пункты: 3830
Регистрация: 02.10.2009
Цитата
--> Вы как то используете ioctl в Qt? Приведете пример ?
spi_struct.tx_buf = (unsigned long)readCmd.data();
spi_struct.rx_buf = (unsigned long)result.data();
spi_struct.len = bytesCount + CMD_FIELD_SIZE + ADDR_FIELD_SIZE;

ioctl(FRAMFile->handle(), SPI_IOC_MESSAGE(1), &spi_struct);
readCmd, result - это QByteArray.



Спасибо!! Похоже это именно, чего мне не хватало.

PS: плата SK-SAMA5D3-SODIMM
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux