Як два UARTS знають, яку швидкість передачі використовувати?


14

Я читаю про стандартний протокол для UART і думаю, що якщо UART, який отримує, не має уявлення про те, якою швидкістю передачі передаються дані, виникне багато проблем. Якщо передбачувана швидкість передачі даних буде нижчою, ніж швидкість передачі даних, при якій передаються дані, з’являться біти, які не будуть «помічені» приймаючим UART. З іншого боку, якщо швидкість передачі даних, що використовується приймачем, вища, ніж швидкість передачі даних, при якій передаються дані, будуть біти, які будуть підраховані вдвічі і призведуть до неправильного читання даних.

Мої знання навколо UART полягають у тому, що, коли лінія простоює, вона зберігається до "1", біт "Пуск" - "0", а стоп "Біт" - "1". Крім того, що стоп-біт "1" не має різниці з "1", коли лінія простоює чи існує спосіб диференціювання?

Чи погоджуються два сповіщувачі UART, які швидкість передачі вони використовуватимуть? Якщо так, то як вони це роблять?


"Стоп-біт" так само можна було б назвати "повернення в режим очікування", але, зробивши його трохи, він має визначену мінімальну довжину, але після цього гарантований мінімальний час, рядок залишиться в стані "1" до наступний персонаж приходить разом.
Пітер Беннетт

Вони можуть випадковим чином змінити загальну швидкість передачі даних, поки щось не працює XD.
Bradman175

3
Хейс ініціював спосіб дозволити UART в своїх модемах встановити ту саму швидкість передачі даних, що і термінал, що розмовляє з ним, використовуючи послідовність символів "AT" на початку своїх команд. Зазвичай це не розшифровується UART, а вбудованим програмним забезпеченням у режимі реального часу, яке потім налаштує UART на отримання решти командного рядка. Він в основному визначав ширину стартового біта та спосіб встановлення паритету.
зафіксовано

@infix Отже, якщо я планую змінити або створити код Verilog для UART, я можу зробити так, щоб він виявив цю послідовність 'AT' і відрегулював свою швидкість передачі звідти? Я думав ініціалізувати його з найвищою швидкістю передачі, щоб він захоплював усе і звідти знаходив послідовність 'AT'.
Batibot323

Протокол зв'язку на основі UART (названий LIN), який можна побачити в автомобільній промисловості, має механізм автоматичного виявлення передачі передачі даних, але все ще вузли "master" та "slave" повинні "збігатися за довжиною даних та довжиною стоп-бітів. А це означає, що виявлення лише швидкості передачі даних недостатньо.
Rohat Kılıç

Відповіді:


26

Звичайні UART повинні бути попередньо налаштовані на бажану швидкість передачі (а також довжину слова, стоп-біти, парність тощо) традиційно людиною.

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

UART прийому, як правило, має локальний годинник, який працює з більш швидкою швидкістю - як правило, у 8 або 16 разів більша швидкість передачі. Це використовується для вибірки вхідного сигналу та виявлення бітів у слові способом, який може допустити кілька відсотків помилок. Навіть два кристалічні осцилятори не відповідали б швидкостям, але допуск помилок може дозволити використовувати деякі менш точні джерела, іноді включаючи обрізані на мікросхемі генератори і т.д. неточне наближення до певних швидкостей передачі даних - колись для головних годин UART іноді потрібні були певні частоти для доступу до популярних швидкостей передачі даних, наприклад, 11.0592 МГц для сімейства 8051.


2
Моя гіпотеза щодо автоматичного визначення бод може бути таймером та лічильником, який працює одночасно, щоб знайти краї та час між ребрами?
ammar.cma

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

Алгоритм існує (я чув, що він називається "автоматичним передаванням даних" у різних місцях), але коли він реалізований в обмеженій ресурсом області чіпа UART, іноді єдиний спосіб зробити це, використовуючи частину надісланих даних і використовуючи його для калібрування, яке зберігатиметься протягом усієї сесії. Це часто не бажано. Якщо це зроблено в програмному забезпеченні та дозволено невелику затримку, це робити неважливо, не споживаючи даних (тимчасово зберігаючи їх для аналізу) принаймні для комунікацій з низькою швидкістю (менше 200 КБ / с). Більш висока швидкість створює подальші труднощі.
Wossname

8

Два UARTS "домовляються" про швидкість передачі даних за допомогою документації та оператором / користувачем, встановлюючи швидкість передачі вручну, включаючи протокол рукостискання, розмір біта зупинки тощо.


1
..... для обох кінців інтерфейсу.
Майкл Карась

2

Так, все налаштовано вручну, що нерідко болить, особливо коли системи погано задокументовані (я дивлюся на вас, кожна вбудована система коли-небудь).

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

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

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