Зависает библиотека Wire
- Войдите на сайт для отправки комментариев
Читаю данные из внешней EEPROM типа at24c64. Почему то некоторые микросхемы читаются отлично, а некоторые подвешивают ардуино при чтении. Схему проверял, соединения хорошие, скетчи пробовал разные: примеры чтения/записи из библиотеки, сканер шины I2C, скорость соединения по i2c пробовал разную выставлять (Wire.setClock(clockFrequency)) - результат один и тот же. Зависает после Wire.endTransmission() наглухо.
Поискал по форумам - оказалось, что глюки стандартной библиотеки Wire не только у меня.
Вопрос в следующем: посоветуйте пожалуйста библиотеку взамен стандартной, в которой проблемы с зависанием нет и которая лично Вам нравится (может там плюшки полезные есть). Желательно чтобы для ESP8266 тоже подходила. Либо может обновления стандартной библиотеки есть?
Спасибо.
Со стандартной библиотекой всё в порядке. Проблема в целостности сигнала. Если ты сделаешь библиотеку толерантную к плохому сигналу, то будешь получать плохие данные, что еще хуже зависания.
У меня есть какая-то. Ей всегда и пользуюсь. Стандартная или нет - не знаю. Знаю, что в каком-то месте костыль ставился. Работает безотказно. Могу заделиться.
Скорее всего, ты просто читаешь/пишешь неправильно.
Косяк там один - размер буфера. Всё остальное там происходит в железе.
Нет в железе тайм-аута. Поэтому если потерян или выскочил где-то лишний импульс, то в определенных условиях шина зависает, а библиотека ее упорно ждет. Это известная проблема и решается нерукожопой проводкой.
В стандартной библиотеке есть setWireTimeout и слова, что возможно в будущих версиях тайм-аут будет установлен по умолчанию в 25000 мкс, а пока он по умолчанию 0 т.е отключен.
Но если использовать тайм-ауты (что в общем более правильно), то надо переписывать программу для контроля и обработки возможных тайм-аутов.
rkit void twi_setTimeoutInMicros(uint32_t, bool);
просто надо использовать все возможности !
Если схема кривая, то это уже клиника ...