Bagaimana dua UART mengetahui baud rate yang digunakan?


14

Saya membaca tentang protokol standar untuk UART dan saya pikir jika penerima UART tidak tahu berapa baud rate data yang dikirimkan, akan ada banyak masalah. Jika baud rate yang diasumsikan lebih rendah dari baud rate di mana data ditransmisikan, akan ada bit yang tidak akan 'dilihat' oleh UART penerima. Di sisi lain jika baud rate yang digunakan oleh penerima lebih tinggi daripada baud rate di mana data ditransmisikan, akan ada bit yang akan dihitung dua kali dan akan mengakibatkan data 'dibaca' salah.

Pengetahuan saya tentang UART adalah bahwa ketika baris idle, ia disimpan ke '1', bit Start adalah '0' dan bit Stop adalah '1'. Juga, Stop bit menjadi '1' tidak memiliki perbedaan dengan '1' ketika garis siaga atau apakah ada cara untuk membedakan?

Apakah dua orang yang berkomunikasi dengan UART pertama-tama menyetujui baud rate yang akan mereka gunakan? Jika ya, bagaimana mereka melakukannya?


"Stop bit" bisa juga disebut "kembali ke kondisi siaga", tetapi dengan membuatnya sedikit, ia memiliki panjang minimum yang ditentukan, tetapi setelah waktu minimum yang dijamin, garis akan tetap dalam status "1" hingga ke karakter selanjutnya datang.
Peter Bennett

Mereka dapat secara acak mengubah tingkat baud umum sampai sesuatu berfungsi XD.
Bradman175

3
Hayes memprakarsai cara untuk membiarkan UART dalam modem mereka mengatur baud rate yang sama dengan terminal yang berbicara dengannya menggunakan urutan karakter 'AT' pada awal perintah mereka. Ini biasanya tidak diterjemahkan oleh UART, tetapi oleh firmware real-time yang kemudian akan mengkonfigurasi UART untuk menerima sisa dari baris perintah. Ini pada dasarnya mendeteksi lebar bit mulai, dan bagaimana paritas diatur.
infixed

@infix Jadi jika saya berencana untuk memodifikasi atau membuat kode Verilog untuk UART, saya dapat membuatnya sehingga akan mendeteksi urutan 'AT' ini dan menyesuaikan baud rate-nya dari sana? Saya berpikir untuk menginisialisasi itu pada baud rate tertinggi sehingga akan menangkap semuanya dan dari sana, temukan urutan 'AT'.
Batibot323

Protokol komunikasi berbasis UART (dinamakan sebagai LIN) yang dapat dilihat banyak di industri otomotif memiliki mekanisme pendeteksian auto-baud, tetapi node master dan slave "harus" cocok dalam hal panjang data dan panjang henti bit. Yang berarti, mendeteksi hanya baud rate tidak cukup.
Rohat Kılıç

Jawaban:


26

UARTs biasa harus dipra-konfigurasi dengan baud rate yang diinginkan (serta panjang kata, bit stop, parity, dll) secara tradisional oleh manusia.

Selama beberapa dekade sekarang meskipun telah ada implementasi deteksi "auto baud" yang ditemukan di beberapa pengaturan, yang biasanya bekerja dengan menentukan waktu fitur utama dari bentuk gelombang untuk menyimpulkan tingkat baud. Versi awal membutuhkan karakter yang dikenal untuk ditransmisikan, tetapi versi yang lebih canggih mungkin dapat menemukan tingkat dari data yang lebih sewenang-wenang.

UART penerima biasanya memiliki jam lokal yang beroperasi pada tingkat yang lebih cepat - biasanya 8 atau 16 kali dari baud rate. Ini digunakan untuk mengambil sampel sinyal yang masuk dan mendeteksi bit dalam suatu kata dengan cara yang dapat mentolerir beberapa persen kesalahan. Bahkan dua osilator kristal tidak akan cocok dengan tingkat sempurna, tetapi toleransi kesalahan dapat mengizinkan penggunaan beberapa sumber yang kurang tepat, kadang-kadang termasuk dipangkas osilator on-chip, dll. Ini juga dapat membantu mengakomodasi fakta bahwa membagi frekuensi osilator populer hanya dapat menghasilkan perkiraan yang tidak akurat untuk laju baud tertentu - di masa lalu, jam induk UART terkadang memerlukan frekuensi tertentu untuk mengakses tarif baud populer, misalnya 11.0592 MHz pada keluarga 8.051.


2
Hipotesis saya tentang deteksi baud otomatis dapat berupa penghitung waktu dan penghitung bekerja secara bersamaan untuk menemukan tepi dan waktu di antara tepian?
ammar.cma

1
Masalahnya adalah tidak ada algoritma yang dapat mengambil bentuk gelombang "uart serial" dan dapat menentukan baudrate dengan andal. Anda dapat menemukan waktu minimum antar transisi dengan cukup mudah tetapi itu tidak secara nessacerally mewakili periode bit tunggal.
Peter Green

Algoritma memang ada (saya pernah mendengarnya disebut "auto-bauding" di berbagai tempat) tetapi ketika diimplementasikan dalam lingkup terbatas sumber daya dari chip UART, kadang-kadang satu-satunya cara untuk melakukannya adalah dengan mengonsumsi beberapa data yang dikirim dan menggunakannya untuk kalibrasi yang akan berlangsung selama sisa sesi. Ini sering tidak diinginkan. Jika dilakukan dalam perangkat lunak dan memungkinkan sedikit latensi maka itu sepele untuk melakukan ini tanpa mengkonsumsi data (dengan menyimpan sementara untuk analisis) setidaknya untuk komunikasi kecepatan rendah (kurang dari 200KB / s). Kecepatan yang lebih tinggi menghadirkan kesulitan lebih lanjut.
Wossname

8

Dua UART "setuju" pada baud rate melalui dokumentasi dan oleh operator / pengguna yang mengatur baud rate dengan tangan, termasuk protokol jabat tangan, ukuran bit stop, dll.


1
..... untuk kedua ujung antarmuka.
Michael Karas

2

Ya, semuanya sudah diatur secara manual, yang seringkali sedikit menyusahkan, terutama ketika sistemnya tidak terdokumentasi dengan baik (Saya melihat Anda, setiap sistem yang tertanam sebelumnya).

Saya tahu USB, SATA, dan sebagian besar protokol data modern lainnya dimulai setelah beberapa acara reset atau inisialisasi pada kecepatan terendah dengan beberapa konfigurasi standar terstandarisasi dan bernegosiasi dengan semua orang (atau master saja, tergantung pada protokol) hingga kecepatan yang lebih tinggi . Beberapa juga menggunakan resistor pull-up atau pull-down pada data / saluran listrik mereka untuk menunjukkan kecepatan yang didukung.

Lihat situs web ini di negosiasi USB jika Anda tertarik mempelajari lebih jauh protokol lain.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.