Связь I2C с коммутатором шины PCA9548

#linux-kernel #embedded #driver #linux-device-driver #i2c

Вопрос:

В настоящее время я использую встроенный драйвер ядра Linux I2C для связи с PS с расширителем ввода-вывода на оценочной плате ZC706, которая содержит Zynq 7000 XC7Z045 SoC. Для этого я воспользовался следующей ссылкой https://www.kernel.org/doc/html/latest/i2c/dev-interface.html в котором обсуждается использование драйверов устройств I2C из пользовательского пространства. Меня смущает то, что ZC706 содержит 8-канальный мультиплексор, через который вы должны сначала настроить путь, как показано в этой ссылке на стр. 55 https://www.xilinx.com/support/documentation/boards_and_kits/zc706/ug954-zc706-eval-board-xc7z045-ap-soc.pdf, для связи с устройствами, подключенными к шине. Тем не менее, я смог связаться с a с помощью расширителя ввода-вывода, который подключается к каналу 4 на mux, не устанавливая путь через mux. Мои шаги состояли в том, чтобы сначала открыть соответствующую шину, установить ведомый адрес для связи с расширителем ввода-вывода, а затем я смог связаться, введя данные на устройство. Ни один из этих шагов не включал настройку 8-канального коммутатора, и мне непонятно, почему я смог связаться с подключенным устройством без предварительной настройки mux.

Комментарии:

1. Вы хотите сказать, что не поняли, почему в руководстве так написано? Я подозреваю, что это говорит о полном доступе к шине из пользовательского пространства, когда драйвер мультиплексора не задействован. В вашем случае ядро заботится о переключении. elixir.bootlin.com/linux/latest/source/drivers/i2c/muxes/. … Ах, еще одна вещь: вышесказанное говорит о том, что PCA9548-это коммутатор , поэтому вы можете включить все каналы, если у вас нет конфликтов в адресах подчиненных устройств.