Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:1
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:5
Форум » starterkit.ru » Процессорные модули » SK-iMX6S/D-SODIMM
Как настроить i2c
svirid132
Добавлено 13.01.2023 01:41
0
Сообщение: 1
svirid132
0

Пункты: 768
Регистрация: 26.10.2021
Здравствуйте, у меня проблема в непонимании того, как начать использовать шину i2c программно. У меня проект на Qt, в котором SK-iMX6S-SODDIM является мастером, а arduino uno ведомым устройством. Я присоединил 2 пина: I2C1_SDA - x9 пин 5 и I2C1_SCL - x9 пин 6 к arduino uno. Прошил скретч для arduino:
Код
#include <Wire.h> // подключаем библиотеку

void setup() {
Wire.begin(8); // запускаем шину на адресе 8
Wire.onRequest(requestEvent); // назначаем функцию отправки данных
}

void loop() {
}

void requestEvent() { // функция, вызывается автоматически при получении запроса от мастера
Wire.write("hello "); // отправляем сообщение
}

И дальше у меня тупик. Я не знаю, что мне делать, чтобы отправить запрос на arduino и получить ответ. Я думал, что нужно написать мини драйвера для i2c дескриптора, но его нету в /dev директории:
Код
autofs mxc_asrc tty23 tty54
block mxc_hdmi tty24 tty55
bus mxc_ipu tty25 tty56
caam-keygen mxc_vpu tty26 tty57
char null tty27 tty58
console pps0 tty28 tty59
cpu_dma_latency ptmx tty29 tty6
disk ptp0 tty3 tty60
dma_heap pts tty30 tty61
dri random tty31 tty62
fb0 rtc tty32 tty63
fb1 rtc0 tty33 tty7
fb2 shm tty34 tty8
fd snd tty35 tty9
full stderr tty36 ttyGS0
galcore stdin tty37 ttymxc0
gpiochip0 stdout tty38 ttymxc1
gpiochip1 tty tty39 ttymxc2
gpiochip2 tty0 tty4 ubi_ctrl
gpiochip3 tty1 tty40 urandom
gpiochip4 tty10 tty41 v4l
gpiochip5 tty11 tty42 vcs
gpiochip6 tty12 tty43 vcs1
hwrng tty13 tty44 vcsa
input tty14 tty45 vcsa1
ion tty15 tty46 vcsu
kmsg tty16 tty47 vcsu1
log tty17 tty48 vga_arbiter
mem tty18 tty49 video0
mmcblk2 tty19 tty5 watchdog
mmcblk2boot0 tty2 tty50 watchdog0
mmcblk2boot1 tty20 tty51 zero
mmcblk2p1 tty21 tty52
mmcblk2rpmb tty22 tty53

Помогите! Как мне программно реализовать общение с arduino uno по i2c шине?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 13.01.2023 09:43 Сообщение: 2
sasamy
4.71

Пункты: 83560
Регистрация: 14.08.2009
Цитата

Я думал, что нужно написать мини драйвера для i2c дескриптора, но его нету в /dev директории


это наверно в buildroot с ядром 5.10.9 - подгрузите модуль для экспорта i2c в юзерспейс

modprobe i2c-dev
Спуститься к концу Подняться к началу
Персональная информация
svirid132
Добавлено 13.01.2023 11:27 Сообщение: 3
svirid132
0

Пункты: 768
Регистрация: 26.10.2021
Я ввел команду выше и у меня отобразился дескриптор i2c-1 в папке /dev. Но я не понимаю к какой шине i2c предназначен дескриптор. Так как на плате две шины i2c. И если посмотреть через команд cat на дескриптор, то он постоянно заполняется одинаковым символом, хотя пины не присоедины к Arduino.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 13.01.2023 12:03 Редактировалось 13.01.2023 12:10 Сообщение: 4
sasamy
4.71

Пункты: 83560
Регистрация: 14.08.2009
Цитата
Но я не понимаю к какой шине i2c предназначен дескриптор. Так как на плате две шины i2c.


в DTS для sodimm штатно описан и соотвественно включен один интерфейс

buildroot-2021.08-sk/output/build/linux-custom/arch/arm/boot/dts/imx6qdl-sodimm.dtsi

&i2c2 {
clock-frequency = <100000>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c2_sodimm>;
status = "okay";

tlv320aic23: tlv320aic23@1a {
compatible = "ti,tlv320aic23";
reg = <0x1a>;
#sound-dai-cells = <0>;
};

adv7180: adv7180@21 {
compatible = "adv,adv7180";
reg = <0x21>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_ipu1_csi_sodimm>;
clocks = <&clks 201>;
clock-names = "csi_mclk";
DOVDD-supply = <&reg_3p3v>;
AVDD-supply = <&reg_3p3v>;
DVDD-supply = <&reg_3p3v>;
PVDD-supply = <&reg_3p3v>;
csi_id = <0>;
mclk = <24000000>;
mclk_source = <0>;
cvbs = <1>;
cam_std = <0>; /* 0 - PAL(default), 1 - NTSC J , 2 - NTSC M */
};

hdmi_edid: edid@50 {
compatible = "fsl,imx6-hdmi-i2c";
reg = <0x50>;
};
};

он и отображается в /dev, он же выведена на x9

http://starterkit.ru/html/doc/SK-iMX6-MB-SODIMM_V1B.pdf

Цитата

И если посмотреть через команд cat на дескриптор, то он постоянно заполняется одинаковым символом, хотя пины не присоедины к Arduino.


кроме ардуины у вас там как минимум есть аудиокодек, i2c это не уарт - там может быть много слэйвов и используется адресация устройств, в гугле есть тучи примеров использования i2c

https://www.kernel.org/doc/Documentation/i2c/dev-interface

https://github.com/shenki/linux-i2c-example
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Процессорные модули » SK-iMX6S/D-SODIMM