У кого-нибудь есть пример использования нескольких устройств I2C в нескольких потоках? У меня есть небольшая проблема с моим, это одна из тех, где, если я делаю один шаг, все работает, а если я запускаю его на полной скорости, все портится - явно состояние гонки. Трафик i2C на самом деле искажается (как видно из моего логического анализатора), что меня немного удивило. Я как бы предполагал, что операции I2C будут атомарными, но похоже, что это не обязательно так.
В моем приложении используется датчик температуры и контроллер двигателя, оба устройства I2C. Датчик температуры измеряется таймером, который, я полагаю, работает в рабочем потоке.
Я вижу повреждение данных трафика I2C, я думаю, что может произойти то, что оба потока пытаются одновременно писать на разные подчиненные адреса.
В документации немного умалчивается о проблемах с многопоточностью, поэтому я не уверен, на каком уровне я должен защищаться от условий гонки. Из проблем, которые я вижу, похоже, что контроллер I2C может выполнять только одну операцию за раз, поэтому мне пришлось бы защищать на уровне контроллера.
У меня есть некоторые идеи о том, как подойти к этому, но документация немного умалчивает о требованиях к многопоточности, поэтому я решил спросить, сделал ли кто-нибудь это уже успешно, прежде чем я зайду в тупик :)