Я недавно унаследовал некоторые прошивки со странными проблемами в отношении продолжительности считывания значений датчика. Плата основана на микроконтроллере ESP32 Wrover и имеет несколько датчиков, подключенных через шину I2C. Микропрограмма использует порт библиотеки задач FreeRTOS и использует основной цикл для считывания двух датчиков, а также дополнительную задачу в том же ядре для считывания еще нескольких датчиков через мост DS2482 I2C в OneWire. Обычно я ожидаю, что считывание датчиков займет не более одной секунды (при условии «наихудшего» случая при нормальных условиях) через мост, но для этого потребуется множество таких изменений, обычно около 30 или более секунд для одного датчика. Не только чтение, но и любое общение через мост занимает очень много времени. Еще одна деталь: датчики за мостом подключаются по одному на канал моста, а однопроводный канал сбрасывается каждый раз перед считыванием датчика.
Мое текущее подозрение заключается в том, что использование нескольких задач на одной шине I2C может привести к сбоям в тайминге связи и, таким образом, вызвать ошибки связи, что приведет к увеличению времени чтения.
Звучит ли это подозрение разумнымвообще или что бы вы предложили исследовать в описанной системе (хорошо зная, что я не предоставил слишком много подробностей)?
Любые идеи приветствуются.
Спасибо!