Занятный пример аппаратного рейса.
Есть у нас usb hub (usb2513i). Он умеет конфигуриться через отдельный i2c-slave интерфейс, причем SCL ножка мультиплексирована с CFG_SEL[0] пином. Этот пин и пин CFG_SEL[1] задают режим инициализации хаба (если 0x1, то хаб активирует i2c-slave интерфейс и дает себя инициализировать через него. Есть и другие режимы, например, 0x0 - i2c-интерфейс не активируется, а используются параметры по-умолчанию). Алгоритм иницилизации через i2c-slave интерфейс следующий:
1) Снимаешь ресет,
2) Ждешь 500 мкс.
3) Задаешь значения его регистров.
4) Задаешь в последний регистр бит аттач и все, он появляется на usb-шине.
На нашей железке ресет снимается с помощью i2c-GPIO экспандера, который находится на той же i2c-шине, что и i2c-slave интерфейс usb-хаба. Уже понятно, в чем был рейс?