Saya telah berupaya membuat UART pada FPGA. Saya dapat berhasil mengirim dan menerima satu karakter yang diketik pada Putty. Namun, ketika saya mengatur FPGA saya untuk terus-menerus menulis urutan besar "A", kadang-kadang saya berakhir dengan urutan "@" atau beberapa karakter lain sampai saya mengatur ulang FPGA beberapa kali.
Saya percaya UART di komputer kehilangan jejak perbedaan antara bit mulai dan nol. Penundaan antara dua "A" adalah ~ 30us (diukur dengan penganalisa logika) dan baud rate 115200 8N1.
Apakah ada penundaan minimum yang harus dipertahankan antara dua frame RS232 berturut-turut?
serial-port
rs232
Tuan Loh.
sumber
sumber
Jawaban:
Serta kecepatan dan jumlah bit data, saya pikir kedua ujungnya harus menyetujui jumlah bit mulai, bit berhenti dan bit paritas.
Lihat Komunikasi Serial Asinkron
Di atas menunjukkan bagaimana karakter dipisahkan tetapi agak diidealkan naik dan turun kali, saya percaya ruang lingkup akan menunjukkan sesuatu yang lebih seperti apa yang berikut (perhatikan tanda terbalik / sumbu spasi dibandingkan dengan diagram sebelumnya).
Mungkin Anda harus mengatur kecepatan lebih rendah, mungkin FPGA Anda tidak memancarkan sinyal yang terbentuk dengan baik pada kecepatan yang lebih tinggi.
RS232 juga async, saya percaya itu berarti penerima diharapkan untuk menyinkronkan pengaturan waktunya berdasarkan bit mulai dan berhenti.
Perbedaannya adalah masalah waktu yang akurat. Dengan pengaturan waktu yang tidak akurat, penerima dapat menghitung enam bukannya lima sedangkan +3 ... 15V dinyatakan.
Lihat Pengaturan Waktu Sinyal dan Karakteristik Sinyal
sumber
Tidak, tidak ada persyaratan seperti itu (tidak ada min dan tidak ada maks) di EIA / RS232C.
Bit Mulai dari karakter berikutnya dapat langsung mengikuti Stop bit karakter.
Perhatikan bahwa baris menganggur pada kondisi Penandaan, yang levelnya sama dengan bit Stop.
Sangat menarik bahwa Anda tidak menyebutkan bit Stop dalam bingkai karakter.
Anda menggunakan alat yang salah untuk tugas ini! Anda harus menggunakan ruang lingkup '. Anda tidak dapat menganalisis masalah waktu dengan melihat tayangan analog dan sampel yang disanitasi.
Perbedaan antara bit Mulai dan nol adalah waktu. Bingkai karakter ditransmisikan pada tingkat yang tidak sinkron. Tetapi bit dari frame harus clock pada laju jam yang ditentukan.
Untuk baud rate 115200, itu akan menjadi 8.68usec untuk waktu 1 bit. Untuk 8 bit data plus bit Mulai dan bit Stop, waktu bingkai adalah 86,8 USD.
Pertanyaan Anda menyiratkan bahwa Anda tidak repot-repot melihat spesifikasi EIA / RS232C untuk waktu naik / turun minimum dan ketika sinyal biasanya diambil sampelnya. Metode menarik untuk mengimplementasikan HW.
Mungkin Anda juga harus menggunakan penghitung frekuensi untuk mengukur generator baud rate di setiap ujungnya. Ketidakcocokan beberapa persen biasanya dapat ditoleransi. Ketidakcocokan bisa menghasilkan gejala yang Anda lihat.
Kenapa kesalahan framing tidak dilaporkan oleh penerima? Alih-alih hanya melihat output, mungkin Anda perlu meninjau statistik port serial, yaitu
/proc/tty/driver/...
sumber
Saya menduga bahwa UART masih sangat mirip dengan yang asli. Mereka menggunakan clock rate 16xdata untuk "sampel" data, vs skema analog sebelumnya yang menggunakan osilator yang dipicu oleh edge. Dengan menggunakan pendekatan sampel, UART dapat dengan cukup akurat menempatkan waktu sampelnya di tengah-tengah pulsa, dan bahkan dapat melakukan beberapa sampel agar sedikit lebih toleran terhadap kebisingan.
Deskripsi Anda tidak jelas karena Anda berbicara dalam komentar baru-baru ini tentang "mendeteksi bit awal", tetapi sebelumnya Anda telah menyiratkan bahwa Anda MENYALANKAN dan karenanya tidak akan memiliki "deteksi".
sumber