Один або два стоп-біти UART?


15

UART часто дозволяють вибирати між 1, 1,5 та 2 стоп-бітами. Ефективність корисного навантаження з 1 стоп-бітом становить 80% (8/10), з двома стоп-бітами, що падає до 72,7% (8/11). То в чому перевага другого стоп-біта?

Відповіді:


19

Додаткові біти зупинки можуть бути корисним способом додати трохи додаткового часу на отримання, особливо при високій швидкості передачі даних та / або за допомогою м'якого UART, де потрібен час для обробки отриманого байту.

Якщо швидкість обмежена, а ваш UART пропонує лише коефіцієнт поділу потужністю 2, додавання додаткової зупинки може бути варіантом, щоб дати менш різке зниження швидкості, ніж наступний найнижчий бодурат.

Я вважаю, що це може бути однією з причин, що стандарт DMX512 визначає 2 зупинки.

Інша ситуація, коли вони можуть бути корисними, це якщо у вас є пристрої, що пересилають потік даних без будь-якої буферизації або пакетування - невеликі відмінності в тактовій частоті між вузлами та кінцевою деталізацією вибірки можуть спричинити виникнення помилок під час отримання та повторної передачі даних по ряду вузлів у ланцюг, але якщо дані надсилаються з двома зупинками, а приймачі встановлюються на одну зупинку, вона додає достатньо запасу для урахування цих помилок і залишає принаймні один допустимий період зупинки для вузлів далеко вниз по ланцюгу для надійного отримання.

Я також зустрічав ситуацію, коли дуже тривалий пробіг кабелю спричинив деяку асиметрію в часи підйому і падіння, в результаті чого недостатня довжина зупинки - надсилання 2 стоп-сигналів і приймач вимагає лише одного фіксованого цього.


6

За минулих днів принтери були (майже) повністю механічними конструкціями. Баудрати були дещо стандартизовані навіть тоді, так що додавання додаткового стоп-бита дасть принтеру додатковий час для друку символу. Тоді аспекти були помітнішими. Для мого першого принтера, шумного http://en.wikipedia.org/wiki/Teletype_Model_33 , мені довелося вставити паузу з двох символів після надсилання повернення перевезення.


Правильно відрегульована модель 33 потребувала лише одного символу після повернення перевезення. Ось тоді вам належить надіслати Linefeed! Я забув, що їм потрібні два стоп-біта, але ти маєш рацію, і тому, що я сказав нижче, відповідь Русселя застосовується (але ці 1,5 стоп-біти були для апаратних засобів Бодо). Однак додаткові стоп-біти (10 мс) не допомогли затримці повернення перевезення.
gbarry

4

Два стоп-біта навряд чи будуть набагато кориснішими, ніж один в системі, яка має значну частку зупиненого часу і яка працює в середовищі з низьким рівнем шуму (з низькою BER), наприклад, внутрішньої для обладнання або в периферійному інтерфейсі з кількома метрами кабелю та / або без етапу модем-модем.

2 стоп-біта дають вам більший час синхронізації, більше часу на обробку між символами і, ймовірно, залежно від обладнання та алгоритмів, більше шансів отримати або відновити синхронізацію під час безперервного потоку даних. Час міжчастотного функціонування має набагато меншу цінність у сучасних системах, ніж коли тактові частоти були низькими, а пропускна здатність процесора нижча.

Якщо у вас фактично безперервний потік даних, то, якщо він не синхронізований, будь-який високий біт буде схожий на стоп-біт. Будь-який високий низький перехід буде схожий на границю байтів. Якщо ваш приймач починається з 10-ти кордонів, і це не справжня межа запуску, то це буде виявлено лише 50% часу) (тобто, якщо фінальний "стоп-біт" виявиться насправді бітом з низькою кількістю даних, і ви також будете ви пропустили через справжню межу зупинки / запуску по дорозі. В середньому у вас 1/4 перспектива, що межа байта дорівнює 1/0 і помилково виглядає як пара зупинки / запуску. Наведене вище говорить про те, що якщо ви виберете помилкову зупинку - запустити пару, то, ймовірно, приблизно 50% шансів, що ви оберете інший при наступній спробі.

Якщо ви використовуєте 2 стоп-біта (11), то дійсна послідовність зупинки старту становить 110, що має 1/8-й шанс виникнення у випадковому трафіку даних. Змішування справжнього біта зупинки та запуску в несинхронізованому потоці трохи змінює сати, але здається відносно малоймовірним, що якщо ви отримаєте помилкову послідовність зупинки / запуску 110 на одному циклі, ви натиснете ще одну наступну спробу, перш ніж наткнутися на справжню 110 послідовність, яка відбувається далі.

Як ви зазначаєте, 1 стоп-біт дає 8/10 = 80% максимальної пропускної здатності, а 2 стоп-біта дають 8/11 = 72% ефективності. Різниця в пропускній здатності на граничній межі на 80% / 72% = ~ 11% більше. це корисний виграш в екстремальних обставинах, але не великий, і якщо ланцюг простоює більше 10% часу, це має мінімальне значення. Якщо ваша схема шумна і схильна до випадкових втрат синхронізації, то додатковий біт зупинки може допомогти дуже багато. АЛЕ, якщо ви так сильно піклуєтеся про пропускну здатність, часто можете збільшувати швидкість передачі даних (не завжди) або змінювати повністю синхронну роботу.


Я не знаю жодного UART, який може бути налаштований ігнорувати будь-які видимі стартові біти, яким не передує більше, ніж повний бітовий час маркування (дійсно, більшість прийме біт початку, якому передує половина бітного часу маркування, і не може бути налаштовано інакше). Така функція може бути корисною.
supercat

Ви швидше натрапили на правильну відповідь, якщо ми можемо визнати, що ця практика сходить до механічних днів. Тоді механізму приймача було потрібно близько 1 бітового часу, щоб зупинитись, щоб бути готовим до наступного запуску. Таким чином, передавач був сконструйований таким чином, щоб мати 1,5-бітовий біт часу зупинки. Це мало ефект, який ви описали. Якщо синхронізацію було втрачено, до моменту відновлення синхронізації може бути кілька символів сміття. Коли ми дійшли до електронних реалізацій, одержувач міг почати чекати наступного біту запуску одразу, побачивши перехід на рівень зупинки - йому не потрібні прокладки
gbarry

@gbarry - міфетки, що не спотикаються у вашому коментарі.
Рассел Макмахон

Насправді у мене не вистачало персонажів :) Щось не так?
gbarry

3

Для посилення точки mikeselectricstuff про отримання часу за допомогою "м'яких UARTs" програма прийому, яка завжди буде знати, коли потрібно приймати дані, і робить це на основі опитування, часто може обробляти більш швидкі скорочення передачі даних, ніж це було б практично при застосуванні м'якого UART, керованого перериванням. Такі програми, однак, можуть обробляти вхідні дані лише за час між початком біта зупинки одного байта та початковим бітом наступного байта; час, необхідний для обробки кожного байту, закінчується як обмежуючий фактор швидкості зв'язку. Обробка даних на 115,200-N-8-2 не набагато вимогливіша, ніж обробка їх на 57 600-N-8-1, але швидше на 80%.

Іноді можна ще більше просунути речі, використовуючи, здавалося б, менш ефективні формати даних. Наприклад, кожен байт може надсилати у двох частинах, один із семи бітів і один - один (у MSB однобітної частини все встановлено). Якщо це зробити, навіть із лише одним стоп-бітом, буде вісім бітових разів маркування між кінцем однієї байтової пари та початком наступної, таким чином дозволяючи одночасно просунути швидкість передачі бітів у чотири рази більше, ніж яку можна зробити лише з двома стоп-бітами (і у вісім разів вище, ніж з одним). Незважаючи на те, що потрібно надсилати вдвічі більше байтів, головне виграш стало б у чотири рази швидкістю передачі даних. Крім того, хоча кожна передана байтна пара може використовуватися для надсилання восьми бітів даних, тільки 130 з 256 можливих байтових значень буде використано кодування,


Ви також можете пом'якшити високі боудрати UART (250 Кб і вище), генеруючи перерив на стартовій кромці і залишаючись всередині коду переривання на весь байт - додаткова зупинка може бути дуже корисною тут.
mikeselectricstuff

@mikeselectricstuff: Додатковий біт зупинки може бути дуже корисним, як і використання лише декількох бітів у кожному байті (вимагаючи, щоб LSB кожного байта було встановлено, може бути корисним, оскільки можна вивести таймінг із висхідного краю цього біта, навіть якщо може виникнути невеликий забій, коли відбувається переривання). Основним обмеженням підходу біт-перерва-триггер-старт-біт є те, що не існує жодного приємного способу надсилання даних при надходженні вхідних даних. Або передані дані, або отримані дані (або обидва) втрачаються.
supercat

2

Колись тут були електромеханічні монстри, звані телетипами. Більшість працювали на двигунах змінного струму, синхронні з частотою лінії електропередач. Таким чином, завжди був шанс, що два комунікаційні машини, можливо, не були синхронізовані до однієї і тієї ж електромережі або навіть працювали на змінному струмі, використовуючи для цього різні частоти.

Таким чином, щоб дозволити більш повільній машині наздоганяти та не виходити з синхронізації, було надіслано два стоп-біта.

Для інших цілей, наприклад, щоб дозволити повернення друкарської каретки до початку нового рядка, було надіслано CR, LF плюс дві прокладки (усі отвори на 8-ти рівній стрічці).

Це було прийнято для ланцюгів, що працюють зі швидкістю 110 Бод і лише повільніше.


1

Повільність прийому механічних пристроїв була причиною додавання додаткових стоп-бітів, однак сьогодні пристрої є досить швидкими і працюють при ще більшій швидкості передачі даних без необхідності додаткового стоп-біта

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.