Soru:
Eşzamansız iletim için neden başlatma / durdurma bitine ihtiyacımız var?
amjad
2020-06-10 20:03:11 UTC
view on stackexchange narkive permalink

yazan bir kitap okuyordum

Eşzamansız iletim bu şekilde adlandırılır çünkü bir sinyalin zamanlaması önemsizdir.Bunun yerine bilgi, üzerinde anlaşmaya varılan kalıplarla alınır ve tercüme edilir.Alıcıyı yeni bir grubun gelişi konusunda uyarmak için, bu nedenle, her baytın başına fazladan bir bit eklenir.Genellikle 0 olan bu bit, başlangıç biti olarak adlandırılır.Alıcının baytın bittiğini bilmesini sağlamak için baytın sonuna 1 veya daha fazla ek bit eklenir.Genellikle 1 olan bu bitlere durdurma bitleri denir.

Aşağıdaki resimde gösterildiği gibi:

enter image description here

Fikri tam olarak anlayamıyorum, neden bir başlangıç / bitiş bitine ihtiyacımız var?Bir bayt 8 bitten oluşmaz mı, yani alıcının şimdiye kadar kaç bit aldığını sayması gerekir, eğer sayı 8 ise, bir bayta sahiptir ve işlemi tekrarlar.Öyleyse neden başlatma / durdurma bitine ihtiyacımız var?

Peki ne zaman saymaya başlayacağınızı bilmiyorsanız bitleri nasıl sayarsınız?Unutmayın, mesajlar sürekli değildir ve düzensiz gelebilir ve hem HI hem de LO, yalnızca iki durumunuzun her ikisi de verileri temsil etmek için zaten kullanılmaktadır.Bir mesajın yokluğunu temsil edecek üçüncü bir durum yoktur.
asenkron, saat yok, en az bir kenara ve üzerinde anlaşılan (veya mümkünse tespit edilen) bir hıza ihtiyacınız var, böylece bu 8 bitin verdiği veya aldığı (parite, uzunluk vb.) için orta bit hücre örneklemesi yapabilirsiniz.Ve bu, duruma bağlı olarak nerede olduğunuzu bilmeniz için yeterli değildir, senkronize edildiğinizi düşünene kadar birkaç çerçeveleme hatası yapmanız gerekebilir.
Bir saatiniz olsa bile, sınırların nerede olduğunu bilmiyorsunuz, spi gibi bir saatiniz ve bir seçme sinyaliniz olabilir, böylece hem nerede örnekleyeceğinizi hem de örneklediğiniz şeyi nasıl böleceğinizi görebilir, böylece onu kurtarabilirsiniz.diğer tarafta.
"bir sinyalin zamanlaması önemsizdir" - eğer bir tane duyarsam şaka olduğunu bilin.
Beş yanıtlar:
Andy aka
2020-06-10 20:05:50 UTC
view on stackexchange narkive permalink

Alıcının zamanlamasını başlatan bir sıfır başlangıç bitiniz olmasaydı, bir seri bayt veri akışının başındaki 1 rakamıyla birlikte geldiğinde ne yapmanız gerektiğini nasıl bilebilirsiniz?Bir sonraki bit de 1 ise ve ondan sonraki bit ise ne olur - ya tüm bitler 1 ise?O zaman tüm baytı kaçırırsınız çünkü hiçbir şey değişmez (başlangıç biti 0 olmadığı için).

Başta sıfır başlangıç biti olan normal 8 yüksek bit: -

enter image description here

Eksik başlangıç biti: -

enter image description here

Yorumlar uzun tartışmalar için değildir;bu konuşma [sohbete taşındı] (https://chat.stackexchange.com/rooms/109283/discussion-on-answer-by-andy-aka-why-we-need-start-stop-bit-for-asenkron-tra).
Cort Ammon
2020-06-12 01:33:31 UTC
view on stackexchange narkive permalink

Kabul edilen cevaba ek olarak dikkate alınması gereken bir diğer husus da zamanlamadır.Gönderici ve alıcı saat arasında sapma yaşayacaksınız, bu nedenle alıcının saati bir şekilde "kurtarması" gerekir.Bunu yapmak için boş sinyalleri kullanan 10 / 8B gibi süslü şemalar vardır, ancak UART'lardaki basit yaklaşım, varlığı sinyalin yükselen kenarına işaret eden bir "başlangıç bitine" sahip olmaktır.Bu, alıcının yaklaşan baytı almak için saatini yeniden senkronize etmesine olanak tanır.

Bu başlatma ve durdurma kalıplarının, alma sırasında hizalamanın çok fazla kaymasını önlemek için yeterince sık meydana gelmesi gerekir.Bu, her baytta görünen başlangıç ve bitiş bitlerine yol açar.Başka şekillerde "ideal" olmaktan geri kalsa bile bu basit bir kural.

OP'nin anlamasını sağlamaya çalıştığım, yapmak için iyi bir nokta.
Tanner Swett
2020-06-11 23:25:34 UTC
view on stackexchange narkive permalink

Fikri tam olarak anlayamıyorum, neden bir başlangıç ​​/ bitiş bitine ihtiyacımız var? Bir bayt 8 bitten oluşmaz mı, yani alıcının şimdiye kadar kaç bit aldığını sayması gerekir, eğer sayı 8 ise, bir bayta sahiptir ve işlemi tekrarlar. Öyleyse neden başlatma / durdurma bitine ihtiyacımız var?

Alıcı, aldığı bitleri sayamaz, çünkü alıcı bit alıp almadığını bilmiyor!

Gönderenin ve alıcının ses kullanarak iletişim kurduğunu hayal edelim ve bir 0'ın bir saniyelik sessizlikle ve 1'in bir saniyelik sesle temsil edildiğini hayal edelim. Kitabınızda, gönderenin gönderecek herhangi bir gerçek verisi olmadığında gönderdiği "boşta durumu" 1, yani ses.

Şimdi, alıcının siz olduğunuzu ve gönderenin bir başlangıç ​​biti kullanmadığını varsayalım. Sekiz saniyelik sürekli ses duyarsınız. Az önce "11111111" baytını mı duydunuz yoksa gönderen boşta mı çalışıyor? Bilmenizin hiçbir yolu yok, çünkü hepsi size aynı geliyor.

Alternatif olarak, bir saniyelik sessizlik, ardından altı saniyelik ses ve ardından bir saniyelik sessizlik duyduğunuzu varsayalım. Az önce "01111110" baytını mı duydunuz? Ya da belki "11110111" baytı ve ardından "11101111" baytı mıydı? Yine, bilmenin hiçbir yolu yok.

Burası başlangıç ​​bitinin geldiği yerdir. Gönderen bir bayt göndermek istediğinde, önce bir 0 (bir saniyelik sessizlik), sonra veri baytını gönderir.

Alıcı olarak işiniz artık çok daha kolay! Dokuz saniyelik ses duyarsanız, gönderenin yalnızca boşta olduğunu bilirsiniz. Öte yandan, bir saniyelik sessizlik ve ardından sekiz saniyelik ses duyarsanız, gönderenin az önce "11111111" baytını gönderdiğini bilirsiniz.

Elbette çoğu makine iletişim sistemi ses kullanmaz; bunun yerine elektrik kullanıyorlar. Ancak elektrik sinyalleri tıpkı ses gibi çalışır. Alıcı, istesek de istemesek de, bir şeyi her zaman alacaktır. Bu nedenle, alıcıya gerçek verileri mi yoksa boşta gürültü mü aldığını bilmesinin bir yolunu vermemiz gerekiyor.

Yorumunuzdan bu belirli soruyu ele almak için:

"boşta" değerimiz yoksa, yani gönderilecek veri olmadığında alıcı hiçbir şey almayacağından, her 8 biti durdurma / başlatma gerekmeden bayt olarak sayabilir bit?

Atıl bir değere sahip olmamak fiziksel olarak imkansızdır. Bir elektrik kablonuz varsa, pozitif voltaj, negatif voltaj veya 0 voltaj göndermek mümkündür, ancak herhangi bir voltaj göndermemek fiziksel olarak imkansızdır. Bu, ne yaparsak yapalım, alıcının her zaman bir miktar voltaj alacağı anlamına gelir. Bu nedenle, alıcıya aldığı voltajın anlamlı olup olmadığını bilmesinin bir yolunu vermeliyiz.

auspicious99
2020-06-10 21:54:43 UTC
view on stackexchange narkive permalink

Belki de kafa karışıklığı, biz insanlar olarak sorunuzda olduğu gibi bir diyagram gördüğümüzde, tüm bitlerin tam olarak nerede olduğunu, hangisinin hangisini takip ettiğini vb. görmemizdir. Ancak, alıcının siz olduğunuzu ve sahip olduğunuz her şeyin ile çalışmak, gelen bir sinyal akışıdır (örneğin, 1 biti temsil etmek için 2 seviye, bir seviye (örneğin, yüksek), 0 biti temsil etmek için başka bir seviye (örneğin, düşük)), analog elektrik sinyali olarak sabit veya bir değerden diğerine değişme. Yine, alıcının 1. biti, 2. biti vb. Global bir bakış açısıyla gören bir insan olmadığını unutmayın.

"Boşta" değerinin 1 bitlik değerle (yüksek) aynı olduğunu varsayalım. O halde 1'den 0'a geçiş yapmadıkça bitlerin ne zaman gelmeye başladığını bilemezsiniz. Aksi takdirde, ilk bit 1 ise, ne zaman başladığını nasıl anlarsınız?

Ardından, durdurma bitleri için, başlangıç ​​bitinin zıt olmasını istersiniz (bu nedenle, 1'in değerleri olmasını istersiniz), böylece bir baytın sonunu işaretler ve bir sonraki baytın ne zaman başladığını bilebilirsiniz. yine yüksekten düşüğe doğru gidiyor.

Bunun küresel bir görüş yerine nedensel olmayan bir görüş olduğunu da iddia edebilirsiniz.Bu sadece nedensel değildir, aynı zamanda diyagramlar, birisinin veya bir şeyin her şeyin nerede başladığını ve bittiğini anladıktan sonra * sonra * çizilir ve onları etiketler."Bu denklemi çözmek için neden bu kadar çalışmaya ihtiyacımız var? Cevap, sonunda burada! Sadece şunu kullanın!" Diyebilirsiniz.
@auspicious99 Cevabınız için teşekkürler.sadece bir soru, eğer "boşta" değerimiz yoksa, yani gönderilecek veri olmadığında, alıcı hiçbir şey almayacaktır, böylece her 8 biti durdurma / başlatma bitine gerek kalmadan bayt olarak sayabilir mi?
@amjad Karışıklığı önlemek için, gönderilen her bayt başlama ve durdurma bitlerine sahiptir, böylece her seferinde 10 bit gönderilir.Bazıları buna hala baud hızı diyor.Alıcı, veri baytı başına 10 bit bekler.Başlatma ve durdurma bitlerinin alıcının verilerle senkronize olmasına yardımcı olduğunu unutmayın.8 bitlik veriler 1'lerin tümü veya 0'ların tümü olabilir.0'dan 1'e veya 1'den 0'a geçiş olmadan bayt sınırı algılanamaz.
Bu durumda, durdurma bitinin gerçekten "bir baytın sonunu işaretlemediğini", hiçbir şeyi işaretlemediğini, baytın sonunun zamanlamadan bilindiğini unutmayın.Durdurma biti, hattı boşta durumuna sıfırlamak için oradadır, böylece bir sonraki başlangıç biti geldiğinde algılanabilir.
@vsz cevabınız için teşekkürler.Fakat hattı boşta durumuna sıfırlamak için gerçekten durdurma bitine ihtiyacımız var mı?Kanal boştayken alıcıya hala 1'ler gönderdiği söylendi
Peki kanal boşta olduğunu nasıl * biliyor?;)
Verici tarafında @amjad, bir anahtarınız olduğunu ve anahtarı bir konuma veya diğerine getirerek her zaman bir değeri veya diğerini seçmeniz gerektiğini hayal edin.
@amjad: Belki de başlangıç bitini, satırı biraz yerine boşta durumuna döndürmek olarak düşünmek daha kolay olurdu.
@amjad: "böylece her 8 biti durdurma / başlatma bitine ihtiyaç duymadan bir bayt olarak sayabilir": Hayır. Eşzamanlı iletişimi tanımlıyorsunuz (herkesin rasgele sürüklenen saatlerini eşzamanlı tutmakla benzer sorunları vardır).Eşzamansız iletişimde, bir baytın sonu ile bir sonrakinin başlangıcı arasında herhangi bir süre geçebilir.Bu sürenin bir biti iletmek için zamanın katı olması gerekmez.
@auspicious99: Durdurma bitlerinin yokluğunda, bir cihaz hattı bir süre boşta bırakmadan önce ardışık 5.000 sıfır bayt gönderirse ne olur?Bir alıcının saatinin, gönderenin 4,999 sıfır ve 0x80 veya 5000 sıfır ve ardından 0xFF yerine tam olarak 5.000 sıfır bayt gönderdiğini belirlemek için ne kadar doğru olması gerekir?Herhangi bir sürekli iletişimde durdurma bitlerini kullanmadan periyodik hat geçişleri olmasını sağlamak için asenkron protokoller tasarlamanın yolları vardır, ancak çoğu UART bunları destekleyecek şekilde yapılandırılamaz.
supercat
2020-06-12 02:39:51 UTC
view on stackexchange narkive permalink

Boşta olan bir hat, aynı durumdaki, net bir başlangıcı olmayan sürekli bir akışla temsil ediliyorsa, iletilen ilk bitin sıfır veya bir olmasına bakılmaksızın, her iletim boşta hat durumundan farklı bir şey göndererek başlamalıdır. . Bir iletimin ne zaman başladığını göstermenin başka bir yolunun yokluğunda, bir başlangıç ​​biti genellikle hem eşzamanlı hem de eşzamansız protokollerde gereklidir; burada boş bir hat, tek tip bir bir veya sıfır dizisinden ayırt edilemez.

Protokolleri tasarlamanın, baytlar arasında ayrı bir başlatma ve durdurma biti gerektirmeyen ve dolayısıyla iletişim verimliliğini% 10 artıran yöntemler olsa da, mekanik olarak tasarlanmış mevcut protokolden biraz daha karmaşık olma eğilimindedirler. bir solenoid, bir motor ve bazı kamların bir kombinasyonu ile çözüldü. Durdurma bitleri olmadan yapmayı zorlaştıracak şeylerden biri, bir başlangıç ​​biti her zaman satırı boşta durumunun tersine sürüyorsa ve her veri biti bağımsız olarak yüksek veya düşük olabilir, o zaman birçok ardışık sıfır bayt gönderme eylemidir. gönderenin ve alıcının senkronize kalmasını sağlamak için herhangi bir geçiş olmadan hattı keyfi olarak uzun bir süre boyunca aşağı çekebilirdi.



Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 4.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...