Evgeny_CDАрхитектор (19.02.2020 17:33, просмотров: 277) ответил Evgeny_CD на [Универсальный самосинхронизирующийся код для проводных шин]. По мотивам идей троичного кодирования в I3C -> Да здравствуют системы счисления по основанию 7!
Итак, [доводим канальный уровень до завершенного состояния] У нас моту быть такие события
-- передача символа данных длиной T
-- передача разграничителя битовых полей длиной 2Т, который тоже символ данных по сути два раза подряд.
-- передача начала кадра - два символа данных длиной 2Т каждый. В сумме 4Т
Как работает начало кадра. Два двойных символа подряд.
Когда такое встречается, декодер сбрасывает память предыдущего состояния в дефолтную величину.
При этом первый двойной символ может принимать любое из 8 значений, там нет исключений. Т.е. символ начала кадра передает 3 двоичных бита.
Второй двойной символ как обычное кодирование.
Есть тонкость. Поскольку первый двойной символ абсолютный, он может совпасть с символом данных от предыдущего поля. Получится символ длиной 3T.
Но это ни на что не влияет, кроме задержки декодирования последнего бита на 2Т.
Временной декодер на самом деле не сложный - он определяет был ли интервал постоянства линий 1Т или более 1Т. Насколько более 1Т ему различать не надо.
Отдельный таймер на случай, если все повисло, но от него хитрости не надо.
В сумме эти элементы канального кодирования позволят описать любую ситуацию на шине. И восстановить декодирование с начала следующего кадра как минимум , но можно "с обратной стороны" кинуть два двойных символа в любом месте потока, чтобы прервать передачу кадра и запустить заново.
Выбор конкретики зависит от задачи и целей - простота, эффективность, вероятность ошибок в канале и прочая.