Попробовал собрать готовый, который для ch341a. Куча ошибок, да оно и понятно: судя по дате, еще, небось, для четвертого ядра писали. На шестом не работает
( Read more... )
Вот это наш метод. Гадость гадская этот ваш айтуси, зомби-мутант. Даже в спецификацию записано что устройство может зависнуть, и тогда циклируйте шине питание (ачотакова да). В спецификации записана аксиома что мастер формирует тактовую, а потом улучшатели дописали что устройство может закоротить линию тактовой на землю неограниченно долго, потому что оно тупое и не успевает что-то там, потому вся шина подождёт. Этот стандарт был нормальным в своей первой версии, которую потом извратили до безумия. Безумие - это версия с тактовой до 3.4МГц. В общем, чем проще метод использования этого зомби-мутанта, тем меньше нервов будет потрачено - возможно к этой мысли пришли и авторы вашего кода.
Когда делал свой модуль айтуси для плиса, начал с мысли "сделаю по полной программе". По мере делания и усложнения автомата, пришёл к мысли "да гори оно огнём! резать! непременно резать!"
Питание дергать - не проблема, хоть каждый раз при инициализации. Можно вообще даже завести отдельную команду. Но хочется иметь "ядреную" поддержку. Чтобы просто воткнул свое устройство, и у тебя /dev/i2c-xxx появилось, с которым работай теми же методами, что и на одноплатнике. Ну и в ядре есть модули для некоторых попсовых вещей, того же BME280 - подключил к переходнику, воткнул в комп, инициировал устройство - бдыщь, кернельный модуль обслуживает, тебе ничего самому писать не надо…
А что I2C - адское говнище, я согласен. Но, с другой стороны, аналога ведь вообще нет! Как сотню устройств посадить на одну шину, не ведя к каждому отдельный кабель CS? Не на CAN же всю эту примитивщину вешать, в конце-то концов!
Аналоги есть, но похоже все сделали выводы и придумали самопальные шины и протоколы - CAN тому пример, других нишевых и самопальных тоже полно. Айтуси остался лишь на всеобщей привычке: он был, потому есть, потому продолжают ставить в новые чипы. Выбора же нет: вот нужный чип, и у него айтуси или спай, или просто айтуси - выбирай из одного
( ... )
Ну, были и попытки сделать "короткую физику" тех же CAN или 485 на одном проводе. Получился убогий 1-wire, который вообще ничем аппаратно не поддерживается, и народ с ним страдает по сей день… Хотя, казалось бы: в чем проблема это аппаратно реализовать? Просто добавь ты к выходам Rx/Tx CAN'а низкоуровневый преобразователь на один провод, а не на витуху. Нет никого в шине - подтяжка к питанию, начали передавать единичку - прижали к нулю… Думаю, появились бы и дискретные преобразователи из этого в дифференциальный сигнал. То бишь, хочешь на небольшом расстоянии работать - используй голое подсоединение. Нужно увеличить - ставь мелкосхемку и выходи на общую витуху. А тут еще и оптика подоспела, которая сейчас значительно подешевела. Разве что очень тяжело на оптике шину сделать: каждый узел по сути будет ретранслятором, и если помрет, то и дальнейший сегмент шины отвалится…
Comments 7
Вот это наш метод. Гадость гадская этот ваш айтуси, зомби-мутант. Даже в спецификацию записано что устройство может зависнуть, и тогда циклируйте шине питание (ачотакова да). В спецификации записана аксиома что мастер формирует тактовую, а потом улучшатели дописали что устройство может закоротить линию тактовой на землю неограниченно долго, потому что оно тупое и не успевает что-то там, потому вся шина подождёт. Этот стандарт был нормальным в своей первой версии, которую потом извратили до безумия. Безумие - это версия с тактовой до 3.4МГц. В общем, чем проще метод использования этого зомби-мутанта, тем меньше нервов будет потрачено - возможно к этой мысли пришли и авторы вашего кода.
Когда делал свой модуль айтуси для плиса, начал с мысли "сделаю по полной программе". По мере делания и усложнения автомата, пришёл к мысли "да гори оно огнём! резать! непременно резать!"
Reply
Но хочется иметь "ядреную" поддержку. Чтобы просто воткнул свое устройство, и у тебя /dev/i2c-xxx появилось, с которым работай теми же методами, что и на одноплатнике. Ну и в ядре есть модули для некоторых попсовых вещей, того же BME280 - подключил к переходнику, воткнул в комп, инициировал устройство - бдыщь, кернельный модуль обслуживает, тебе ничего самому писать не надо…
А что I2C - адское говнище, я согласен. Но, с другой стороны, аналога ведь вообще нет! Как сотню устройств посадить на одну шину, не ведя к каждому отдельный кабель CS? Не на CAN же всю эту примитивщину вешать, в конце-то концов!
Reply
Reply
Хотя, казалось бы: в чем проблема это аппаратно реализовать? Просто добавь ты к выходам Rx/Tx CAN'а низкоуровневый преобразователь на один провод, а не на витуху. Нет никого в шине - подтяжка к питанию, начали передавать единичку - прижали к нулю… Думаю, появились бы и дискретные преобразователи из этого в дифференциальный сигнал. То бишь, хочешь на небольшом расстоянии работать - используй голое подсоединение. Нужно увеличить - ставь мелкосхемку и выходи на общую витуху.
А тут еще и оптика подоспела, которая сейчас значительно подешевела. Разве что очень тяжело на оптике шину сделать: каждый узел по сути будет ретранслятором, и если помрет, то и дальнейший сегмент шины отвалится…
Reply
Leave a comment