пробовал анализировать когда все в режиме OUTPUT, почему-то на CLK выводится 3.45, максимум, а на DATA 4.24, если их совмещать рядом то хорошо заметна разница.
Странно что на выводе в режиме push-pull 3.45В, при питании порта от 3.3В
если попробовать разные режимы на обоих выводах, то вообще перестает работать на одном. не пойму в чем причина. еще бывают вякие глюки накладываются если шить в память, до ресета не спасает.
видимо в пследний раз так и получилось. один вывод в OUTPUT перешел а второй так и остался с OPEN_DRAIN видимо.
Уже много раз было описано, что при режиме OPEN_DRAIN в Arduino кто-то выдумал, что всё инвертируется, включая значение ввода с пина
и что Arduino концепция не включает в себя переинициализацию, деинсталляцию или освобождение ресурсов, ничего и никогда. Инициализация производится один раз и до конца исполнения - для поиграться этого хватает, т.е. концепт Arduino исполняется.
Зачем вам переключать режим работы пина в данной игре? По старту своего "скетча" включаете пины с SCL и SDA в режим OPEN_DRAIN и работаете, не забывая об навязанных домохозяйками инверсиях.
У используемой микросхемы логика протокола шины не отличается от I2С. По PDF есть ограничения в тактировании (на SCL) - указан предел до 500 кГц на любой логический уровень SCL (50% duty ratio) и ограничения в по фронтам (до 0.5 μs ?)... Логические уровни переключения так-же описаны и переключение не находится на уровне 0.7 от питания, а на уровне нуля ниже 0.35 В и неизвестного значения "1" (в PDF отсутствуют значения входного гистерезиса...).
Если китайцы пишут: “100pF capacitor connected to the DIO, CLK communication port pull-up and pull-down can reduce interference to radio communications port.”
- это значит, что можно ожидать чего угодно от резких фронтов на шине...
Cудя по остальным накиданным характеристикам в PDF, микросхема достаточно тормозная и вам следует ограничить скорости переключения для начальной отладки. Разгонять будете потом, когда отладите связь с ней на низкой скорости.
-------
PS: Если вы играете в Arduino, то вам следует выбирать и покупать готовые кубики для этой пользовательской игры.
В RTL нет никакого смыслу “дрыгать ногами” по концепции Arduino для 8-ми битных MCU, когда для работы с устройствами по I2C в него встроен специальный контроллер, а для работы с GPIO и обеспечения атомарности в многопоточных приложениях (RTOS) встроен специальный режим обращения через bit-band-инг...
И какого фигу вам требуется эмуляция алгоритмов древних убогих чипов, типа ESP8266, не имеющих никакой аппаратной поддержки и развития?
Если уж совсем плохо, и протокол с внешним чипом не укладывается в стандартные спецификации, то пример как работать с GPIO дан основе старого датчика SHTxx.
инит(PinName dataPin, PinName clockPin)
uint8_t putByte(uint8_t value)
uint8_t getByte(bool ack)
…
Вам всего потребуется переписать инициализацию CLK пина на режим DOUT_OPEN_DRAIN, чтобы получить уровень “1” более 3.3В.
Но лучшим решением будет использование аппаратного контролера I2C, а не его эмуляция ради поддержки алгоритмов умирающих игрушек на AVR того века.