LINUX.ORG.RU

Работа с SPI через ioctl

 , ,


0

1

Привет всем! Сейчас работаю с SPI на процессоре iMX536. Не получается отправить сообщение через ioctl. Выдаётся ошибка: ioctl error: Bad address. Помогите разобраться или подскажите куда копать. И ещё вопрос: через ioctl SPI работает full-duplex? Заранее спасибо за ответы.

 int main(int argc, char **argv)
 {
         int fd = 0;
         char buff[32];
         char rbuff[32];  
 
         fd = open(PATH, O_RDWR, 0);
         if (fd == -1) {
                 perror("open error");
         }
  
         ioc_transfer.tx_buf        = (unsigned long)buff;
         ioc_transfer.rx_buf        = (unsigned long)rbuff;
         ioc_transfer.len           = 32;
         ioc_transfer.delay_usecs   = 0;
         ioc_transfer.speed_hz      = 1000000;
         ioc_transfer.cs_change     = 1;
         ioc_transfer.bits_per_word = 8;
 
         for(;;) {
                 int ret = ioctl(fd, SPI_IOC_MESSAGE(1), &ioc_transfer);
                 if (ret == -1) {
                         perror("ioctl error");
                         return -1;
                 }
 
                 usleep(1000000 / send_pack_freq);
         }
 
         return 0;
}

PS Всем хороших выходных)))

через ioctl SPI работает full-duplex

несколько лет не трогал SPI под Linux, предположу что да, ибо ioc_transfer.rx_buf - не случайно и судя по логике работы с SPI я бы удивился если иначе

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от elbondyto

ты пробовал какие-ниубдь утилиты для теста? попробуй сначала поработать с SPI из командной строки - это реально

например для I2C в Linux я юзал спец программку стандартную которая опрашивает шину

для SPI знаю есть способ работать из консоли - я бы с этого начал - если из консоли не работает, то и своя программа тоже не будет наверное...

I-Love-Microsoft ★★★★★ ()
Ответ на: комментарий от I-Love-Microsoft

утилиты не пробовал. но я замкнул mosi и miso и работал через write() и read(), как с обычным файлом. write() у меня работал, я проверял на осциллографе, а вот read() читал одни нули, поэтому я решил попробовать через ioctl

elbondyto ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.