Сёха 0 18 ноября, 2022 Опубликовано 18 ноября, 2022 · Жалоба Здравствуйте!, не могу заставить работать 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; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gridinp 2 18 ноября, 2022 Опубликовано 18 ноября, 2022 (изменено) · Жалоба RPi с I2C работает другими ioctl, нужно: i2c_rdwr_ioctl_data i2c_request; // ... ioctl(fd, I2C_RDWR, &i2c_request); Изменено 19 ноября, 2022 пользователем gridinp Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сёха 0 19 ноября, 2022 Опубликовано 19 ноября, 2022 · Жалоба В 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В... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gridinp 2 19 ноября, 2022 Опубликовано 19 ноября, 2022 · Жалоба В printf добавьте strerror, чтобы код ошибки понять, и сначала попробуйте с устройством пообщаться с консоли, через i2cset, i2cget Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сёха 0 20 ноября, 2022 Опубликовано 20 ноября, 2022 · Жалоба В 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: -- -- -- -- -- -- -- -- что это значить? он не видит устройство? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 20 ноября, 2022 Опубликовано 20 ноября, 2022 · Жалоба 5 minutes ago, Сёха said: он не видит устройство? Да, пустая шина. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сёха 0 20 ноября, 2022 Опубликовано 20 ноября, 2022 · Жалоба как же так, соединение есть, на старой RaspOS всё работало, купили новую партию CM4, старая OS на них не ставится, после установки последней версии i2c не работает!, но печатные платы не менялись... они уже в продакшн и стоят на нескольких объектах... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 20 ноября, 2022 Опубликовано 20 ноября, 2022 · Жалоба 36 minutes ago, Сёха said: купили новую партию CM4, старая OS на них не ставится 36 minutes ago, Сёха said: но печатные платы не менялись... Выглядит как противоречие. Попробуйте отключить i2c-4, а пинами поуправлять вручную. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gridinp 2 20 ноября, 2022 Опубликовано 20 ноября, 2022 · Жалоба посмотрите dmesg, может по ногам конфликт с другим драйвером Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jury093 2 20 ноября, 2022 Опубликовано 20 ноября, 2022 (изменено) · Жалоба 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], чисто проверить исправность шины и её настройки. Изменено 20 ноября, 2022 пользователем Jury093 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться