Давайте трохи відступимо та поговоримо про протокол сигналізації низького рівня, який використовують UART. TX і RX - це рядки даних, а не тактові. Годинники є лише всередині кожного UART, саме тому доводиться домовлятися про те, що таке швидкість передачі.
При непередаванні лінія залишається в режимі очікування. Щоб передати байт (наприклад, можливі інші ширини даних), передавач спочатку надсилає початковий біт . Одержувач використовує час переднього краю стартового біта і відому швидкість передачі даних, щоб потім декодувати решту символів. Скажімо для простоти, що використовується 100 кБауд. Це означає, що кожен біт триває 10 мкс. Сюди входить початковий біт, біти даних та стопи (біти) зупинки. Отже, середина першого біта даних буде знаходитись через 15 мкс після переднього краю стартового біта, другого - на 25 мкс і т.д.
Поки годинник приймача та передавача однакові, це може тривати назавжди. Однак вони ніколи не будуть абсолютно однаковими, тому це не може тривати вічно. Щоб дозволити повторну синхронізацію годинника приймача з тактовою частотою передавача, символ даних закінчується, рядок на деякий час залишається в режимі очікування, після чого процес повторюється. Помилки синхронізації накопичуються починаючи з переднього краю стартового біта, тому максимальний дрейф знаходиться в останньому біті. Після завершення цього символу приймач скидає очікування наступного біта запуску і процес повторюється.
З 8 бітів даних, найгірший випадок для синхронізації - вибірка останнього біта. Це в 8,5 біт разів від посилання часу, що є передовим краєм стартового біта. Якщо приймач вимкнений на 1/2 біта або більше, він відбиратиме останній біт під час іншого біта. Зрозуміло, що це погано. Це відбувається при невідповідності тактової частоти 1/2 біт у 8 1/2 біт, або 5,9%. Це гарантовано невідповідність. Для надійності зазвичай потрібно переконатися, що приймач відповідає половині передавача, або 2,9%. Це являє собою 1/4-бітну помилку часу в останньому біті.
Однак це не зовсім так просто. У вищеописаному сценарії приймач, по суті, запускає секундомір на передньому краї стартового біта. Теоретично це можна зробити в аналоговій електроніці, але це було б складно і дорого і не легко інтегрується в цифрові мікросхеми. Натомість у більшості цифрових UART-реалізацій є внутрішній тактовий годинник, який працює на 16x очікуваної швидкості передачі бітів. Потім "секундомір" підраховує ці 16x циклів. Це означає, що існує додаткова можлива помилка 1/16 біта, додана до всіх разів вибірки бітів, що є подібним до іншого .7% невідповідності тактових частот в останній біт.
Сподіваємось, це дає зрозуміти, що таке стоп-біт, як працює синхронізація бітів та що таке 16-годинний годинник. Я здебільшого пропускав стоп-біти, але, можливо, зараз ви можете переконатися, чому потрібен хоча б один стоп-біт. В основному стоп-біти - це мінімальний примусовий час простою рядка між символами. Це час, протягом якого приймач закінчив приймати символ і готовий до наступного переднього краю стартового біта. Якби не було стоп-біту, то останній біт даних міг би бути такої ж полярності, як і початковий біт, і у приймача не було б краю для запуску секундоміра.
Давно цей протокол був розшифрований кулачками, важелями та прядилами. Два стоп-біта часто використовувались для того, щоб дозволити скидання механізму. В даний час все робиться в цифровій логіці, і 1 стоп-біт використовується в значній мірі універсально. Ви часто бачите протокол низького рівня, записаний стенограмою, як 8-N-1, тобто 8 бітів даних, відсутні біти парності (забудьте про них, вони сьогодні рідко використовуються) та 1 стоп-біт. Початковий біт мається на увазі, оскільки тут немає жодної опції.
Використовуючи 8-N-1, 8-бітний байт даних фактично займає 10 біт разів для надсилання. Це одна з причин, що існує різниця між "швидкістю передачі бітів" і "швидкістю передачі даних". Швидкість передачі передач позначає окремі час сигналу бітів, включаючи біти початку та зупинки. При 100 кбаудах кожен переданий біт займає 10 мкс, включаючи біти запуску та зупинки. Тому весь персонаж займає 100 мкс, але передаються лише 8 біт реальних даних. Швидкість передачі даних становить 100 к, але швидкість передачі даних з точки зору вищих рівнів становить лише 80 кбіт / с.