Перейти к содержанию
    

1 hour ago, aaarrr said:

А вот это у всех SoC'ов на свой лад. Проверьте утилитами из комплекта libgpiod и осциллографом/вольтметром/светодиодом.

понял. еще вопрос - я правильно понимаю что настроить пин как вход это - gpiod_line_request_output(line, ''out3'', 0);

 

кстати

line = gpiod_chip_get_line(chip, X) = BCMX

 

paspi_pinout.thumb.png.0278040cc3cba2a47b5db8b5ff4437c6.png

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вобщем UDP и SPI работают. непонятки только с UART.

по аналогии с SPI открываю дескриптор

file = open("/dev/serial0", O_RDWR);

(я тут не уверен serial0 или ttyAMA0)

 

Но с посылкой\приемом непонятно. в SPI

void SPI_Xfer(uint8_t opcode, uint16_t addr, uint16_t val)
{
    int status;

    spi_buff_tx[0] = opcode;
    spi_buff_tx[1] = addr >> 8;
    spi_buff_tx[2] = addr & 0xFF;
    spi_buff_tx[3] = val >> 8;
    spi_buff_tx[4] = val & 0xFF;

     xfer[0].len = 5;
     xfer[0].tx_buf = (unsigned long)spi_buff_tx;
     xfer[1].len = 5;
     xfer[1].rx_buf = (unsigned long)spi_buff_rx;

     status = ioctl(file, SPI_IOC_MESSAGE(1), xfer);

      if (status < 0)
      {
          perror("SPI IOC Failed\n");
      }
}

а с UART как?

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

#include <termios.h>
  
	struct termios olopts,ntopts;

	fd = open(dev,OPEN_FLAGS);
	tcgetattr(fd,&oldopts);
	memset(&ntopts,0,sizeof(ntopts));
	cfsetospeed(&ntopts,speed);
	cfsetispeed(&ntopts,speed);
	ntopts.c_cflag |= CS7|CLOCAL|CREAD;
	ntopts.c_iflag |= IGNPAR|IGNCR;
	ntopts.c_oflag |= OCRNL;
	ntopts.c_lflag |= ICANON;
	ntopts.c_cc[VMIN] = 1;
	ntopts.c_cc[VEOF] = 4;
	tcflush(fd,TCIFLUSH);
	tcsetattr(fd,TCSANOW,&ntopts);

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

29 minutes ago, gosha-z said:

#include <termios.h>
  
	struct termios olopts,ntopts;

	fd = open(dev,OPEN_FLAGS);
	tcgetattr(fd,&oldopts);
	memset(&ntopts,0,sizeof(ntopts));
	cfsetospeed(&ntopts,speed);
	cfsetispeed(&ntopts,speed);
	ntopts.c_cflag |= CS7|CLOCAL|CREAD;
	ntopts.c_iflag |= IGNPAR|IGNCR;
	ntopts.c_oflag |= OCRNL;
	ntopts.c_lflag |= ICANON;
	ntopts.c_cc[VMIN] = 1;
	ntopts.c_cc[VEOF] = 4;
	tcflush(fd,TCIFLUSH);
	tcsetattr(fd,TCSANOW,&ntopts);

 

спасибо. это я так понимаю настройка.

а запись\чтение можно так?

int count = write(fd, tx_buffer, len);

read(fd, rx_buffer, len);

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 minutes ago, jenya7 said:

а запись\чтение можно так?

Вроде так. Чтение вроде через epoll() работает

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, gosha-z said:

Вроде так. Чтение вроде через epoll() работает

у меня тут вот какой вопрос возник - в SPI я обращаюсь через ioctl - ioctl(file, SPI_IOC_MESSAGE(1), xfer);

но я так понимаю что можно обращаться к SPI через те же write, read. так же как и к UART через ioctl. А как лучше? Может я копаю слишком глубоко, просто как начинающий в линуксе хочу разобраться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Quote

Standard read() and write() operations are obviously only half-duplex, and
the chipselect is deactivated between those operations.  Full-duplex access,
and composite operation without chipselect de-activation, is available using
the SPI_IOC_MESSAGE(N) request.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

10 minutes ago, aaarrr said:

 

понял. спасибо.

если я написал все на малине на стандартных write, read, ioctl и получил исполняемый файл - он запуститься на YOCTO? у меня там другой процесор.

я правда писал на QT. возможно нужно ставить какой то ран тайм на целевую машину.

Изменено пользователем jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

31 minutes ago, jenya7 said:

если я написал все на малине на стандартных write, read, ioctl и получил исполняемый файл - он запуститься на YOCTO? у меня там другой процесор.

я правда писал на QT. возможно нужно ставить какой то ран тайм на целевую машину. 

Либы Qt нужны. А так запустится, если архитектура та же.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 minutes ago, aaarrr said:

Либы Qt нужны. А так запустится, если архитектура та же.

блин. я не могу поставить либы. этот YOCTO не знает apt-get. и еще половины команд

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 minutes ago, jenya7 said:

а как? подскажите

Увы, не подскажу, т.к. с Yocto не работаю (по мне, это тихий ужас).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...