Вопрос или проблема
Я пытаюсь получить доступ к нескольким ИС через I2C с использованием расширителя ввода-вывода MCP23017 для специальной встроенной платы. Я знаю адреса I2C ИС.
Как мне добавить MCP23017 в древо устройств?
Я думаю, что мне нужно добавить ИС как дочерние узлы под MCP2301 в древо устройств, но я не знаю, как это сделать.
Ниже представлен пример древа устройств. Обнаружит ли Linux ИС, когда это будет реализовано таким образом? Какой самый простой способ получить доступ к ИС?
&i2c1 {
clock-frequency = <100000>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c_1>;
status = "okay";
/* mcp23017 I2C IO Expander */
gpio_ex3: gpio_mcp@20 {
compatible = "microchip,mcp23017";
gpio-controller;
#gpio-cells = <2>;
reg = <0x20>;
status = "okay";
};
Ответ или решение
Добавление MCP23017 в дерево устройств и доступ к ИС, подключенным к расширителю ввода-вывода через I2C, является распространенной задачей при разработке встроенных систем, особенно когда необходимо расширить количество доступных GPIO.
Теория
MCP23017 является популярным расширителем ввода-вывода, который подключается к шине I2C и предоставляет дополнительные порты ввода-вывода. В дереве устройств он должен быть описан как дочерний узел на шине I2C. Подключенные к расширителю ИС могут иметь свои собственные адреса I2C, и если они используют GPIO на MCP23017, то требуется их соответствующее описание в дереве устройств. Это позволит ядру Linux корректно распознать и управлять этими устройствами.
Пример
Вы привели пример определения MCP23017 в дереве устройств:
&i2c1 {
clock-frequency = <100000>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_i2c_1>;
status = "okay";
/* mcp23017 I2C IO Expander */
gpio_ex3: gpio_mcp@20 {
compatible = "microchip,mcp23017";
gpio-controller;
#gpio-cells = <2>;
reg = <0x20>;
status = "okay";
};
};
Это описание корректно для самого расширителя, но для подключения ИC через этот расширитель вам нужно будет описать дочерние узлы внутри узла gpio_ex3
. Важно знать, как именно вы подключаете ИС к выводам расширителя, поскольку это повлияет на их описание.
Применение
Чтобы облегчить работу с подключенными ИС, вам потребуется выполнить несколько шагов:
- Определение подключенных устройств в дереве устройств: Обычно это требование обозначается путем добавления каждого устройства как дочернего узла внутри узла расширителя. К примеру, если у вас есть датчик с определенным I2C адресом, который подключен через GPIO на MCP23017, его описание может выглядеть следующим образом:
gpio_ex3: gpio_mcp@20 {
compatible = "microchip,mcp23017";
gpio-controller;
#gpio-cells = <2>;
reg = <0x20>;
status = "okay";
sensor1: sensor@0 {
compatible = "vendor,sensor";
reg = <0x01>;
/* Здесь могут быть дополнительные параметры настройки устройства,
такие как частота выборки, контроллер прерываний, и т.д. */
};
};
-
Настройка и компиляция дерева устройств: Убедитесь, что ваше дерево устройств собрано и применено корректно. Используйте подходящие утилиты для компиляции, такие как
dtc
(Device Tree Compiler). -
Драйверы для подключения устройств: Убедитесь, что ядро Linux поддерживает ваши устройства через драйверы. Это могут быть стандартные драйверы Linux или пользовательские, написанные вами. В случае с MCP23017 устройство будет зарегистрировано в системе как
gpiochip
, и любые подключенные устройства будут доступны через соответствующие GPIO. -
Доступ к устройствам из пользовательского пространства: В зависимости от того, какие устройства вы подключаете, их доступ из пользовательского пространства может варьироваться:
- Для GPIO устройства могут обращаться к ним через
/sys/class/gpio
или черезlibgpiod
. - Для конкретных периферийных устройств может быть доступ через интерфейсы, такие как
/dev/i2c-X
для работы с I2C.
- Для GPIO устройства могут обращаться к ним через
-
Тестирование и отладка: После того как ваше дерево устройств настроено и драйверы загружены, протестируйте работу системы. Убедитесь, что устройства работают как ожидалось, используя соответствующие утилиты для диагностики, такие как
i2cdetect
,i2cget
, и другие инструменты для работы с GPIO.
Таким образом, добавление MCP23017 в дерево устройств и корректное описание всех подключенных ИС позволит вашей системе корректно взаимодействовать с расширителем ввода-вывода и подключенными через него устройствами. Это обеспечит гибкость в управлении и мониторинге аппаратных компонентов вашей системы.