Я уже писал о сложностях с одноплатниками: то флешка сдохнет ни с того, ни с сего, то еще какая беда… А надо I2C'шные устройства обслуживать: те же ИК-детекторы и датчики грозы. Понятно, что в случае с ИК нужно будет городить на STM32 переходник I2C-RS232 или RS485, да выдумывать протокол. А вот датчик грозы можно прямо рядом с компьютером прилепить: купол из пластика не должен электромагнитным волнам мешать. И тут-то подумалось: наверняка ведь есть аппаратные преобразователи, имеющие готовые модули ядра, чтобы ОС их видела как "стандартные I2C", и работать можно было бы при помощи того же самого кода, что и на одноплатниках. И, казалось бы, таких устройств гора должна быть, ан нет: нашел лишь
I2C tiny USB. На убогой аврке. Ну, думаю: уж за полдня-то я, наверное, на STM32 реализую нужное USB устройство, был бы протокол! А вот хрен: нет описания протокола в репозитории. А ковыряться в тонне чужих исходников (в т.ч. и кернельного модуля) мне откровенно лень.
В общем, будет у меня очередная поделка с самописным протоколом, одинаковым и для USB, и для 232/485 (чтобы хоть здесь как-то попроще было).
Вот здесь даже описан протокол еще одного переходника I2C-USB на основе FTDI. А
здесь есть модуль ядра для какого-то преобразователя на основе CH341A тоже с интерфейсом CDC.
В принципе, в /usr/src/linux/drivers/i2c/busses/ достаточно много чего. Лень просто ковыряться, но, возможно, тоже какой-нибудь вполне себе преобразователь поверх CDC поддерживается. В принципе, можно даже убогий HID реализовать, просто уж больно это медленно. А вот что-то посложней я еще ни разу не делал, боюсь, с чтением исходников модуля и попытками наваять, угроблю слишком много времени. Поэтому, пусть будет CDC, только с протоколом, под который уже готовый модуль ядра есть.