Добавление MCP23017 в древо устройства и доступ к микросхемам, подключенным к расширителю.

Вопрос или проблема

Я пытаюсь получить доступ к нескольким ИС через 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. Важно знать, как именно вы подключаете ИС к выводам расширителя, поскольку это повлияет на их описание.

Применение

Чтобы облегчить работу с подключенными ИС, вам потребуется выполнить несколько шагов:

  1. Определение подключенных устройств в дереве устройств: Обычно это требование обозначается путем добавления каждого устройства как дочернего узла внутри узла расширителя. К примеру, если у вас есть датчик с определенным 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>;

        /* Здесь могут быть дополнительные параметры настройки устройства, 
        такие как частота выборки, контроллер прерываний, и т.д. */
    };
};
  1. Настройка и компиляция дерева устройств: Убедитесь, что ваше дерево устройств собрано и применено корректно. Используйте подходящие утилиты для компиляции, такие как dtc (Device Tree Compiler).

  2. Драйверы для подключения устройств: Убедитесь, что ядро Linux поддерживает ваши устройства через драйверы. Это могут быть стандартные драйверы Linux или пользовательские, написанные вами. В случае с MCP23017 устройство будет зарегистрировано в системе как gpiochip, и любые подключенные устройства будут доступны через соответствующие GPIO.

  3. Доступ к устройствам из пользовательского пространства: В зависимости от того, какие устройства вы подключаете, их доступ из пользовательского пространства может варьироваться:

    • Для GPIO устройства могут обращаться к ним через /sys/class/gpio или через libgpiod.
    • Для конкретных периферийных устройств может быть доступ через интерфейсы, такие как /dev/i2c-X для работы с I2C.
  4. Тестирование и отладка: После того как ваше дерево устройств настроено и драйверы загружены, протестируйте работу системы. Убедитесь, что устройства работают как ожидалось, используя соответствующие утилиты для диагностики, такие как i2cdetect, i2cget, и другие инструменты для работы с GPIO.

Таким образом, добавление MCP23017 в дерево устройств и корректное описание всех подключенных ИС позволит вашей системе корректно взаимодействовать с расширителем ввода-вывода и подключенными через него устройствами. Это обеспечит гибкость в управлении и мониторинге аппаратных компонентов вашей системы.

Оцените материал
Добавить комментарий

Капча загружается...