İki UARTS hangi baud hızının kullanılacağını nasıl biliyor?


14

UART için standart protokol hakkında okuyorum ve eğer alıcı UART veri aktarım hızı hakkında herhangi bir fikrim yoksa, çok sorun olacağını düşünüyorum. Varsayılan baud hızı, verilerin iletildiği baud hızından düşükse, alıcı UART tarafından 'görülmeyecek' bitler olacaktır. Diğer taraftan, alıcı tarafından kullanılan baud hızı, verilerin iletildiği baud hızından daha yüksekse, iki kez sayılacak ve verinin yanlış okunmasına neden olacak bitler olacaktır.

UART hakkındaki bilgim, hat boşta kaldığında, '1' değerinde tutulduğu, Başlangıç ​​bitinin '0' ve Dur bitinin '1' olduğu yönündedir. Ayrıca, Dur biti '1' olmak, hat boşta olduğunda ya da ayırt etmenin bir yolu olduğunda '1' ile herhangi bir farkı yoktur?

İletişim kuran iki UART ilk olarak hangi baud hızını kullanacakları konusunda hemfikir mi? Evet ise, bunu nasıl yapıyorlar?


"Durdurma biti" eşit olarak "boşta duruma geri dönme" olarak adlandırılabilir, ancak bunu biraz yaparak tanımlanmış bir minimum uzunluğa sahiptir, ancak bu garanti edilen minimum süreden sonra, çizgi "1" durumunda kalacaktır. sonraki karakter gelir.
Peter Bennett

Bir şey XD çalışana kadar ortak baud hızlarını rastgele değiştirebilirler.
Bradman175

3
Hayes, UART'larının modemlerinde komutlarının başında 'AT' karakter dizisi kullanarak konuştuğu terminalle aynı baud hızını ayarlamasına izin vermenin bir yolunu başlattı. Bu genellikle UART tarafından çözülmez, ancak daha sonra UART'ı komut satırının geri kalanını alacak şekilde yapılandıracak gerçek zamanlı ürün yazılımı tarafından çözülür. Temel olarak başlangıç ​​bitinin genişliğini ve paritenin nasıl ayarlandığını tespit etti.
sabitlendikten

@infix Eğer UART için bir Verilog kodu değiştirmeyi veya oluşturmayı planlıyorsam, bu 'AT' dizisini tespit edip baud hızını oradan ayarlayacak şekilde yapabilir miyim? En yüksek baud hızında başlatmayı düşünüyordum, böylece her şeyi yakalayacak ve oradan 'AT' dizisini bulacaktı.
Batibot323

Otomotiv endüstrisinde çokça görülebilen bir UART tabanlı iletişim protokolü (LIN olarak adlandırılır) bir otomatik baud algılama mekanizmasına sahiptir, ancak yine de ana ve bağımlı düğümler veri uzunluğu ve durdurma biti uzunluğu açısından eşleşmelidir. Yani, sadece baud hızını tespit etmek yeterli değildir.
Rohat Kılıç

Yanıtlar:


26

Sıradan UART'ların geleneksel olarak bir insan tarafından istenen baud hızıyla (ve ayrıca kelime uzunluğu, durdurma bitleri, eşlik, vb.) Önceden yapılandırılması gerekir.

Birkaç on yıllardır bazı ayarlarda bulunan "otomatik baud" algılaması, tipik olarak baud hızını çıkarmak için dalga formunun temel özelliklerini zamanlayarak çalışmaktadır. İlk sürümlerin iletilmesi için bilinen bir karakter gerekiyordu, ancak daha sofistike sürümler daha keyfi verilerden oranı bulabilir.

Bir alıcı UART tipik olarak daha hızlı bir hızda çalışan bir yerel saate sahiptir - tipik olarak baud hızının 8 veya 16 katı. Bu, gelen sinyali örneklemek ve bir sözcük içindeki bitleri, hata yüzdesinin birkaçını tolere edebilecek şekilde tespit etmek için kullanılır. İki kristal osilatör bile oranları mükemmel şekilde eşleştiremez, ancak hata toleransı, bazen kırpılmış çipli osilatörler vb.Dahil olmak üzere bazı daha az hassas kaynakların kullanılmasına izin verebilir. Ayrıca, popüler osilatör frekanslarının bölünmesinin yalnızca belirli baud hızlarına yanlış bir yaklaşım - eski günlerde, UART ana saatleri bazen popüler baud hızlarına erişmek için belirli frekanslara ihtiyaç duyuyordu, örneğin 8051 ailesinde 11.0592 MHz.


2
Otomatik baud tespiti hakkındaki hipotezim, kenarlar ve kenarlar arasındaki süreyi bulmak için aynı anda çalışan bir zamanlayıcı ve sayaç olabilir mi?
ammar.cma

1
Sorun, arbiter bir "uart seri" dalga formu alabilen ve baud hızı güvenilir bir şekilde belirleyebilecek bir algoritma olmamasıdır. Geçişler arasındaki minimum süreyi yeterince kolayca bulabilirsiniz, ancak bu, tek bir bit dönemini gereksiz yere temsil etmez.
Peter Green

Bir algoritma var (çeşitli yerlerde "otomatik bauding" olarak adlandırıldığını duydum), ancak bir UART çipinin kaynak sınırlı kapsamına uygulandığında, bazen bunu yapmanın tek yolu gönderilen verilerin bir kısmını tüketerek ve oturumun geri kalanında devam edecek kalibrasyon için kullanın. Bu genellikle arzu edilmez. Yazılımda yapılırsa ve biraz gecikmeye izin verilirse, en azından düşük hızda iletişim için (200KB / s'den az) veri tüketmeden (analiz için geçici olarak saklayarak) bunu yapmak önemsizdir. Daha yüksek hızlar daha fazla zorluk yaratır.
Wossname

8

İki UARTS, baud hızı hakkında dokümantasyon ve el sıkışma protokolü, stop bit boyutu vb. Dahil olmak üzere baud hızını elle ayarlayan operatör / kullanıcı tarafından "anlaşır".


1
..... arayüzün her iki ucu için.
Michael Karas

2

Evet, her şey manuel olarak kurulur, bu da özellikle biraz kötü bir şekilde belgelendiğinde (genellikle size baktığım her gömülü sistemde) biraz acıdır.

USB, SATA ve diğer birçok modern veri protokolünün, bazı standartlaştırılmış varsayılan yapılandırma ile bazı sıfırlama veya başlatma olaylarından sonra en düşük hızda başladığını ve daha yüksek hızlara kadar diğer herkesle (veya protokole bağlı olarak sadece master) müzakere ettiğini biliyorum. . Bazıları, desteklenen hızları belirtmek için veri / güç hatlarında çekme veya çekme dirençlerini kullanır.

Diğer protokollerde biraz daha ilgilenmek istiyorsanız, USB müzakeresinde bu web sitesine bakın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.