Hi Vladimir, hope you are having a nice day!
03 Сен 04, Vladimir Vassilevsky wrote to Alexey V Bugrov:
AVB>> 300...500ns@40Mhz. Чтобы не быть голословным, у меня в одном из AVB>> проектов стояла задача пропихнуть данные в цап через один AVB>> оптрон. Я использовал как раз interrupt-driven обмен по AVB>> протоколу, похожему на далласовский. VV> И любое другое прерывание длиной в несколько микросекунд во время VV> приема/передачи бита тебя собьет.
Hет. Это обработчик высокоприоритеного прерывания, он даже вытесняет ядро ОС. Задержка возможна только в том случае, если где-то в другом месте _все_ прерывания были запрещены. Такие случаи редки и не продолжаются более нескольких сот нс by design.
AVB>> Можешь предложить более интересное решение? VV> Самое правильное решение на однопроводке это UART. Для каналов VV> без постоянки - UART поверх манчестера. Ресет протокола по break VV> или по таймауту.
Уарт подразумевает кварцованный приемник/передатчик. Это недешево и не всегда приемлимо по другим соображениям. Кроме того, не совсем понятно, как разруливать коллизии между мастерами и слейвами.
VV>>> И на cях корректно не напишешь. AVB>> Почему? Глянь app126 от maxim-dallas. Он чем-то некорректен? VV> Hет самого главного: как делать калиброванные задержки.
Зависит от платформы. В общем случае то или иное решение есть.
AVB>> Собственно, сделать на однопроводке что-то принципиально лучшее AVB>> с сопоставимой скоростью обмена вряд ли возможно. VV> IMHO единственная причина, почему Dallas не сделал UART - VV> нестабильность частоты.
Дык. Я бы сказал, что главная, но не единственная.
VV>>>>> Успехов в борьбе с ловлей помех на открытый коллектор. AVB>>>> IIC тоже некошерный интерфейс? AVB>> + тот же открытый коллектор. Те же проблемы.
VV> В I2C обе линии вполне могут быть трехстабильными,
Либо я тебя не понял, либо трехстабильными они не могут быть по определению. Иначе слейвы не смогут clock stretching, не говоря уж о мультимастере.
VV> если не отрабатывать вейтстейтов.
Hе совсем понял. Или ты имеешь ввиду clock stretching? Тогда это уже не IIC.
VV> А вообще на двух проводах должен VV> быть CAN VV> :)
Дорогое и ресурсоемкое решение. В большинстве межмикросхемных взамиодействиях это совершенно не оправдано.
WBR, AVB