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

RPi CM4, I2C-4 Error writing: Remote I/O error

Здравствуйте!, не могу заставить работать I2C-4, выдаёт ошибку I2C-4 Error writing: Remote I/O error. Помогите пожалуйста настроить...

sudo nano /boot/config.txt
###i2c-4
dtoverlay=i2c4,pins_6_7=1

rpi@raspberrypi:~ $ ls -la /dev | grep i2c-4
crw-rw----   1 root i2c      89,   4 Nov 18 19:17 i2c-4

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <linux/i2c-dev.h>
#include <linux/i2c.h>
#include <sys/ioctl.h>
#include <errno.h>
	#define I2C_ADDR 0x20
	int main (void) {
    int value = 0x6;
    int fd;
	    fd = open("/dev/i2c-1", O_RDWR);
	    if (fd < 0) {
        printf("Error opening file: %s\n", strerror(errno));
        return -1;
    }
	    if (ioctl(fd, I2C_SLAVE, I2C_ADDR) < 0) {
        printf("ioctl error: %s\n", strerror(errno));
        return -1;
    }
	    while(1)
    {
        if( write( fd , &value, 1 ) != 1) {
            printf("Error writing: %s\n", strerror(errno));
        }
        usleep(1000000);
    }
    return 1;
}

 

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


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

RPi с I2C работает другими ioctl, нужно:

i2c_rdwr_ioctl_data i2c_request;
// ...
ioctl(fd, I2C_RDWR, &i2c_request);

 

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

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


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

В 18.11.2022 в 21:14, gridinp сказал:

RPi с I2C работает другими ioctl...

вот, накидал по примерам

typedef unsigned char uc8;

#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/spi/spidev.h>
#include <sys/time.h>
#include <linux/i2c-dev.h>
#include <linux/i2c.h>


int main(int argc, char **argv) {


  int fd = open("/dev/i2c-4", O_RDWR);

  if (fd<0)
  {
        printf("error open i2c\n");
        return -1;
  }
        printf("open i2c OK\n");

  uc8 address = 0x20;
  uc8 command[] = {0x6};

  struct i2c_msg message = { address, 0, sizeof(command), command };
  struct i2c_rdwr_ioctl_data ioctl_data = { &message, 1 };

  int result = ioctl(fd, I2C_RDWR, &ioctl_data);

  if (result<0)
  {
    printf("error write i2c\n");
    return -1;
  }
    printf("write i2c OK\n");

  return 0;
}
rpi@raspberrypi:~ $ ./i2c
open i2c OK
error write i2c

Не понимаю в чём дело...

rpi@raspberrypi:~ $ raspi-gpio get
BANK0 (GPIO 0 to 27):
GPIO 6: level=1 fsel=2 alt=5 func=SDA4 pull=UP
GPIO 7: level=1 fsel=2 alt=5 func=SCL4 pull=UP

На линиях 3,3В...

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


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

В printf добавьте strerror, чтобы код ошибки понять, и сначала попробуйте с устройством пообщаться с консоли, через i2cset, i2cget

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


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

В 19.11.2022 в 17:28, gridinp сказал:

добавьте strerror

rpi@raspberrypi:~ $ ./i2c
open i2c OK
error write i2c: Remote I/O error
rpi@raspberrypi:~ $ i2cget 4 0x20 0x12
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will read from device file /dev/i2c-4, chip address 0x20, data address
0x12, using read byte data.
Continue? [Y/n] y
Error: Read failed
rpi@raspberrypi:~ $ i2cdetect -y 4
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

что это значить? он не видит устройство?

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


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

как же так, соединение есть, на старой RaspOS всё работало,

купили новую партию CM4, старая OS на них не ставится,

после установки последней версии i2c не работает!, но печатные платы не менялись...

они уже в продакшн и стоят на нескольких объектах...

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


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

36 minutes ago, Сёха said:

купили новую партию CM4, старая OS на них не ставится

36 minutes ago, Сёха said:

но печатные платы не менялись...

Выглядит как противоречие.

 

Попробуйте отключить i2c-4, а пинами поуправлять вручную.

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


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

7 часов назад, Сёха сказал:

как же так, соединение есть, на старой RaspOS всё работало,

купили новую партию CM4, старая OS на них не ставится,

после установки последней версии i2c не работает!, но печатные платы не менялись...

а что у вас на 0х20? если gpio expander, то он может не детектиться i2cdetect, но i2cget/set работают

если что-то самолепное, то может какой сигнал reset не отпустили от малины до слейва?

если есть осциллограф, то в момент старта i2cdetect посмотрите диаграммы сигналов sda/scl, как минимум там д.б. пачки импульсов, ну и красивой формы желательно

скорость шины д.б. не выше (по умолчанию 100 кГц) чем у слейва

кстати, на профильном форуме вам посоветовали внешние пуллапы поставить (т.к. у rp4 встроенные довольно большие по номиналу), временно привесьте 1к8-3к3

ну и как вариант, перекрутите шинку 4 на i2c-gpio, как пример (поправьте под свое железо)

dtoverlay=i2c-gpio,i2c_gpio_sda=2,i2c_gpio_scl=3,i2c_gpio_delay_us=2,bus=1

добавлено: мало ли ваша доплата на длинном шлейфе подключена к шине, отключите и на 4-х коротких проводках подключите в качестве проверки что-то типа 24c02[c32], чисто проверить исправность шины и её настройки.

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

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


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

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

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

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

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

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

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

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

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

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