ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
24 ноября
1088215 Топик полностью
Nikolay_Po (24.03.2021 10:06, просмотров: 346) ответил my504 на Внезапно вопрос. Имеется непрерывный поток из 9-битного UART-а. Синхронизация - первый в пакете имеет 1 в 9-ом бите. Но не выходит зацепить начало байта и выходит какая то галиматья с фрейм-эррорами и без них. Сделать интервал на пакеты в принципе можно в МК передающем эти пакеты, но вопрос носит общий характер. Можно ли и как?
Лучше интервалы сделать. 

Так как ограничения не заданы, предложу:

Вычисляете корреляцию потока с 9-м битом на интервале нескольких пакетов. По пику взаимокорреляционной функции, определяете фазу появления 9-го бита. Относительно этой фазы, вычисляете момент, когда нужно разрешить работу приём UART так, чтобы приёмник UART начал выборки со стоп-бита потока.


Разумеется, можно просто считать биты и сдвигать фазу счёта до тех пор, пока не начнёте стабильно попадать на 9-е биты в единичке, перед тем, как разрешить UART. И включаете UART сразу после расчётного начала стопа.


P.S. можно ещё ловить 9-е биты - нули, чтобы поймать синхронизацию байт внутри пакета. А уже от синхронизации байт, стартовать приёмник.

Но если пакеты - разной длины, а поток - непрерывный, то так не заработает, в зависимости от данных в комбинации с вариацией длин пакетов. Нужны перерывы, хотя бы между пакетами, если не между байтами. В противном случае придётся менять формат пакета, включая в него синхро-символ, дающий длинный стоп для синхронизации UART перед стартом.