Минулого місяця я витратив три дні на налагодження дисплея UART, який постійно показував випадкове сміття на екрані. Виявилося, що швидкість передачі даних знизилася лише на 0,5%. Цієї крихітної різниці було достатньо, щоб усе зіпсувати.
Це важливіше, ніж ви думаєте. Дисплей UART здається простим - лише три дроти, і готово. Але щоб отримати надійний зв’язок, потрібно зрозуміти, що насправді відбувається з цими сигналами.
Чому комунікація дисплея UART складніша, ніж здається
Дисплей UART використовує протокол Universal Asynchronous Receiver-Transmitter. Налаштування мінімальні - зазвичай лише TX, RX і земля. Ось чому модулі відображення uart скрізь у вбудованих проектах.
Заковика в тій «асинхронній» частині. Між вашим мікроконтролером і дисплеєм uart немає спільного годинника. Обидва пристрої працюють за власним часом, що означає, що вам потрібна тісна координація через налаштування. Зробіть одне неправильне налаштування, і ваш дисплей UART взагалі не працюватиме, або ще гірше - інколи він працюватиме, але випаде з ладу.
Швидкість передачі даних: чому це число так важливо
Швидкість передачі – це те, наскільки швидко дані переміщуються на ваш дисплей UART. Загальні швидкості: 9600, 19200, 38400, 57600 і 115200 біт на секунду. Більшість людей починають із 9600, тому що він надійний і працює з довшими кабелями.
Ось що мене спочатку збентежило - дисплей UART, встановлений на 9600 бод, насправді не передає 9600 біт корисних даних за секунду. За стандартної конфігурації "9600 8N1" (9600 бод, 8 біт даних, без паритету, 1 стоп-біт) ви надсилаєте 10 біт на кожні 8 біт реальних даних. Один стартовий біт, вісім біт даних, один стоп-біт. Таким чином, фактична пропускна здатність становить лише 960 байт на секунду.
Це важливо, коли ви намагаєтеся швидко оновити дисплей UART. Якщо ви хочете оновити дисплей символів 20x4 п’ять разів на секунду, це 400 байт на секунду лише для символів. Додайте накладні витрати на команди, і вам знадобиться запас вище 4000 бод. Таким чином, 9600 працює добре, але 4800 буде різати його близько.
Вибір правильної швидкості
Довжина кабелю впливає на швидкість передачі даних для вашого дисплея UART. У мене був повний збій 115200 бод через 3-метровий кабель, але 9600 бод ідеально працює на відстані 15 метрів. Вищі швидкості потребують кращої якості сигналу.
Температура теж має значення. Багато мікроконтролерів використовують внутрішні осцилятори, які дрейфують із температурою. Я дізнався про це, коли дисплеї uart у зовнішніх установках почали періодично виходити з ладу. Літня спека призвела до достатнього відхилення годинника, щоб перервати зв’язок на швидкості 115200 бод. Зниження до 57600 це виправило.
Для чогось критичного використовуйте кварцевий генератор замість внутрішнього RC-генератора. Або просто бігайте на нижчих швидкостях, де толерантність до часу краща.
Математика за толерантністю швидкості передачі даних
Стандартний зв'язок дисплея UART може обробляти невідповідність швидкості передачі до 3,75% для 8-бітних кадрів. Звучить багато, але це не так. Якщо годинник вашого мікроконтролера вимкнено на 2%, а осцилятор дисплея UART вимкнено на 2% у протилежному напрямку, ви вже маєте 4% загальну помилку. Зв'язок не вдається.
Ось чому дешеві компоненти іноді не працюють разом, навіть якщо в таблицях даних зазначено, що вони повинні працювати.
Перевірка парності в системах відображення UART
Парність — це додатковий біт, який допомагає вловлювати помилки передачі на ваш дисплей UART. Є три варіанти:
Парність навіть- Біт парності робить загальну кількість одиниць у кадрі парною. Надішліть літеру «S» (двійковий 01010011), і біт парності дорівнюватиме 0, оскільки вже є чотири 1.
Непарна парність- Робить загальну кількість одиниць непарною. Той самий символ «S» отримує біт парності 1.
Немає паритету- Повністю пропустити біт парності. Це «N» у «9600 8N1», який використовують більшість проектів відображення uart.
Коли паритет справді допомагає
Перевірка парності має сенс для встановлення дисплеїв UART поблизу двигунів або інших джерел електричного шуму. У промислових умовах жорсткі - котушки реле, частотні приводи та зварювальні апарати створюють перешкоди, які можуть перевертати біти.
Я також вмикаю парність для довгих кабелів. Чим довший кабель до дисплея uart, тим більше шансів на проблеми. Навіть у чистому офісному середовищі 10-метровий кабель вловлює достатньо шуму, щоб пошкодити випадкові байти.
Але ось що: - парність виловлює лише одно-бітові помилки. Якщо два біти перевертаються в одному кадрі (рідко, але можливо), парність пропускає це. Для справді важливих даних відображення uart вам потрібна краща перевірка помилок на рівні протоколу, а не лише контроль парності.
Чесна правда про паритет
Більшість проектів дисплеїв UART короткого діапазону в звичайних середовищах не потребують паритету. Я відправив сотні одиниць із використанням 9600 8N1 без паритету, і частота помилок практично дорівнює нулю в приміщенні через кабелі менше 2 метрів.
Тим не менш, увімкніть його під час розробки. Ви можете вимкнути його пізніше, якщо перевірка покаже, що він не потрібен. Але своєчасне виявлення помилок перемагає таємничі невдачі після доставки.
Як насправді працюють дисплеї UART
Кожен байт, що надходить на ваш дисплей uart, передається в певному форматі:
Стартовий біт- Лінія зазвичай розташована високо. Початковий біт перемикає його на низький рівень, щоб сигналізувати про надходження даних. Це повідомляє дисплею uart почати вибірку.
Біти даних- Зазвичай 8 біт, молодший біт передається спочатку. Це ваше фактичне корисне навантаження.
Біт парності- Додатковий біт перевірки помилок.
Стоп-біти- Повернення до високого рівня, щоб завершити кадр. Зазвичай 1 біт, хоча старі системи використовували 2.
Дисплей uart чекає початкового біта, а потім пробує рядок зі швидкістю передачі даних, щоб прочитати кожен біт даних. Він виконує вибірку в центрі кожного бітового періоду, що забезпечує максимальний допуск до помилок синхронізації. Ось чому невеликі невідповідності швидкості передачі іноді спрацьовують -, поки час не дрейфує надто сильно до кінця кадру, дисплей uart може правильно його декодувати.
Робота з помилками під час зв’язку дисплея UART
Трапляються помилки. Збої живлення, незакріплені роз’єми, електричні перешкоди - багато речей можуть зіпсувати дані дисплея uart. Питання в тому, як ви з цим справляєтеся.
Поширені типи помилок
Помилки кадрування- Дисплей uart не бачить стоповий біт там, де його очікує. Зазвичай це означає, що час вимкнено або один пристрій скинуто під час-передачі. Коли це станеться, викиньте цей байт.
Помилки парності- Отримані дані не відповідають біту парності. Щось пошкодило дані, тому викиньте їх.
Помилки перевиконання- Нові дані надійшли на дисплей UART до того, як програмне забезпечення прочитало попередній байт. Ваш код не встигає. Використовуйте переривання або DMA, або сповільніть швидкість передачі.
Переповнення буфера- Буфер отримання заповнено, оскільки програма недостатньо швидко обробляє дані відображення UART. Потрібні більші буфери або швидша обробка.
Практична робота з помилками
Ось що насправді працює в реальних проектах відображення UART:
Апаратний рівень- Перевірте наявність позначок помилки після кожного байта. Якщо встановлено будь-який прапорець помилки, викиньте цей байт і очистіть прапорці. Не намагайтеся використовувати пошкоджені дані на дисплеї UART.
Рівень протоколу- Створіть просту структуру пакетів на основі основного зв’язку відображення UART:
Байт заголовка для позначення початку пакета
Поле довжини
Фактичні дані
Контрольна сума (навіть базова контрольна сума XOR допомагає)
Коли дисплей uart отримує пакет із поганою контрольною сумою, він може запитати повторну передачу.
Тайм-аути- Якщо дисплей UART не відповідає протягом 100–200 мс, повторіть команду. Це вловлює багато випадків невдачі.
Розмір буфера- Зробіть буфери отримання щонайменше в 4 рази більшими за ваш найбільший пакет. Використовуйте циклічні буфери для ефективного керування вхідними даними відображення UART.
Реальний приклад: вибухові перешкоди
Одного разу я налагодив дисплей uart, який показував спотворений текст протягом кількох секунд, а потім відновлювався. Після кількох днів тестування я виявив, що сусідній контролер двигуна створював сплески шуму під час запуску. Ці сплески спричиняли численні помилки, що відбувалися один за одним.
Виправлення полягало в додаванні логіки виявлення пакетів. Коли дисплей uart бачить більше 3 помилок за 100 мс, він очищає буфер прийому, ігнорує дані протягом 50 мс, а потім повторно синхронізується, очікуючи заголовка пакета. Це зробило дисплей UART надійним проти пакетних перешкод, але при цьому швидко відновлювався.
Пришвидшення зв’язку дисплея UART
Як тільки ваш UART-дисплей запрацює надійно, є способи покращити продуктивність.
Використання DMA
DMA (прямий доступ до пам’яті) переміщує дані між пам’яттю та периферійним дисплеєм uart, не турбуючись про ЦП для кожного байта. Я помітив, що використання ЦП впало з 40% до менше 5% завдяки переходу від переривань-на передачу DMA у програмах відображення uart.
Контроль потоку
Апаратне керування потоком використовує сигнали RTS і CTS для запобігання переповненню буфера. Дисплей UART піднімає CTS на низький рівень, коли його буфер заповнений, повідомляючи передавачу про паузу. Це запобігає втраті даних, навіть якщо ЦП дисплея uart зайнятий оновленням екрана.
Програмне керування потоком за допомогою символів XON/XOFF працює, якщо у вас немає додаткових контактів, але воно менш надійне та використовує пропускну здатність, яка може перейти до фактичних даних відображення uart.
Налагодження поширених проблем
Деякі поради щодо усунення несправностей із реальних проектів відображення UART:
Нічого не відображається
Спочатку перевірте ці основи:
- TX і RX перетнулися правильно? (Ваш TX переходить на дисплей UART RX)
- Заземлення підключено між пристроями?
- Однакова швидкість передачі даних з обох сторін?
- Рівні напруги сумісні? (Пристрої 3,3 В і 5 В можуть не працювати разом)
Швидкий тест: підключіть UART дисплей TX до його власного RX (шлейф). Надішліть дані та подивіться, чи вони повернуться. Якщо так, апаратне забезпечення дисплея uart працює, і проблема полягає в підключенні чи іншому пристрої.
Спотворені символи
Зазвичай невідповідність швидкості передачі даних або неправильний формат кадру. Подвійна-перевірка:
- Точно однакова швидкість передачі даних з обох сторін
- Ті самі біти даних, парності та стоп-біт
- Виміряйте фактичну швидкість передачі, якщо у вас є осцилограф
Іноді «спотворено» означає, що ви надсилаєте неправильний формат даних. Переконайтеся, що ви надсилаєте дійсний ASCII або інший, який очікує дисплей uart.
Періодичні проблеми
Це найгірші. Перевірте наявність:
- Погані паяні з’єднання або ослаблені роз’єми
- Кабелі прокладені поблизу джерел шуму
- Нестабільне живлення
- Умови змагання в обробниках переривань
Тут дуже допомагає логічний аналізатор. Перехоплюйте сигнали дисплея UART, коли виникають помилки, і дивіться фактичні бітові таймінги.
Працює, а потім зупиняється
Зазвичай переповнення буфера або позначка помилки не очищається. Дисплей uart спочатку працює, але зупиняється після заповнення буфера або виникнення помилки.
перевірити:
- Читання з буфера отримання дисплея uart досить швидко?
- Очистити позначки помилок після виявлення?
- Витік пам'яті повільно споживає оперативну пам'ять?
Просунуті методи, які варто знати
- Багато{0}}мережі- Кілька дисплеїв UART на одній шині за допомогою RS-485. Вимагає адресації та виявлення колізій.
- Оновлення мікропрограми- Використовуйте послідовне підключення дисплея uart, щоб завантажити нове мікропрограмне забезпечення. Зберігає потребу в окремому інтерфейсі програмування.
- Управління живленням- Для систем відображення UART із живленням від акумулятора- використовуйте виявлення розриву, щоб вийти зі сну, або зменшіть швидкість передачі під час низької активності, щоб забезпечити більш глибокий сон.
Що працює у виробництві
Ось що має значення від доставки фактичних дисплеїв UART:
Тестові бали- Додайте доступні точки тестування TX, RX і заземлення на друкованій платі дисплея UART. Вони вам знадобляться для усунення несправностей на місці.
Захист від ESD- роз’єми дисплея uart торкаються та замикаються. Додайте діоди ESD на лінії UART.
Кабельні міркування- Якщо використовуються знімні кабелі, додайте послідовні резистори та, можливо, RC-фільтри, щоб зменшити відбиття.
Документація- Запишіть налаштування UART дисплея UART (передавання даних, біти даних, парність, стопові біти) у схемі, коментарях до коду та посібнику користувача. У майбутньому ви це оціните.
Вбудована-діагностика- Додайте режими діагностики, які повідомляють статистику зв’язку дисплея UART, кількість помилок і стан буфера. Неоціненний при проблемах зі встановленням.
Підведення підсумків
Правильна комунікація дисплея UART вимагає уваги до деталей. Невелика помилка часу або невідповідність конфігурації може означати різницю між надійним дисплеєм UART і годинами розчарування.
Ключові моменти:
1. Ретельно підбирайте швидкість передачі даних, враховуючи точність годинника
2. Використовуйте паритет у шумному середовищі
3. Обробляйте помилки на апаратному та протокольному рівнях
4. Правильно визначте розмір буферів і розгляньте DMA для високої пропускної здатності
5. Випробуйте в діапазонах температур і з реалістичними перешкодами
Почніть із консервативних налаштувань - 9600 8N1 все ще чудово працює для більшості проектів UART. Перед оптимізацією все систематично перевіряйте.
Рішення для дисплеїв Minhua UART
Технологія Мінхуанадає модулі відображення uart і послідовні рішення для відображення для промислових, комерційних і вбудованих систем. Наші дисплеї UART включають:
- Попередньо-налаштовані інтерфейси UART, що підтримують швидкість від 9600 до 115200 біт/с
- Вбудована-обробка помилок із перевіркою парності та CRC
- Промислові-компоненти з номінальною оцінкою від -40 градусів до +85 градусів
- Розміри дисплеїв UART від 2,4" до 15,6".
- Повна документація та зразок коду
- Команда інженерної підтримки
Ми постачаємо дисплеї UART для медичних пристроїв, систем автоматизації та додатків Інтернету речей по всьому світу.
Зв'яжіться з Мінхуащоб обговорити ваші вимоги до відображення uart і запитати зразки оцінки.
