Jump to content

    

Работа с YOCTO

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

Edited by jenya7

Share this post


Link to post
Share on other sites

вобщем 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 как?

Edited by jenya7

Share this post


Link to post
Share on other sites
#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);

 

Share this post


Link to post
Share on other sites
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);

 

Share this post


Link to post
Share on other sites
2 minutes ago, jenya7 said:

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

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

Share this post


Link to post
Share on other sites
4 minutes ago, gosha-z said:

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

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

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

Share this post


Link to post
Share on other sites
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.

 

Share this post


Link to post
Share on other sites
10 minutes ago, aaarrr said:

 

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

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

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

Edited by jenya7

Share this post


Link to post
Share on other sites
31 minutes ago, jenya7 said:

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

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

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

Share this post


Link to post
Share on other sites
5 minutes ago, aaarrr said:

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

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

Share this post


Link to post
Share on other sites
7 minutes ago, aaarrr said:

В Yocto их придется собрать.

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

Share this post


Link to post
Share on other sites
3 minutes ago, jenya7 said:

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

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now