В спецификации к arduino nano написано что только выводы A4/A5 аппаратно поддерживают работу с устройствами по I2C протоколу. Попробовал подключить 4х цифровой индикатор на TM1637 через данный интерфейс, так вот в либе для работы с ним можно использовать любые 2 пина. И действительно, все работает при указании любых двух выводов, а не только А4/А5, причем выводы не требуется при этом подтягивать к 5V как указано в спецификации I2C (ну это видимо потому что они и так подтягиваются встроенными резисторами) Правильно ли я понимаю - в данном случае библиотека реализует программную поддержку протокола I2C, т.е комбинируя уровни сигналов на линиях SDA, SLC делает СТАРТ, затем передает номер устройства, затем передает данные, затем делает СТОП и т.д.? Т.е даже если бы Atmega поддерживала только pinMode можно было бы таким образом эмулировать данный протокол? В случае с аппаратной поддержкой вместо установки уровней вручную на SDA /SLC процессору посылаются готовые команды типа "начать передачу", "выбрать устройство", "послать данные", и он сам устанавливает нужные уровни сигналов на соотв. выводах ?
Все правильно. Посмотрите на код функции TM1637Display::writeByte, там как раз и теребятся пины для формирования сигналов интерфейса. Программно можно сделать и SPI, и serial, и все остальное. Разница только в количестве времени, требуемого для выполнения пересылки. В случае аппаратного интерфейса можно запустить передачу и продолжать выполнять другие задачи, а об окончании передачи можно узнать по прерыванию либо периодически проверяя флаги в статусном регистре. В случае же программного формирования сигналов контроллер занят в течение всей пересылки и других действий в это время выполнять не может.