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?
sumber
Jawaban:
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.
sumber
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.
sumber
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.
sumber