sdh çoklayıcı türleri. SDH çoklayıcılar. "SDH Dijital Taşıma Ağları"

  • 31.10.2019

Veri kaynağı - yöne bağlı olarak kontrolör veya cihazlar - ardından veri paketi gönderilir. Çoğu durumda, işlem veri gönderme hedefi ile sona erer.ACK paketleri alınan verileri gösterir, HAC verilerin alınmadığını belirtir veya STALL, bitiş noktasının durduğunu gösterir.

Hareket açık USBçerçevenin zaman birimi tarafından düzenlenir. Her karenin uzunluğu zamanı belirler ve 1 kHz'de çalışır, bu nedenle saniyede 1000 kare vardır: milisaniyede bir. Çerçeve (SOF) çerçevesinin her başlangıcında, veri yolu üzerinden bir paket gönderilir ve bu, eşzamanlı cihazların iletişim kanalı ile senkronize olmasına izin verir.
Çerçeve kavramı, bir iletişim kanalının çeşitli rakip cihazlar arasında veri yolu bant genişliğine sahip olmasını sağlamanın anahtarıdır. USB geliştiricileri Her cihazın iletilecek her bir veri örneği için ana bilgisayarı kesmesi gereken bir sistemle hızlı bir örnekleme hızında birden fazla eşzamanlı eşzamanlı iletişim akışını desteklemenin imkansız olacağını düşünün. Bu nedenle, sistemi, eş zamanlı aygıtların her karede zamanın bir kısmını ayırarak garantili bant genişliğine sahip olacak şekilde tasarladılar.
Her çerçevenin en az yüzde 10'u kontrol iletimlerinde kullanılmak üzere ayrılmıştır. Aşırı gecikmeli paketleri kontrol ederek performansın düşük olduğu kabul edilirse, bu yüzde sistem yazılımı tarafından artırılabilir. Hızın üzerinde maksimum sürekli verim USB baud hızının yüzde 90'ından az olmalıdır.
Her çerçevede kalan sürenin bir kısmı veya tamamı eş zamanlı cihazların iletişim kanalları üzerinden iletilebilir. Her iletişim kanalına tahsis edilen fiili paylaşım, iletişim kanalı kurulduğunda önceden görüşülür. Bu, her milisaniyede belirli bir miktarda verinin aktarılabilmesini sağlar. Diğer iletim türleri için kalan bant genişliği kullanılabilir.
Eşzamanlı aygıtlar bir veri arabelleğine ve bir çerçeveye ve veriyolundaki her bloğu tek bir işlem olarak gönderme yeteneğine sahip olmalıdır. Alıcı uçta, arabelleğe alınmamış veriler gerçek zamanlı olarak kurtarılır. Örneğin, CD kalitesinde ve 44,1 kHz örnekleme hızında çalışan bir ses cihazı, çerçeve başına 44 örnek içeren dokuz çerçeve ve ardından 45 örnek içeren bir çerçeve gönderir. Kaynağa arabelleğe alındıktan ve hedefte arabelleği kaldırdıktan sonra, verilerin sağlanmasında birkaç milisaniye gecikme olacak, ancak kalitenin korunması için önemli olan teslim hızı korunacaktır.
Çeviri kesintisi de bir dereceye kadar kritik bir zamana sahiptir. Bağlantılar uç noktayı kesmek için oluşturulduğunda, 1 ile 255 ms (düşük hızlı cihazlar olması durumunda 10 ve 255 ms) arasında gerekli veri yolu erişim süresi belirtilmez. Sistem yazılımı, kesme işlemi henüz tamamlanmadıysa, istenen süre boyunca dikkate alınmasını sağlayan bir aralıkta kesme bitiş noktasını yoklar.
Hata işleme
Önemli hata denetimi ve hata işleme özellikleri yerleşiktir USB Bunun, çevre birimlerini PC'nize bağlamanın güvenilir bir yolu olduğundan emin olmak için. Veri bütünlüğü, dahili genişletme veri yolu ile karşılaştırılabilir olmalıdır.
İletişim kanallarının diferansiyel mantığı ve blendajlı kablolar kullanılarak gürültü nedeniyle veri bozulmasına karşı bağışıklık sağlanmıştır. Hatalar meydana gelirse, paket verilerinin her bir kontrol alanında ayrı ayrı döngüsel artıklık kontrolü (sağlama toplamları) gerçekleştirilir ve hem tek hem de çift bit hatalarının yüzde 100 kurtarılmasına izin verir. Ölümcül hatalar yüksek bir güvenle tespit edilebilir.
Mesajlaşma protokolünde, kayıp ve geçersiz paketler için bir zaman aşımı olan bir kendi kendini iyileştirme mekanizması yerleşiktir. Bazı hatalar donanıma yerleştirilmiştir. Ana bilgisayar denetleyicisi, istemci yazılımına bir hata bildirmeden önce kilitlenme işlemlerini üç kez gönderir.
Kesinti ve veri iletimi, verilerin alındığına dair onay sağlamak veya alınmadıysa yeniden gönderilecek yoklama sağlamak için bir pakette birleştirilir. Bu şekilde, teslimat için gereken süre daha kısa olsa bile bu verilerin iletilmesi garanti edilir.
Eşzamanlı verilerle, başarısız bir veri aktarımını tekrarlamak mümkün değildir. Her çerçeve sırasında iletişim kanalında yalnızca bir "Slot" tahsis edildiğinden, verilerin yeniden gönderilmesi, sonraki veri örneklerinin iletimini geciktirecek ve veri iletim elemanlarının zamanlamasını bozacaktır. Bu nedenle, bir paket gönderilmez, ancak "olduğu gibi" alınması gereken veriler gönderilir.
Çözüm
Evrensel seri veriyoluçok çeşitli düşük ve orta hızlı çevre birimlerini PC'nize nispeten düşük bir maliyetle bağlamak için çok yönlü, esnek bir yol sağlar. Kurulumu, bağlantısı ve konfigürasyonu, seri, paralel veya özel arabirimler kullanan cihazlara kıyasla çevresel cihazların kurulumu ve desteğinin önemli ölçüde daha kolay olduğu anlamına gelir.

USB (Evrensel Seri Veri Yolu) telefon ve tüketici elektroniği cihazlarıyla entegrasyona odaklanan PC mimarisinin endüstri standardı bir uzantısıdır.

Otobüsün Avantajları:

  • USB aygıtı, açık olsa bile herhangi bir zamanda bilgisayara bağlanabilir;
  • bilgisayar bağlı bir USB aygıtı algıladığında, yeteneklerini ve gereksinimlerini öğrenmek için onu otomatik olarak yoklar;
  • sürücüyü yükler ve cihazın bağlantısı kesildiğinde sürücü otomatik olarak kaldırılır;
  • USB cihazı atlama telleri, DIP anahtarları kullanmaz, asla kesinti, DMA, bellek çakışmasına neden olmaz;
  • genişleyen USB hub'ları, çok sayıda aygıtın (127 aygıta kadar) bir veri yoluna bağlanmasına olanak tanır;
  • USB cihazlarının düşük maliyeti.

USB'nin ortaya çıkışı, USB Flash Sürücüyü mümkün kıldı.

USB arayüzünün oluşturulması ve geliştirilmesinin tarihi

USB bilgisayar arayüzünün ilk versiyonu 15 Ocak 1996'da çıktı. Proje, Intel, DEC, IBM, Northen Telecom, Compaq gibi 7 büyük imalat şirketinin ittifakı tarafından başlatıldı.

Bilgi aktarımı için yeni bir standardın ortaya çıkmasının nedeni, PC'lerin çevresel cihazlarla bağlantısını basitleştirme arzusuydu. Standardın ana amacı, kullanıcılara maksimum basitliğe, çok yönlülüğe sahip olacak ve Tak ve Çalıştır veya çalışırken takma ilkesini kullanan böyle bir arabirimi kullanma fırsatı yaratmaktı.

Bu, bağlı cihazın tipi ve modelinin anında otomatik olarak tanınması koşuluyla, çalışma sırasında PC'ye çeşitli giriş-çıkış cihazlarının bağlanmasını mümkün kılacaktır. Ayrıca, hedef belirlendi - sistem veriyolundaki kesintilerin iç kaynaklarının eksikliği sorunundan kurtulmak.

Tüm bu görevler 1996'nın sonunda başarıyla çözüldü ve 1997 baharında USB konektörleriyle donatılmış ilk bilgisayarlar ortaya çıkmaya başladı. USB aygıtları için tam destek, Windows98 işletim sisteminde yalnızca 1998'in sonunda uygulandı ve yalnızca bu aşamadan itibaren, bu arabirimle donatılmış çevresel ekipmanların özellikle hızlı bir şekilde geliştirilmesi ve piyasaya sürülmesi başladı.

USB'nin gerçek kitlesel benimsenmesi, 1997-1998 yıllarında ATX kasalarının ve anakartların yaygın olarak benimsenmesiyle başladı. Apple, kaydedilen ilerlemeden yararlanma fırsatını kaçırmadı ve USB destekli ilk iMac'ini 6 Mayıs 1998'de tanıttı.

Bu standart, Apple Computer tarafından geliştirilen ve FireWare veya IEE1394 olarak adlandırılan benzer bir seri veri arabiriminin olduğu bir zamanda doğdu. USB arabirimi, IEE1394'e alternatif olarak oluşturuldu ve onun yerini alması değil, zaten mevcut bağlantı türüne paralel olarak var olması amaçlandı.

USB'nin ilk sürümünde bazı uyumluluk sorunları ve çeşitli uygulama hataları vardı. Sonuç olarak, Kasım 1998'de USB 1.1 spesifikasyonu çıktı.

USB 2.0 spesifikasyonu Nisan 2000'de tanıtıldı. Ancak standart olarak kabul edilmeden önce bir yıldan fazla bir süre geçti. Bundan sonra, evrensel seri veri yolunun ikinci versiyonunun büyük tanıtımı başladı. Ana avantajı, veri aktarım hızındaki 40 kat artıştı. Ama bunun yanında başka yenilikler de vardı. Yeni Mini-B ve Micro-USB konektörleri bu şekilde ortaya çıktı, USB On-The-Go teknolojisi desteği eklendi (USB cihazlarının bir USB ana bilgisayarının katılımı olmadan birbirleriyle veri alışverişi yapmasına izin verir), mümkün hale geldi. bağlı cihazları şarj etmek için USB üzerinden sağlanan voltajı kullanın.

USB veri yolu nasıl çalışır?

USB, bir ana bilgisayar ile çeşitli çevresel aygıtlar (CP) arasında veri alışverişine izin verir. USB spesifikasyonuna göre, cihazlar (aygıtlar) hub'lar, işlevler veya her ikisinin birleşimi olabilir. Bir hub, yalnızca aygıtları veri yoluna bağlamak için ek noktalar sağlar. USB işlev cihazı, sisteme ISDN bağlantısı, dijital joystick, dijital arabirimli hoparlörler vb. gibi ek işlevler sağlar. Birkaç işlevi uygulayan bir bileşik cihaz, birkaç cihazla birlikte bir hub olarak görünür.

Tüm USB sistemi, bilgisayarın donanım ve yazılım alt sistemi olan ana bilgisayar denetleyicisi tarafından kontrol edilir. Veri yolu, ana bilgisayar ve cihazların kendileri çalışırken cihazları bağlamanıza, yapılandırmanıza, kullanmanıza ve bağlantısını kesmenize olanak tanır.

USB veri yolu ana bilgisayar merkezlidir: alışverişi kontrol eden tek yönetici ana bilgisayardır ve ona bağlı tüm çevre birimleri yalnızca bağımlıdır. USB veri yolunun fiziksel topolojisi çok katmanlı bir yıldızdır. En üstünde, kök hub ile birleştirilmiş ana bilgisayar denetleyicisi bulunur. Bir hub, bir ayırıcı aygıttır; dahası, kendisine bağlı aygıtlar için bir güç kaynağı olabilir. Bir çevresel aygıt veya ara hub, hub'ın her bir bağlantı noktasına doğrudan bağlanabilir; veri yolu, 5 seviyeye kadar hub basamaklandırmasına izin verir (kök sayılmaz). Her ara hub, çevresel aygıtları (veya aşağı akış hub'larını) bağlamak için birden çok aşağı akış bağlantı noktasına ve bir yukarı akış hub'ının kök hub'ına veya aşağı akış bağlantı noktasına bağlanmak için bir yukarı akış bağlantı noktasına sahiptir.

Bağlı cihazlardan gelen veriler USB ana bilgisayara yakınsar ve ayrıca bilgisayarla etkileşim sağlar. Tüm cihazlar bir yıldız topolojisine bağlıdır. Aktif USB bağlantı noktalarının sayısını artırmak için USB hub'larını kullanabilirsiniz. Böylece, "ağaç" mantıksal yapısının bir analogunu elde edersiniz. Böyle bir ağaç, ana bilgisayar denetleyicisi başına 127'ye kadar şubeye sahip olabilir ve USB hub'larının yuvalama düzeyi beşi geçmemelidir. Ek olarak, tek bir USB ana bilgisayarı, bağlı cihazların maksimum sayısını orantılı olarak artıran birden fazla ana bilgisayar denetleyicisine sahip olabilir.

Hublar iki tiptir. Bazıları bir bilgisayardaki USB bağlantı noktası sayısını artırırken, diğerleri birden fazla bilgisayarı bağlamanıza izin verir. İkinci seçenek, birden fazla sistemin aynı cihazları kullanmasına izin verir. Hub'a bağlı olarak, anahtarlama manuel veya otomatik olarak yapılabilir.

USB aracılığıyla bağlanan bir fiziksel cihaz, mantıksal olarak belirli belirli işlevleri yerine getiren "alt cihazlara" bölünebilir. Örneğin, bir web kamerasında yerleşik bir mikrofon olabilir - iki alt cihazı olduğu ortaya çıktı: ses ve video iletmek için.

Veri aktarımı, özel mantıksal kanallar aracılığıyla gerçekleşir. Her USB cihazına 32 kanala kadar (16 alıcı ve 16 verici) atanabilir. Her kanal, geleneksel olarak "bitiş noktasına" bağlanır. Bir uç nokta veri alabilir veya iletebilir, ancak bunu aynı anda yapamaz. Bir fonksiyonun çalışması için gerekli olan uç noktalar grubuna arayüz denir. Bir istisna, cihaz yapılandırması için olan "boş" uç noktadır.

USB ana bilgisayara yeni bir cihaz bağlandığında, ona bir tanımlayıcı atama süreci başlar. İlk olarak, cihaza bir sıfırlama sinyali gönderilir. Aynı zamanda veri alışverişinin belirlenebileceği hız da belirlenir. Bundan sonra, yapılandırma bilgileri cihazdan okunur ve ona yedi bitlik benzersiz bir adres atanır. Cihaz ana bilgisayar tarafından destekleniyorsa, onunla çalışmak için gerekli tüm sürücüler yüklenir ve ardından işlem tamamlanır. Bir USB ana bilgisayarını yeniden başlatmak, bağlı tüm cihazlara her zaman kimlikleri ve adresleri yeniden atayacaktır.

Programın bellek hücrelerinin fiziksel adreslerine, I/O portlarına, kesmelere ve DMA kanallarına erişerek cihazlarla etkileşime girdiği genişleme veri yollarının (ISA/EISA, PCI, PC Card) aksine, uygulamalar USB cihazları ile sadece program arayüzü üzerinden etkileşime girer. Bu cihazdan bağımsız arabirim, USB denetleyici sistem yazılımı tarafından sağlanır.

Çevre aygıtlarını USB veri yoluna bağlamak için, veri almak ve iletmek için kullanılan diferansiyel bağlantıda iki telli (bükümlü çift) ve çevresel aygıta güç sağlamak için iki telli dört telli bir kablo kullanılır. Dahili güç hatları sayesinde, USB veri yolu, kendi güç kaynağı olmadan çevre birimlerini bağlamanıza izin verir (cihazın USB veri yolu güç hatları üzerinden tükettiği maksimum akım 500 mA'yı geçmemelidir).

Veri kodlama

Veri yolu, D + ve D- sinyallerini iki kablo üzerinden iletmek için diferansiyel bir yöntem kullanır. Tüm veriler, bit doldurmalı (NRZI - Sıfıra Dönüşsüz Dönüştürme) NRZI adlı bir yöntem kullanılarak kodlanır.

USB, mantık seviyelerini voltaj seviyeleri olarak kodlamak yerine, mantık 0'ı voltaj değişikliği ve mantık 1'i sabit voltaj olarak tanımlar. Bu yöntem, 1 ve 0'ı temsil etmek için iki seviyenin potansiyellerinin kullanıldığı normal potansiyel NRZ (Sıfıra Dönüşsüz) kodlama yönteminin bir modifikasyonudur, ancak NRZI yönteminde mevcut biti kodlamak için kullanılan potansiyel, o potansiyele bağlıdır. önceki biti kodlamak için kullanıldı. Geçerli bit 0 ise, mevcut potansiyel, değerinden bağımsız olarak önceki bitin potansiyelinin tersidir. Geçerli bitin değeri 1 ise, mevcut potansiyel öncekini tekrarlar. Açıkçası, veriler sıfır içeriyorsa, alıcı ve vericinin senkronizasyonu sürdürmesi oldukça kolaydır - sinyal seviyesi sürekli değişecektir. Ancak veriler uzun bir dizi içeriyorsa, sinyal seviyesi değişecek ve senkronizasyon bozulabilir. Bu nedenle, güvenilir veri iletimi için, çok uzun dizileri kodlardan çıkarmak gerekir. Bu eyleme Bit doldurma denir: her altı birimden sonra otomatik olarak 0 eklenir.

Altı ardışık olan yalnızca üç olası bayt vardır: 00111111, 01111110, 111111100.

Doldurma, iletilen bitlerin sayısını %17'ye kadar artırabilir, ancak pratikte bu değer çok daha azdır. USB veri yoluna bağlı aygıtlar için kodlama şeffaftır: USB denetleyicileri otomatik olarak kodlama ve kod çözme işlemini gerçekleştirir.

Otobüs modları

  • Düşük hız sürüm 1.1 ve 2.0 standartları tarafından desteklenir. En yüksek veri aktarım hızı - 1,5 Mbit / s (187,5 Kb / s). En sık HID cihazları (klavyeler, fareler, joystickler) için kullanılır.
  • Son sürat sürüm 1.1 ve 2.0 standartları tarafından desteklenir. En yüksek veri aktarım hızı 12 Mbps'dir (1,5 Mbps). Piyasaya sürülmeden önce, USB 2.0 en hızlı çalışma moduydu.
  • Yüksek hız 2.0 ve 3.0 standardı tarafından desteklenir. En yüksek veri aktarım hızı - 480 Mbps (60 Mbps).
  • Süper hız 3.0 standardı tarafından desteklenir. En yüksek veri aktarım hızı - 4,8 Gb/sn (600 MB/sn).

Veri transferi

Veri aktarım mekanizması asenkron ve blok tabanlıdır. İletilen veri bloğuna USB çerçevesi veya USB çerçevesi denir ve sabit bir zaman aralığında iletilir. Komutların ve veri bloklarının çalışması, kanal adı verilen mantıksal bir soyutlama kullanılarak gerçekleştirilir. Harici aygıt ayrıca uç noktalar adı verilen mantıksal soyutlamalara bölünmüştür. Bu nedenle kanal, ana bilgisayar denetleyicisi ile harici bir aygıtın uç noktası arasındaki mantıksal bir bağlantıdır. Bir kanal, açık bir dosyayla karşılaştırılabilir.

Varsayılan kanal, komutları (ve komutlara dahil edilen verileri) iletmek için kullanılır ve veri aktarımı için akış kanalları veya mesaj kanalları açılır.

Kanaldaki bilgiler paketler (Paket) şeklinde iletilir. Her paket bir SYNC (SENKronizasyon) alanı ile başlar ve ardından bir PID (Paket Tanımlayıcı) gelir.

USB sistemi, etkileşim için belirli kurallarla üç mantıksal düzeye ayrılmalıdır. Bir USB aygıtı, arayüz, mantıksal ve işlevsel parçalar içerir. Ana bilgisayar ayrıca üç bölüme ayrılmıştır - arayüz, sistem ve yazılım. Her bölüm yalnızca belirli bir görev aralığından sorumludur.

Uygulama programı ile USB veri yolu arasındaki veri alışverişi işlemi, aşağıdaki seviyeler aracılığıyla bellek arabellekleri aktarılarak gerçekleştirilir: Ana bilgisayardaki istemci yazılımı düzeyi:

  • genellikle bir USB aygıt sürücüsü tarafından temsil edilir;
  • bir yandan işletim sistemi, diğer yandan sistem sürücüsü ile kullanıcı etkileşimi sağlar.

Ana bilgisayar USB sistem seviyesi (USBD, Evrensel Seri Veri Yolu Sürücüsü):

  • veri yolu üzerindeki cihazların numaralandırılmasını kontrol eder;
  • veri yolu bant genişliği ve güç kaynağının dağıtımını kontrol eder;
  • özel sürücü isteklerini işler.

USB veri yolu arabirimi ana bilgisayar denetleyicisi(HCD, Ana Bilgisayar Denetleyici Sürücüsü):

  • G/Ç isteklerini, ana bilgisayar denetleyicisinin üzerinde fiziksel işlemler gerçekleştirdiği veri yapılarına dönüştürür;
  • ana bilgisayar denetleyici kayıtları ile çalışır.

İstemci yazılım katmanı, uygulama tarafından istenen işlemi gerçekleştirmek için gereken veri aktarımının türünü belirler. Bu katman, veri aktarım türünü belirledikten sonra aşağıdakileri sistem katmanına aktarır:

  • istemci arabelleği adı verilen bir bellek arabelleği;
  • Gerekli işlem türünü gösteren bir Giriş/Çıkış İstek Paketi (IRP).
  • IRP, yalnızca istek hakkında bilgi içerir (RAM'deki arabelleğin adresi ve uzunluğu). USB sistem sürücüsü, isteği doğrudan işler.

USB kaynaklarını yönetmek için USB sistem sürücüsü katmanı gereklidir. Aşağıdakileri yapmaktan sorumludur:

  • USB veri yolunun bant genişliği tahsisi;
  • her bir fiziksel USB aygıtına mantıksal aygıt adresleri atama;
  • zamanlama işlemleri.

Mantıksal olarak, uç nokta ile yazılım arasındaki veri aktarımı, bir kanal tahsis edilerek ve bu kanal üzerinden veri alışverişi yapılarak yapılır.İstemci yazılım, USBD katmanına IPR istekleri gönderir. USBD sürücüsü, istekleri aşağıdaki kurallara göre işlemlere ayırır:

  • talebin yerine getirilmesi, onu oluşturan tüm işlemler başarıyla tamamlandığında tamamlanmış sayılır;
  • işlem işlemenin tüm ayrıntıları (hazırlık için bekleme, bir hata durumunda işlemin yeniden oynatılması, alıcının kullanılamaması vb.) istemci yazılımına iletilmez;
  • Yazılım yalnızca bir istek başlatabilir ve isteğin tamamlanmasını veya zaman aşımına uğramasını bekleyebilir;
  • cihaz, talebin göndericisine bildirilecek şekilde talebin anormal şekilde sonlandırılmasına neden olan ciddi hatalar sinyali verebilir.

Ana bilgisayar denetleyicisi sürücüsü, veri yolu sistemi sürücüsünden işlemlerin bir listesini alır ve aşağıdakileri yapar:

  • alınan işlemleri işlem listesine ekleyerek yürütülmesini planlar;
  • listeden bir sonraki işlemi alır ve bunu USB veri yolu arabiriminin ana bilgisayar denetleyici katmanına aktarır;
  • tamamlanana kadar her işlemin durumunu takip eder.

USB veri yolu arabirimi ana bilgisayar denetleyicisi çerçeveleri işler. Çerçeveler, NRZI yöntemi kullanılarak seri bit aktarımı ile iletilir.

Böylece:

  • her çerçeve, bileşimi ana bilgisayar sürücüsü tarafından oluşturulan en yüksek öncelikli mesajlardan oluşur;
  • her transfer bir veya daha fazla işlemden oluşur;
  • her işlem partilerden oluşur;
  • her paket bir paket kimliği, veri (varsa) ve bir sağlama toplamından oluşur.


Veri aktarım türleri

Veri yolu özelliği, uç noktalar için dört farklı aktarım türü tanımlar.

Kontrol Transferleri- ana bilgisayar tarafından bağlantı sırasında cihazı yapılandırmak, cihazı kontrol etmek ve çalışma sırasında durum bilgilerini almak için kullanılır. Protokol, bu tür paketlerin garantili teslimatını sağlar. Kontrol mesajının veri alanının uzunluğu, tam hızda 64 baytı ve düşük hızda 8 baytı aşamaz. Bu tür paketler için ana bilgisayarın bant genişliğinin %10'unu ayırması garanti edilir.

Toplu Veri Transferleri- ana bilgisayardan işleve veya işlevden ana bilgisayara garantili veri teslimatı sağlamak için gerekli olduğunda kullanılır, ancak teslimat süresi sınırlı değildir. Bu aktarım, mevcut veri yolu bant genişliğinin tamamını kaplar. Paketlerin 8, 16, 32 veya 64 baytlık bir veri alanı vardır. Bu aktarımlar en düşük önceliğe sahiptir, otobüs ağır yüklendiğinde askıya alınabilirler. Yalnızca tam baud hızında izin verilir. Bu tür paketler, örneğin yazıcılar veya tarayıcılar tarafından kullanılır.

Transferleri Kesinti- tek küçük veri paketlerinin iletilmesi gerektiğinde kullanılır. Her paketin sınırlı bir süre içinde iletilmesi gerekir. Aktarımlar kendiliğinden gerçekleşir ve cihazın gerektirdiğinden daha yavaş hizmet verilmemelidir. Veri alanı tam hızda 64 bayta kadar ve düşük hızda 8 bayta kadar olabilir. Servis zaman sınırı, tam hız için 1-255 ms ve düşük hız için 10-255 ms aralığında ayarlanır. Bu tür aktarımlar, fare ve klavye gibi giriş aygıtlarında kullanılır.

Eşzamanlı Transferler- her zaman aralığında kesin olarak tanımlanmış miktarda veri iletilmesi gerektiğinde, ancak bilgi teslimi garanti edilmediğinde "gerçek zamanlı" veri alışverişi için kullanılır (arızalar, paket kaybı durumunda veri aktarımı tekrarlanmadan gerçekleştirilir) izin verilir). Bu tür aktarımlar, veri yolu bant genişliğinin önceden anlaşılmış bir bölümünü kaplar ve önceden belirlenmiş bir teslimat gecikmesine sahiptir. Eşzamanlı iletimler, dijital ses iletimi gibi ses ve video verilerinin iletimi için multimedya cihazlarında yaygın olarak kullanılır. Eşzamanlı aktarımlar, uç noktaların (veri kaynakları veya alıcıları) sistemle senkronize edildiği şekilde ayrılır. Her biri kendi USB kanalı türüne karşılık gelen asenkron, senkronize ve uyarlanabilir cihaz sınıfları arasında ayrım yapın.

Tüm veri aktarım işlemleri, veri alıp almadığına veya bir çevresel aygıta göndermesine bakılmaksızın, yalnızca ana bilgisayar tarafından başlatılır. Tüm bekleyen işlemler, transfer türüne göre dört listede saklanır. Listeler sürekli olarak yeni isteklerle güncellenir. Listeler halinde sıralanan isteklere göre bilgi aktarım işlemlerinin programlanması, ana bilgisayar tarafından bir çerçeve aralığında gerçekleştirilir. Servis talepleri aşağıdaki kurallara göre gerçekleştirilir:

  • Eşzamanlı aktarımlar en yüksek önceliğe sahiptir;
  • tüm eşzamanlı aktarımlar işlendikten sonra, sistem kesinti aktarımlarına hizmet vermeye devam eder;
  • son sırada, veri dizilerinin aktarımına yönelik isteklere hizmet verilir;
  • Belirtilen aralığın %90'ı geçtikten sonra, ana bilgisayar, diğer üç listeye tam olarak hizmet verip vermediğine bakılmaksızın, otomatik olarak kontrol komutlarının iletimi isteklerine geçer.

Bu kurallara uygunluk, USB veri yolu bant genişliğinin en az %10'unun her zaman kontrol aktarımlarına ayrılmasını sağlar. Tüm kontrol paketlerinin iletimi, zamanlama aralığının kendilerine ayrılan bölümünün sona ermesinden önce tamamlanırsa, kalan süre ana bilgisayar tarafından veri iletimleri için kullanılacaktır.

Spesifikasyon Sürümleri

USB veri yolu için spesifikasyonların geliştirilmesi, geliştiricileri ve ekipman üreticilerini bir USB veri yolu ile birleştiren uluslararası kar amacı gütmeyen kuruluş USB Uygulayıcıları Forumu (USB-IF) çerçevesinde gerçekleştirilir.

1996'nın ortalarından beri PC'ler, anakart yonga seti tarafından uygulanan entegre bir USB denetleyicisi ile üretildi.

USB spesifikasyonunun 1.0 ilk sürümü, aygıt ve bilgisayar arasında iki baud hızı modunu destekler:

  • Mouse, klavye ve joystick gibi cihazlar için Düşük Hız (1.5 Mbit/sn);
  • Modemler ve tarayıcılar için Tam Hız (12 Mbits/sn).

1998 sonbaharında sürüm 1.1 yayınlandı - ilk baskının keşfedilen sorunlarını düzeltti.

USB 1.1'in ana teknik özellikleri:

  • Yeterince yüksek maksimum döviz kuru - 12 Mbit / s'ye kadar.
  • Yüksek bir baud hızı için maksimum kablo uzunluğu 4,5 m'dir.
  • Maksimum bağlı cihaz sayısı (çarpanlar dahil) 127'ye kadardır.
  • Farklı baud hızlarına sahip cihazları bağlamak mümkündür.
  • Ek cihazların ve sonlandırıcıların kullanılması gerekli değildir.
  • Çevresel cihazlar için besleme voltajı 5 V'tur.
  • Cihaz başına maksimum akım tüketimi 500 mA'dır.

2000 baharında, veriyolu bant genişliğinde 40 kat artış sağlayan (yüksek hızlı modda 480 Mbps'ye kadar) USB 2.0 spesifikasyonu yayınlandı. Ancak, USB 2.0 cihazları, yeni arayüzün nihayet tutunabildiği 2002'de ana akıma çarptı.

USB 2.0 spesifikasyonunun ikinci versiyonu, sabit diskler, CD-ROM'lar, dijital kameralar gibi cihazlar için başka bir Yüksek Hızlı modu (480 Mbit/sn) kullanmanıza olanak tanır. 480 Mbps'lik bant genişliği, büyük miktarda veri aktarması gereken harici sürücüler, MP3 çalarlar, akıllı telefonlar ve dijital kameralar için yeterlidir. Ayrıca, USB 2.0 özelliği, ilk sürüm için geliştirilen cihazları tam olarak destekler. Denetleyiciler ve hub'lar, aygıt tarafından desteklenen belirtim sürümünü otomatik olarak algılar. Veri yolu, 25 m'ye kadar (ara hub kullanarak) bilgisayardan uzaktaki 127 adede kadar cihazı bağlamanıza olanak tanır.

Yaygın olarak benimsenmesinden bu yana USB 2.0, seri ve paralel arabirimleri tamamen değiştirmeyi başardı.

Şu anda, USB 2.0 spesifikasyonuna uygun olarak yapılan cihazlar yaygın olarak kullanılmaktadır.

USB 3.0

USB 3.0, maksimum 5Gbps aktarım hızını destekler.

USB 3.0 tip A konektörü

USB 3.0'ın ana hedefi mevcut bant genişliğini artırmak olsa da, yeni standart güç tüketimini etkin bir şekilde optimize ediyor. USB 3.0, U0-U3 adı verilen dört bağlantı durumuna sahiptir. U0 bağlantı durumu, aktif veri aktarımına karşılık gelir ve U3, cihazı "uykuya" geçirir. Bağlantı boştaysa, U1 durumunda veri alımı ve iletimi devre dışı bırakılır. U2 durumu, dahili saati devre dışı bırakarak bir adım daha ileri gider.

USB 3.0 tip B konektörü

Sonuç olarak, bağlı cihazlar, veri aktarımı tamamlandıktan hemen sonra U1 durumuna geçebilir ve bunun USB 2.0 ile karşılaştırıldığında somut güç tüketimi faydaları sağlaması beklenir.

Farklı güç durumlarına ek olarak, USB 3.0 standardı, desteklenen daha yüksek akımıyla USB 2.0'dan farklıdır. USB 2.0 sürümü, 500 mA'lık bir akım eşiği sağladıysa, yeni standart durumunda, sınırlama 900 mA çubuğuna kaydırıldı. Bağlantı başlatma akımı, USB 2.0 için 100 mA'dan USB 3.0 için 150 mA'ya yükseltildi. Her iki parametre de tipik olarak biraz daha yüksek akımlar gerektiren taşınabilir sabit sürücüler için çok önemlidir. Daha önce, sorun ek bir USB fişi kullanılarak, iki bağlantı noktasından güç alınarak, ancak veri aktarımı için yalnızca bir bağlantı kullanılarak çözülüyordu.

USB kabloları ve konektörleri

Hacimli, pahalı paralel ATA veri yolu kablolarının ve özellikle çeşitli konektörleri ve karmaşık bağlantı kurallarıyla SCSI veri yolunun aksine, USB kablolaması basit ve zariftir.

var beş çeşit USB konektörü:

Soldan sağa: mikro USB, mini USB, B tipi, A tipi konektör, A tipi konektör

  • mikro USB- oyuncular ve cep telefonları gibi en küçük cihazlarda kullanılır;
  • mini USB- genellikle oyuncularda, cep telefonlarında ve aynı zamanda dijital kameralarda, PDA'larda ve benzer cihazlarda bulunur;
  • B tipi- boyutun çok önemli olmadığı yazıcılarda, tarayıcılarda ve diğer aygıtlarda yüklü tam boyutlu konektör;
  • A tipi (alıcı)- A tipi bir konektörün bağlı olduğu bilgisayarlarda (veya USB genişleticilerde) kurulu bir konektör;
  • A tipi (fiş)- doğrudan bilgisayara uygun konektöre bağlanan bir konektör.

Kablo ve USB konektör sistemi, cihazları bağlarken hata yapmanıza izin vermez. "A" tipi jaklar yalnızca aşağı akış hub bağlantı noktalarına, "A" tipi fişler ise çevresel veya yukarı akış hub kablolarına uyar. B tipi soketler ve fişler, yalnızca çevresel aygıtlardan ve hub'ların yukarı akış bağlantı noktalarından ("küçük" cihazlardan - fareler, klavyeler vb., kablolar genellikle bağlantıyı kesmez) bağlantısı kesilmiş kablolar için kullanılır. Hub'lar ve cihazlar, çalışırken takma ve çıkarma yetenekleri sağlar.

USB kablosunun maksimum uzunluğu 5 metre olabilir. Bu sınırlama, cihazın tepki süresini azaltmak için getirildi. Ana bilgisayar denetleyicisi sınırlı bir süre için verilerin gelmesini bekler ve gecikme olursa bağlantı kesilebilir.

Tam hızlı veri yolunu destekleyen kablo çift bükümlüdür, ekranlıdır ve düşük hızlı çalışma için de kullanılabilir. Yalnızca minimum hızda (örneğin, bir fare bağlamak için) çalıştırma kablosu herhangi bir ve korumasız olabilir.

Edebiyat

  1. A. Kostsov, V. Kostsov, PC Demir. Kullanıcı el kitabı. - E.: Martin, 2006 .-- 480 s.

Bugünün makalesi, adından da anlaşılacağı gibi, temel konuların tartışılmasına ayrılacaktır. USB arabirimi... Temel kavramları, arayüzün yapısını ele alalım, veri aktarımının nasıl gerçekleştiğini anlayalım ve yakın gelecekte tüm bunları pratikte uygulayacağız 😉 Kısacası, başlayalım!

Bir dizi farklı spesifikasyon var USB... Her şey bununla başladı USB 1.0 ve USB 1.1, daha sonra arayüz gelişti USB 2.0, nihai spesifikasyon nispeten yakın zamanda ortaya çıktı USB 3.0... Ancak şu anda en yaygın uygulama USB 2. 0.

Eh, yeni başlayanlar için ana noktalar ve özellikler. USB 2.0üç çalışma modunu destekler:

  • Yüksek hız- 480 Mb / s'ye kadar
  • Son sürat- 12 Mb / s'ye kadar
  • Düşük hız- 1,5 Mb / s'ye kadar

Otobüs komutanı USB ana bilgisayar(örn. PC) 127'ye kadar farklı cihaz bağlayabilirsiniz. Bu yeterli değilse, başka bir ana bilgisayar eklemeniz gerekir. Ayrıca, cihazın kendisinin ana bilgisayara / ana bilgisayardan veri gönderememesi / alamaması önemlidir, ana bilgisayarın kendisi cihazı adreslemesi gerekir.

hakkında yazılan hemen hemen tüm makalelerde USB" terimini kullandığını gördüm. bitiş noktası“, Ama ne olduğu genellikle belirsiz bir şekilde yazılır. Yani, uç nokta cihazın bir parçasıdır USB kendi benzersiz tanımlayıcısı ile. Her cihaz USB birden fazla bitiş noktasına sahip olabilir. Genel olarak - uç nokta sadece bir hafıza alanıdır USB herhangi bir veriyi (veri arabelleği) depolayabilen bir cihaz. Ve sonunda şunu elde ederiz - her cihazın veri yolunda kendine özgü bir adresi vardır. USB ve bu cihazın her uç noktasının kendi numarası vardır. yani bu kadar)

Biraz konuyu dağıtalım ve arayüzün "demir kısmı"ndan bahsedelim.

İki tür konektör vardır - A Tipi ve B Tipi.

Şekilden de anlaşılacağı gibi Tip A her zaman ana bilgisayara atıfta bulunur. Bunlar bilgisayarlarda ve dizüstü bilgisayarlarda gördüğümüz konektörlerdir. Konnektörler B Tipi her zaman takılabilir USB aygıtlarına bakın. USB kablosu, farklı renklerde 4 telden oluşur. Aslında kırmızı güç (+5 V), siyah toprak, beyaz ve yeşil veri iletimi içindir.

Şekilde gösterilenlere ek olarak, USB konektörlerinin başka sürümleri de vardır, örneğin mini USB ve diğerleri, bunu zaten biliyorsunuz 😉

Muhtemelen veri aktarım yöntemine biraz dokunmaya değer, ancak buna girmeyeceğiz) Yani, veri yolu üzerinden veri aktarırken USB kodlama prensibi kullanılır NRZI(inversiyon ile sıfıra dönüş yok). Bir “1” mantığını iletmek için, D + hattının seviyesini +2.8 V'nin üzerine çıkarmak ve D- hattının seviyesinin +0.3 V'nin altına düşürülmesi gerekir. Sıfırın aktarımı için durum şudur: zıt - (D-> 2,8 V) ve (D +< 0.3 В).

Ayrı ayrı, cihazların gücünü tartışmaya değer USB... Ve burada da birkaç seçenek var.

İlk olarak, cihazlar bus-powered olabilir, daha sonra iki sınıfa ayrılabilirler:

  • Düşük güç
  • Yüksek güç

Buradaki fark şu ki düşük güç cihazlar daha fazlasını tüketemez 100 mA... ve cihazlar yüksek güç daha fazla tüketmemeli 100 mA sadece konfigürasyon aşamasında. Ana bilgisayar tarafından yapılandırıldıktan sonra tüketimleri 500 mA.

Ayrıca, cihazların kendi güç kaynakları olabilir. Bu durumda, en fazla alabilirler. 100 mA otobüsten ve diğer her şeyi kaynağınızdan alın)

Hepsi bu kadar görünüyor, hadi iletilen verilerin yapısına geçelim. Yine de bu bizim için en büyük ilgi 😉

Tüm bilgiler iletilir personel düzenli aralıklarla gönderilir. Sırayla, her çerçeve şunlardan oluşur: işlemler... Burada, belki de daha açık olacaktır:

Her çerçeve bir paket içerir , ardından farklı uç noktalar için işlemler takip eder ve hepsi bir toplu işlemle biter EOF (Çerçeve Sonu). Daha kesin olmak gerekirse, o zaman EOF- bu, kelimenin genel anlamıyla bir paket değildir - bu, veri alışverişinin yasak olduğu zaman aralığıdır.

Her işlem şöyle görünür:

İlk paket (adlandırılan Jeton naylon poşet) cihaz adresi hakkında bilgi içerir USB ve bu işlemin amaçlandığı uç nokta numarası. Ek olarak, bu paket, işlemin türü hakkında bilgi depolar (hangi türlerin olduğunu tartışacağız, ancak biraz sonra =)). - onunla her şey açık, bu, ana bilgisayar veya uç nokta (işlemin türüne bağlı olarak) tarafından iletilen verilerdir. son paket Durum- veri alma başarısını kontrol etmek için tasarlanmıştır.

Zaten birçok kez arayüzle ilgili olarak "paket" kelimesi söylendi. USB, bu yüzden onun ne olduğunu bulmanın zamanı geldi. Paketle başlayalım Jeton:

Paketler Jetonüç çeşittir:

  • Kurmak

Ben size bundan bahsetmiştim..) Paketin türüne bağlı olarak, alanın değeri PID v Jeton paket aşağıdaki değerleri alabilir:

  • OUT tipi jeton paketi - PID = 0001
  • IN tipi jeton paketi - PID = 1001
  • SETUP türünde belirteç paketi - PID = 1101
  • SOF tipi jeton paketi - PID = 0101

Paketin bir sonraki bölümüne geçmek Jeton- alanlar Adres ve uç nokta- içerdikleri USB cihaz adresi ve uç nokta numarası amaçlanan işlem.

Peki, alan CRC- bu bir sağlama toplamı, bununla açık.

Burada önemli bir nokta daha var. PID 4 bit içerir, ancak iletim sırasında ilk 4 bitin ters çevrilmesiyle elde edilen 4 bit ile desteklenirler.

Yani sıradaki - yani, bir veri paketi.

Buradaki her şey temelde pakettekiyle aynı Jeton, yalnızca cihaz adresi ve uç nokta numarası yerine, burada iletilen verilere sahibiz.

Düşünmek bize kalır Durum paketler ve SOF paketleri:

Buraya PID sadece iki değer alabilir:

  • Paket doğru bir şekilde alındı ​​- PID = 0010
  • Paket alınırken hata - PID = 1010

Ve sonunda paketler:

Burada yeni bir alan görüyoruz Çerçeve- iletilen çerçevenin numarasını içerir.

Örnek olarak bir USB cihazına veri yazma işlemine bir göz atalım. Yani, bir kayıt çerçevesinin yapısının bir örneğini düşünün.

Çerçeve, hatırladığınız gibi, işlemlerden oluşur ve şöyle görünür:

Tüm bu işlemler nelerdir? Şimdi çözelim! İşlem KURMAK:

İşlem DIŞARI:

Benzer şekilde, bir USB cihazından veri okurken çerçeve şöyle görünür:

İşlem KURMAK zaten gördük, işleme bakalım İÇİNDE 😉

Gördüğünüz gibi, tüm bu işlemler yukarıda tartıştığımızla aynı yapıya sahiptir)

Genel olarak bugünlük bu kadar yeter diye düşünüyorum 😉 Oldukça uzun bir yazı çıktı umarım yakın zamanda USB arayüzünü pratikte uygulamaya çalışırız!

Asgari ile başlayalım:
dahil 18f2455 - kullanılmış MK için kitaplık
--
enable_digital_io () - tüm girişleri dijital moda geçirmek
--
takma ad Buton NS pin_B7 - bağlı bir butonumuz olduğu için bunu ilan edeceğiz
pin_B7_direction = giriş - düğme girmemiz için çalışıyor
--
- tek satır - ve USB CDC ile çalışmak için ihtiyacınız olan her şeye sahibiz
usb_serial dahil - usb ile çalışmak için kitaplık
--
usb_serial_init() - --USB CDC'yi başlat
sonsuza kadar döngü- ana döngü, sürekli olarak gerçekleştirilir
usb_serial_flush() -usb güncellemesi. Bu prosedür gerekli tüm işlemleri gerçekleştirir
- bir PC ile bağlantıyı sürdürme eylemleri
son döngü

Bu kodu derleyerek, ortaya çıkan HEX dosyasını bir bootloader kullanarak MK'ye yazıp cihazı çalıştırarak, sistemde yeni bir cihazın nasıl tanımlandığını izleyebilirsiniz: Sanal com-port.

Artık cihaz çalıştığına göre, ona iletişim kurmayı öğreteceğiz.

Alınan baytı okumak için bir fonksiyon var usb_serial_read ( bayt ) : boole. Alınan bir bayt varsa, onu belirtilen değişkende saklar ve geri döner. NS, aksi halde geri döner YANLIŞ.

Bir bayt göndermek için bir prosedür var usb_serial_data... Bir değişken olarak gizlenmiştir, bu nedenle bir bayt göndermek için ona gönderilen baytın değerini atamak yeterlidir.

Ana döngüden önce bayt boyutunda bir değişken tanımlayalım, ana döngüde alınan baytların varlığını kontrol edeceğiz ve varsa onları geri göndereceğiz.

18f2455 dahil
--
enable_digital_io ()
--
takma ad Buton NS pin_B7
pin_B7_direction = giriş
--
--
usb_serial'ı dahil et
--
usb_serial_init()
var bayt ch - bir değişken tanımlıyoruz
sonsuza kadar döngü- Ana döngü
usb_serial_flush()
Eğer(usb_serial_read (ch)) sonra- bir bayt alınırsa, ch'ye yazılacaktır.
usb_serial_data = ch - alınan baytı geri gönder
eğer son
son döngü

Derliyoruz, düğmeyi basılı tutuyoruz, güç kaynağını karıştırıyoruz, önyükleyiciyi başlatıyoruz, bellenimi değiştiriyoruz, çalıştırıyoruz.
Cihaz sistemde tekrar tespit edildi, şimdi cihazın çalışmasını test etmek için yazılıma ihtiyacımız var.

Kendimize sahip olmasak da hazır bir terminal kullanıyoruz: RealTerm programını kullandım.
İstenilen numara ile portu açıp datayı gönderiyoruz.


Ve gönderdiklerimizi geri alıyoruz. Yani her şey olması gerektiği gibi çalışıyor.

Yazılım

Böylece mikrodenetleyicimiz baytları alıp hemen geri gönderebiliyor. Şimdi onunla iletişim kurmak için kendi yazılımımızı yazalım (Delphi kullanacağım).

Yeni bir proje oluşturuyoruz, gerekli bileşenleri şu şekilde dağıtıyoruz:
SpinEdit1 - bağlantı noktası numarasını belirtmek için
Button1 - bağlantı kurmak için
Button2 - bağlantıyı kesmek için
SpinEdit2 - ondalık bayt girişi için
Button3 - bayt göndermek için
Not1 - alınan bilgileri görüntülemek için.

Yukarıda belirtildiği gibi, com bağlantı noktasıyla normal bir metin dosyasıyla aynı şekilde çalışmanız gerekir: CreateFile, WriteFile ve ReadFile işlevlerini kullanarak.

Ayrıntılara girmemek için com-port ile çalışmak için hazır bir kütüphane alalım: ComPort.

Her düğmeye gerekli görevi asıyoruz ve son kodu alıyoruz:

birim Birim1;

arayüz

kullanır
Windows, Mesajlar, SysUtils, Varyantlar, Sınıflar, Grafikler, Kontroller, Formlar,
İletişim kutuları, StdCtrls, Spin, ComPort;

Tip
TForm1 = sınıf (TForm)
SpinEdit1: TSpinEdit;
Düğme1: T Düğme;
Button2: TButton;
SpinEdit2: TSpinEdit;
Button3: TButton;
Not1: TMemo;
OnRead prosedürü (Gönderen: TObject; ReadBytes: Bayt dizisi);
prosedür Button1Click (Gönderen: TObject);
prosedür Button2Click (Gönderen: TObject);
prosedür FormDestroy (Gönderen: TObject);
prosedür Button3Click (Gönderen: TObject);
özel
(Özel beyanlar)
Bağlantı Noktası: TComPort;
halka açık
(Kamu beyanları)
son;

var
Form1: TForm1;
sayı: tam sayı;
uygulama

Prosedür TForm1.Button1Click (Gönderen: TObject);
başlamak
Bağlantı Noktası: = TComPort.Create (SpinEdit1.Value, br115200); // bir bağlantı oluştur
Port.OnRead: = OnRead; // alınan verileri okumak için bir akış oluşturun
Button2.Enabled: = true; // bağlantıyı kapatmak için düğmeyi etkinleştirin
son;

Prosedür TForm1.Button2Click (Gönderen: TObject);
başlamak
Liman.Ücretsiz; // bağlantıyı kapat
Button2.Enabled: = yanlış; // butonu devre dışı bırak
son;

Prosedür TForm1.Button3Click (Gönderen: TObject);
başlamak
Button2.Enabled ise Port.Write();
son;

Prosedür TForm1.FormDestroy (Gönderen: TObject);
başlamak
Button2.Enable ise
Liman.Ücretsiz;
son;

Prosedür TForm1.OnRead (Gönderen: TObject; ReadBytes: Bayt dizisi);
var
ben: tam sayı;
başlamak
i için: = Düşük (ReadBytes) - Yüksek (ReadBytes) arası // alınan bayt dizisini gözden geçir
başlamak
Memo1.Text: = Memo1.Text + "." + InttoHex (ReadBytes [i], 2); // HEX değerini pencereye ekle
inc (sayı); // alınan bayt sayısını say
son;
eğer sayı> 10 ise başla
Memo1.Lines.Add (""); // satırı kaydır
sayı: = 0;
son;
son;

Başlıyoruz, bağlantı kuruyoruz, bayt gönderiyoruz:

Yani en basit terminalimiz en basit usb cihazı ile çalışmaya hazır.

Görüldüğü gibi okuma ve yazma işlemleri dinamik bayt dizileri ile yapılmaktadır.

Alınan bilgileri işleyerek mevcut göreve uygun gerekli değişim protokolünü oluşturmak mümkündür.

18f2455 dahil
--
enable_digital_io ()
--
takma ad Buton NS pin_B7
pin_B7_direction = giriş
--
--
usb_serial'ı dahil et
--
usb_serial_init()
var bayt ch
var bayt ben - ikinci değişkeni ilan ediyoruz
sonsuza kadar döngü- Ana döngü
usb_serial_flush()
Eğer(usb_serial_read (ch)) sonra- byte alınırsa gerekli işlemleri yaparız
durum ch - bayt numarası üzerinde yineleme
0: usb_serial_data = 0xff
1: usb_serial_data = Düğme - düğme durumu gönderme
AKSİ HALDE engellemek- başka bir şey alınırsa
için 16 kullanarak ben döngü- verilerle 10 bayt gönder
usb_serial_data = ch + i - ch - ch + 15
son döngü
bitiş bloğu
son durum
eğer son
son döngü

Ek özellikler

Bunun üzerinde durursanız, internette yeterli sayıda bulunan kütüphaneyi kullanma örneğinin ayrıntılı bir açıklamasını içeren düzenli bir makale alırsınız. Bu nedenle, biraz daha derinlemesine bilgi ekleyeceğim.

Veri göndermeyi basitleştirme

Her seferinde bir bayt bilgi göndermek her zaman uygun değildir. Bir kütüphane genellikle kullanışlı olabilir Yazdır... Bir programdaki verilerin çıktısını basitleştirebilen tüm olası uzunluklardaki verileri olası tüm biçimlerde gönderme prosedürlerini içerir: bayt, onaltılık, aralık, bin, boole.
> baskıyı dahil et
...
var dword veri
print_dword_hex (usb_serial_data, veri)

Tüm komutların adı kütüphane dosyasında bulunabilir.

PC bağlantısı bekleniyor

Mikrodenetleyicinin ana döngüsüne başlamadan önce, önce PC ile bağlantı kurmanız gerekiyorsa, önüne çizgiler ekleyebilirsiniz.
süre(usb_cdc_line_status () == 0x00) döngü
son döngü

Bağlantı noktası numarasını cihaza bağlayın

Her şeyi olduğu gibi bırakırsanız, sistem her yeni bağlantıda ilk boş port numarasını tahsis edecektir. Ve bu, onu her zaman izlemeniz gerekeceği anlamına gelir.
Bunun olmasını önlemek için, usb kütüphanesini bağlamadan önce cihaza seri numarası için benzersiz bir değer atanmalıdır:
Sayı herhangi bir uzunlukta olabilir ve farklı karakterler içerebilir.
const bayt USB_STRING3 =
{
24 , - dizi uzunluğu
0x03, - bDescriptorType
"0" , 0x00,
"1" , 0x00,
"2" , 0x00,
"3" , 0x00,
"4" , 0x00,
"5" , 0x00,
"6" , 0x00,
"7" , 0x00,
"8" , 0x00,
"9" , 0x00,
"X", 0x00
}

Cihaz adını kendinize göre değiştirin

Sürücüleri kurmadan önce sistemde görünen aygıt adını seri numarası gibi bir adla bir dizi bildirerek değiştirebilirsiniz, bu USB kitaplığını bağlamadan önce yapılmalıdır.
const bayt USB_STRING2 =
{
28 , --
0x03, - bDescriptorType
"NS", 0x00,
"e", 0x00,
"m", 0x00,
"Ö", 0x00,
" " , 0x00,
"B", 0x00,
"Ö", 0x00,
"a", 0x00,
"r", 0x00,
"NS", 0x00,
" " , 0x00,
"=" , 0x00,
")" , 0x00
}

Ama ne yazık ki, sürücüleri yükledikten sonra, cihaz adı .inf dosyasında belirtilen adla değiştirecek, bu yüzden adı orada da değiştireceğiz.


AÇIKLAMA = "Demo CDC"

Otomatik cihaz bağlantısını düzenliyoruz

Ne yazık ki, bu görevi gerçekleştirmenin doğrudan bir yolu yok, bu yüzden bir şeyler yapmalısın.

Her şeyden önce, yüzlerce diğer standart CDC yazılımı arasında kolayca tanımlayabilmeniz için cihazınıza benzersiz bir üretici ve ürün değeri atamanız gerekir.
VID ve PID para için verilir, bu yüzden Çinlilerin yolundan gidelim: sessizce kendimiz için açıkça özgür değerler alacağız.

Bellenim:
USB kitaplığını bağlamadan önce bellenimde iki değişken bildirilmelidir.

sabit kelime USB_SERIAL_PRODUCT_ID = 0xFF10
sabit kelime USB_SERIAL_VENDOR_ID = 0xFF10

FF10 yerine herhangi iki kelime (2 bayt) ekleyebilirsiniz. Sonuç ekteki arşivde yer almaktadır.

Sürücüler:
Sürücüler VID ve PID kombinasyonumuz için tasarlanmadığından değerlerimizi .inf dosyasına manuel olarak ekleyelim:


% DESCRIPTION% = Sürücü Yükleme, USB \ VID_FF10 ve PID_FF10


% DESCRIPTION% = Sürücü Yükleme, USB \ VID_FF10 ve PID_FF10

Yazılım:
Bir aygıtı bağlama/bağlantıyı kesme olaylarını yakalamak için ComponentUSB kitaplığını bağlayın. Her satırı açıklamayı gerekli görmüyorum: tüm değişiklikler ekteki projede görülebilir.

Sonuç

Ekran görüntüsünde görmek zordur, ancak gönder düğmesi yalnızca bağlı bir cihaz olduğunda etkindir, program her 50ms'de bir düğmenin durumunu almak için bir istek gönderir (ancak yanlıştır, çünkü düğmeye basmak yanlıştır). MC'de işlenmelidir).

Gördüğünüz gibi, MK ve PC arasında USB üzerinden veri alışverişini organize etmek en zor iş değil. Ortaya çıkan bağlantı yalnızca nihai amaçlar için kullanılamaz: bir programda hata ayıklamak için de uygundur. Sonuçta, hesaplamaların sonuçlarını, kayıtların ve değişkenlerin mevcut durumlarını bir bilgisayara göndermek, Mors kodunda bir çift LED'i yanıp sönmekten çok daha nettir.

Ve son olarak: Mood lambasının kaynak koduna bakmanızı tavsiye ederim. Orada, uygun bir değişim protokolü düzenlemek için alınan verileri işlemek için oldukça iyi bir seçenek bulabilirsiniz.