Желательно для работы через python
Автор сообщения в Telegram: Иван
Учитывая, что есть решение снова от Adafruit: CircuitPython, обновление Platform Detect (выше) может помочь и открыть мир кучи готовых библиотек. Я сегодня продолжу ковырять, но так как у меня мало опыта с совсем низким уровнем (адреса), то пока ничего не могу обещать
Автор сообщения в Telegram: Suren Khorenyan
addr = 64
print("problematic write 1")
buf = b"\x00\x14"
bus.write_bytes(addr, buf)
print("problematic write 2")
buf = b"\x06\x00\x00\xff\x07"
bus.write_bytes(addr, buf)
write_bytes происходит сначала вызов ioctl, а затем запись байтов в файл.root@Repka-Pi:~# echo -n -e '\x00\x00' > /dev/i2c-0
-bash: echo: write error: Input/output error
root@Repka-Pi:~# echo -n -e '\x06\x00\x00\xff\x07' > /dev/i2c-0
-bash: echo: write error: Input/output error
root@Repka-Pi:~# echo -n -e '\x06\x00\x00\xff\x07' > /dev/i2c-0
root@Repka-Pi:~# echo -n -e '\x06\x00\x00\xff\x07' > /dev/i2c-0
root@Repka-Pi:~# echo -n -e '\x00\x00' > /dev/i2c-0
root@Repka-Pi:~# ls -l /dev/i2*
crw-rw---- 1 root i2c 89, 0 Jan 5 12:24 /dev/i2c-0
crw-rw---- 1 root i2c 89, 1 Jan 5 12:24 /dev/i2c-1
crw-rw---- 1 root i2c 89, 2 Jan 5 12:24 /dev/i2c-2
root@Repka-Pi:~# ls -l /sys/bus/i2c/devices/i2c*
lrwxrwxrwx 1 root root 0 Jan 5 12:24 /sys/bus/i2c/devices/i2c-0 -> ../../../devices/platform/soc/1ee0000.hdmi/i2c-0
lrwxrwxrwx 1 root root 0 Jan 5 12:24 /sys/bus/i2c/devices/i2c-1 -> ../../../devices/platform/soc/1c2ac00.i2c/i2c-1
lrwxrwxrwx 1 root root 0 Jan 5 12:24 /sys/bus/i2c/devices/i2c-2 -> ../../../devices/platform/soc/1f02400.i2c/i2c-2
Привет
Я полдня проковырялся с управлением i2c из питона, не справляюсь, нужна помощь кого-то из разработчиков репки / низкоуровневых прогеров / знакомых с железками людей
Я допускаю, что дело может быть в таймингах (времени обращения), так как проблема чутка плавающая.
Что делаю:
- Через Python пытаюсь обратиться к файлу, записать туда байты. Обычно запись проходит успешно, но в какие-то моменты нет. Закономерность вижу, причину не вижу. Вывел два примера проблематичных вызовов, при этом иногда первый проходит успешно (без проблем)
Код:addr = 64 print("problematic write 1") buf = b"\x00\x14" bus.write_bytes(addr, buf) print("problematic write 2") buf = b"\x06\x00\x00\xff\x07" bus.write_bytes(addr, buf)
Внутриwrite_bytesпроисходит сначала вызовioctl, а затем запись байтов в файл.
При этом если записывать ноль, то всегда всё ок, не падает. Хотя через терминал тоже плавающая проблема. Вот неуспех:
А вот успех:Код:root@Repka-Pi:~# echo -n -e '\x00\x00' > /dev/i2c-0 -bash: echo: write error: Input/output error root@Repka-Pi:~# echo -n -e '\x06\x00\x00\xff\x07' > /dev/i2c-0 -bash: echo: write error: Input/output error
В чем причина я даже не могу догадаться. Если кто-то готов поучаствовать, хотя бы приложить пример кода на C/C++, в котором всё будет стабильно работать, я готов ещё поковырять. Но пока ставлю это на паузу, так как застрял.Код:root@Repka-Pi:~# echo -n -e '\x06\x00\x00\xff\x07' > /dev/i2c-0 root@Repka-Pi:~# echo -n -e '\x06\x00\x00\xff\x07' > /dev/i2c-0 root@Repka-Pi:~# echo -n -e '\x00\x00' > /dev/i2c-0
Что удалось накопать:
- Через repka-config сделал режим платы 2, где должен быть один i2c, но почему-то по файлам их будто три:
РаспиновкаКод:root@Repka-Pi:~# ls -l /dev/i2* crw-rw---- 1 root i2c 89, 0 Jan 5 12:24 /dev/i2c-0 crw-rw---- 1 root i2c 89, 1 Jan 5 12:24 /dev/i2c-1 crw-rw---- 1 root i2c 89, 2 Jan 5 12:24 /dev/i2c-2
Не знаю, даёт ли это что-то, но почему-то bus i2c будто указывает на hdmi. Без понятия, должно ли быть так:
Код:root@Repka-Pi:~# ls -l /sys/bus/i2c/devices/i2c* lrwxrwxrwx 1 root root 0 Jan 5 12:24 /sys/bus/i2c/devices/i2c-0 -> ../../../devices/platform/soc/1ee0000.hdmi/i2c-0 lrwxrwxrwx 1 root root 0 Jan 5 12:24 /sys/bus/i2c/devices/i2c-1 -> ../../../devices/platform/soc/1c2ac00.i2c/i2c-1 lrwxrwxrwx 1 root root 0 Jan 5 12:24 /sys/bus/i2c/devices/i2c-2 -> ../../../devices/platform/soc/1f02400.i2c/i2c-2
Автор сообщения в Telegram: Suren Khorenyan
Привет
Я полдня проковырялся с управлением i2c из питона, не справляюсь, нужна помощь кого-то из разработчиков репки / низкоуровневых прогеров / знакомых с железками людей
Я допускаю, что дело может быть в таймингах (времени обращения), так как проблема чутка плавающая.
Что делаю:
- Через Python пытаюсь обратиться к файлу, записать туда байты. Обычно запись проходит успешно, но в какие-то моменты нет. Закономерность вижу, причину не вижу. Вывел два примера проблематичных вызовов, при этом иногда первый проходит успешно (без проблем)
Код:addr = 64 print("problematic write 1") buf = b"\x00\x14" bus.write_bytes(addr, buf) print("problematic write 2") buf = b"\x06\x00\x00\xff\x07" bus.write_bytes(addr, buf)
Внутриwrite_bytesпроисходит сначала вызовioctl, а затем запись байтов в файл.
При этом если записывать ноль, то всегда всё ок, не падает. Хотя через терминал тоже плавающая проблема. Вот неуспех:
А вот успех:Код:root@Repka-Pi:~# echo -n -e '\x00\x00' > /dev/i2c-0 -bash: echo: write error: Input/output error root@Repka-Pi:~# echo -n -e '\x06\x00\x00\xff\x07' > /dev/i2c-0 -bash: echo: write error: Input/output error
В чем причина я даже не могу догадаться. Если кто-то готов поучаствовать, хотя бы приложить пример кода на C/C++, в котором всё будет стабильно работать, я готов ещё поковырять. Но пока ставлю это на паузу, так как застрял.Код:root@Repka-Pi:~# echo -n -e '\x06\x00\x00\xff\x07' > /dev/i2c-0 root@Repka-Pi:~# echo -n -e '\x06\x00\x00\xff\x07' > /dev/i2c-0 root@Repka-Pi:~# echo -n -e '\x00\x00' > /dev/i2c-0
Что удалось накопать:
- Через repka-config сделал режим платы 2, где должен быть один i2c, но почему-то по файлам их будто три:
РаспиновкаКод:root@Repka-Pi:~# ls -l /dev/i2* crw-rw---- 1 root i2c 89, 0 Jan 5 12:24 /dev/i2c-0 crw-rw---- 1 root i2c 89, 1 Jan 5 12:24 /dev/i2c-1 crw-rw---- 1 root i2c 89, 2 Jan 5 12:24 /dev/i2c-2
Не знаю, даёт ли это что-то, но почему-то bus i2c будто указывает на hdmi. Без понятия, должно ли быть так:
Код:root@Repka-Pi:~# ls -l /sys/bus/i2c/devices/i2c* lrwxrwxrwx 1 root root 0 Jan 5 12:24 /sys/bus/i2c/devices/i2c-0 -> ../../../devices/platform/soc/1ee0000.hdmi/i2c-0 lrwxrwxrwx 1 root root 0 Jan 5 12:24 /sys/bus/i2c/devices/i2c-1 -> ../../../devices/platform/soc/1c2ac00.i2c/i2c-1 lrwxrwxrwx 1 root root 0 Jan 5 12:24 /sys/bus/i2c/devices/i2c-2 -> ../../../devices/platform/soc/1f02400.i2c/i2c-2
Автор сообщения в Telegram: Suren Khorenyan
Ну смотрите. У вас в примере i2c0 но в схеме i2c0 нет.
Автор сообщения в Telegram: Дмитрий
/etc/repka-config.d/pin-mode, и понять, какой режим. Или так не получится?Привет
Я полдня проковырялся с управлением i2c из питона, не справляюсь, нужна помощь кого-то из разработчиков репки / низкоуровневых прогеров / знакомых с железками людей
Я допускаю, что дело может быть в таймингах (времени обращения), так как проблема чутка плавающая.
Что делаю:
- Через Python пытаюсь обратиться к файлу, записать туда байты. Обычно запись проходит успешно, но в какие-то моменты нет. Закономерность вижу, причину не вижу. Вывел два примера проблематичных вызовов, при этом иногда первый проходит успешно (без проблем)
Код:addr = 64 print("problematic write 1") buf = b"\x00\x14" bus.write_bytes(addr, buf) print("problematic write 2") buf = b"\x06\x00\x00\xff\x07" bus.write_bytes(addr, buf)
Внутриwrite_bytesпроисходит сначала вызовioctl, а затем запись байтов в файл.
При этом если записывать ноль, то всегда всё ок, не падает. Хотя через терминал тоже плавающая проблема. Вот неуспех:
А вот успех:Код:root@Repka-Pi:~# echo -n -e '\x00\x00' > /dev/i2c-0 -bash: echo: write error: Input/output error root@Repka-Pi:~# echo -n -e '\x06\x00\x00\xff\x07' > /dev/i2c-0 -bash: echo: write error: Input/output error
В чем причина я даже не могу догадаться. Если кто-то готов поучаствовать, хотя бы приложить пример кода на C/C++, в котором всё будет стабильно работать, я готов ещё поковырять. Но пока ставлю это на паузу, так как застрял.Код:root@Repka-Pi:~# echo -n -e '\x06\x00\x00\xff\x07' > /dev/i2c-0 root@Repka-Pi:~# echo -n -e '\x06\x00\x00\xff\x07' > /dev/i2c-0 root@Repka-Pi:~# echo -n -e '\x00\x00' > /dev/i2c-0
Что удалось накопать:
- Через repka-config сделал режим платы 2, где должен быть один i2c, но почему-то по файлам их будто три:
РаспиновкаКод:root@Repka-Pi:~# ls -l /dev/i2* crw-rw---- 1 root i2c 89, 0 Jan 5 12:24 /dev/i2c-0 crw-rw---- 1 root i2c 89, 1 Jan 5 12:24 /dev/i2c-1 crw-rw---- 1 root i2c 89, 2 Jan 5 12:24 /dev/i2c-2
Не знаю, даёт ли это что-то, но почему-то bus i2c будто указывает на hdmi. Без понятия, должно ли быть так:
Код:root@Repka-Pi:~# ls -l /sys/bus/i2c/devices/i2c* lrwxrwxrwx 1 root root 0 Jan 5 12:24 /sys/bus/i2c/devices/i2c-0 -> ../../../devices/platform/soc/1ee0000.hdmi/i2c-0 lrwxrwxrwx 1 root root 0 Jan 5 12:24 /sys/bus/i2c/devices/i2c-1 -> ../../../devices/platform/soc/1c2ac00.i2c/i2c-1 lrwxrwxrwx 1 root root 0 Jan 5 12:24 /sys/bus/i2c/devices/i2c-2 -> ../../../devices/platform/soc/1f02400.i2c/i2c-2
Автор сообщения в Telegram: Suren Khorenyan
PCA9685 ничего не делает, пытаюсь разобраться, в чем может быть дело. То есть команды отправлены, а у меня не загорается светодиод, не двигается серва. Буду дальше ковырятьТеперь запись в i2c-1 идёт без ошибок. Спасибо, что указали на ошибку.
Правда, пока чтоPCA9685ничего не делает, пытаюсь разобраться, в чем может быть дело. То есть команды отправлены, а у меня не загорается светодиод, не двигается серва. Буду дальше ковырять
Автор сообщения в Telegram: Suren Khorenyan
(файл из Telegram export не включен в файл экспорта: video.mp4)
Автор сообщения в Telegram: Suren Khorenyan
(файл из Telegram export не включен в файл экспорта: video.mp4)
Автор сообщения в Telegram: Suren Khorenyan
Ура! Удалось запрограммировать на питоне при помощи модифицированных библиотек Adafruit. Завтра причешу и опубликую PR
Автор сообщения в Telegram: Suren Khorenyan
Opencv использовали?
Автор сообщения в Telegram: Denisov Yury