1000 kişiden bir kişi için ! devam.... 320volt blog

Elektronik Devreler Projeler » Türkçe Entegre Malzeme Bilgileri (datasheet) »

Türkçe pic18f4550 ve usb bilgisi picc dili uygulamalar

Türkçe pic18f4550 ve usb bilgisi picc dili uygulamalar

Kontrol Transferi’nin Detayları

Kontrol transfer’lerini Transfer türleri ve İçerikleri başlığı altında 3.bölümde incelemiştik. Fakat bu başlık altında sadece işlem basamakları ve her basamakta gönderilen paket yapıları incelenmişti.Şimdi bu bölümde bu paketlerin içerdiği bilgileri ve alanlarını inceleyeceğiz.

İşlem Evreleri Daha önce kontrol transferlerinin üç basamaklı olduğunu söylemiştik.Bunlar SETUP, VERI ve STATUS basamaklarıydı.Her basamakta en az üç paket gönderiliyordu. Bunlar ise JETON, VERI ve ELSIKIŞMA paketleriydi.Şimdi bu basamakları ve paketleri daha detaylı inceleyelim.

Setup Basamağı Bu basamak işlemin bir konfigrasyon olduğunu cihaza belirtmek için yürütülür.Her cihaz Setup basamağını tanımak ve ACK ile yanıtlamak zorundadır.Şimdi Setup basamağında iletilen JETON, VERI ve ELSIKIŞMA paketlerinin içeriklerini inceleyelim.

Jeton Paketi
Packet ID içeriği : SETUP(0x0D)
Paketin kaynağı : PC
Ek veriler : Cihaz ve uçnokta adresi
Paketin Anlamı : Bu paket cihaz’a işlem basamağının SETUP olduğunu anlaması için yollanır.

Veri Paketi
Packet ID içeriği : DATA0
Paketin kaynağı : PC
Ek veriler : bmRequestType, bmRequest, wValue, wIndex, wLength
Paketin Anlamı : Bu paket isteğin gerektirdiği bilgileri içerir. Cihaz bu bilgileri yorumlayarak en doğru verileri PC’ye göndermek veya uygun bir yanıtla çevirmek zorundadır.Bu yüzden bu veriler de belirli bir formatta dizilmiş bir byte dizesi olarak cihaz gönderilir. Şimdi bu alanları inceleyelim.

bmRequestType Bu alanın uzunluğu bir byte’dır ve VERI BASAMAĞI’ndaki veriyi gönderecek kaynak bilgisini, isteğin tipini ve alıcı cihazı ifade eder. 7.bit yön bitidir. Yani VERI BASAMAĞININ yönünü ifade eder. Bu bitin olması verinin cihaz’da PC’ye (IN), 0 olması ise PC’den cihaza (OUT) gideceğini bildirir. Bit 6 ve 5 isteğin tipini belirler ve aşağıdaki değerleri alırlar;

bmRequestType

4′ten 0′a kadar olan bitler ise isteğin cihazın hangi elemanına yönelik olduğunu gösterir ve aşağıdaki değerlerden birini alır;

bmRequestType-2

bRequest Bu alanın uzunluğu bir byte’dır ve isteği ifade eder. Bu alanın alacağı değer bmRequestType’ın 6 ve 5 bitleri ile belirlenir. Örneğin bu bitler 0×00 ise bu alan USB için tanımlanmış onbir standart istekten birini ifade edecektir. Bu alan 0×01 ise sınıfa özgü bir isteği, 0×02 olması durumda ise üretici tanımlı bir istek olduğunu belirtecektir.

wValue Bu alan iki byte’dan oluşur ve PC isteğin gerektirdiği bilgiyi bu alanda gönderir. Örneğin PC bir Set_Address isteği gönderdiğinde bu alan içeriği ADRES bilgisi olacaktır.Bu gibi durumlarda VERI BASAMAĞINA gerek kalmaz.

wIndex Bu alan iki byte’dan oluşur ve farklı amaçlarla kullanılır.Daha öncede bahsedildiği gibi bir String Tanımlayıcısı istenirken buradaki index değerine göre ilgili String Tanımlayıcısı gönderilir.Örneğin Manufacturer, yani üretici firma string’i, String Tanımlayıcı dizesinin 2. offset’inde olduğunu düşünelim.Bu durumda Aygıt Tanımlayıcısı’nın iManufacturer alanını 2 olarak belirlemeliyiz.Çünkü PC Aygıt Tanımlayıcısında bu değeri okuduktan sonra Ürtetici String’ini okumak için Get_Descriptor isteğine başvuracak, bu istekte 2 NUMARALI (wIndex = 2) STRING TANIMLAYICISI’nı isteyecektir.

Bu alan isteğin gerektirdiği bilgiye göre değişiklik gösterir. Örneğin STRING alma işlemlerinde işleyiş yukarıda anlatıldığı gibi yürürken, bir arabirim özelliği set edilirken(Set_Interface) bu alanın içeriği arabirim numarasını ifade eder ve 0 ile 7 arası bitler kullanılır.Eğer bir uçnokta özelliği set ediliyorsa(Set_Feature) bu durumda wIndex alanı içeriği uçnokta numarasını ifade eder ve 0 ile 3 arası bitler kullanılır.

wLength Bu alan iki byte’dan oluşur ve veri basamağında gönderilecek veya alınacak veri adedini ifade eder. Bu değer 0 ise Veri basamağında işlem olmaz.

Elsıkışma Paketi
Paket ID içeriği :ACK
Paketin Kaynağı :USB Cihaz
Ek veriler :Bu pakette ek veriler bulunmaz.Sadece PID bulunur.
Paketin Anlamı :Setup Paketini ve Veri paketini sorunsuz alan bir cihaz elsıkışma paketinde ACK döndürerek, işlemleri onaylar ve SETUP BASAMAĞI tamamlanmış olunur. USB cihaz bir hata tespit etmesi halinde elsıkışma yollamayabilir.

Veri Basamağı Bu basamakta Setup basamağındaki isteğin gerektirdiği bilgi taşınır veya PC’den cihaza bilgi transfer’i yapılır. Yani bu basamak mutlaka IN veya OUT işleminden oluşur. Bu basamaktaki işlemin, yani verilerin cihaz’a doğru’mu olacağı veya cihaz’dan PC’ye doğru mu olacağı SETUP basamağındaki Veri paketinde bulunan bmRequestType’ın 7 biti ile cihaza önceden bildirilir. İsteğin içeriğini ve bu biti değerlendiren cihaz ya veri basamağında veri alır, ya da PC’ye gerekli verileri iletir.

Örneğin cihaz Get_Descriptor isteği aldığı zaman veri basamağında bu isteğin gerektirdiği bilgiler taşınır.(IN)Eğer PC bir HID sınıfı isteği olan Set_Report’u gönderirse bu sefer cihaz bu basamakta PC’den veri alır(OUT) Her işlem’de taşınacak verilerin büyüklüğü uçnokta tanımlayıcılarında tanımlı, uçnoktanın maximum paket büyüklüğü ile sınırlıdır. Aynı zamanda gönderilecek veriler tek bir paket’e sığmıyorsa birden fazla işlem evresi gerçekleşir. Her işlem evresinden biraz öncede bahsedildiği gibi uçnokta’nın maximum paket büyüklüğü kadar veri gönderilir.

Bu işlem sayısı ise gönderilecek verilerin adedi ile uçnokta’nın maximum paket büyüklüğünün
bölünmesi ile bulunur.Örneğin cihaz’a 18 byte veri gönderilecek ve uçnokta’nın maximum paket büyüklüğü 8 ise bu durumda bu basamakta gerçekleşecek işlem sayısı 18/8′den 3 olacaktır. Dikkat ederseniz sonuç en yakın sayıya yuvarlanmıştır. Eğer setup basamağındaki veri paketinde tanımlı wLength alanı 0 ise Veri basamağı gerçekleşmez.

Bu gibi durumlar olabilir çünkü PC bazen cihaza veri göndermek için bu basamağı değil Setup basamağının veri paketinde tanımlı wValue alanını kullanır.Örneğin PC cihaz’a bir adres ataması yaparken Set_Address isteğine başvurur ve cihaz için tayin ettiği adres bilgisini Setup basamağının veri paketinde tanımlı olan wValue alanında gönderir. Bu durumda wLength alanı 0 olur çünkü veri basamağına gerek yoktur. Şimdi bu basamaktaki Jeton, Veri ve Elsıkışma paketlerinin içeriğini inceleyelim.

Jeton Paketi
Paket ID içeriği :Eğer isteğin içeriği PC’ye veri gönderileceğerini belirtiyorsa IN aksi halde OUT

Paketin Kaynağı :PC
Ek veriler :Cihaz ve uçnokta’sının adres bilgileri
Paketin Anlamı :Bu paket transfer işleminin hangi yöne olduğunu belirtmek için gönderilir. Böylece alıcı taraf işlemin bir IN veya OUT olduğunu tespit etmiş olur.

Veri Paketi
Paket ID içeriği :Her zaman gönderilen ilk paketin PID alanı DATA1′dir.Bundan sonraki işlemlerde ise DATA0-DATA1…. şeklinde devam eder.

Paketin Kaynağı :Eğer Jeton paketinin PID alanı OUT ise PC, IN ise cihaz
Ek veriler :Gönderilen veri
Paketin Anlamı :Bu pakette SETUP basamağında belirtilen isteğin gerektirdiği bilgiler tranfer edilir veya PC cihaz’a veri gönderir.Gönderilen verinin büyüklüğü yine SETUP basamağındaki wLength alanı ile belirlenir.

Elsıkışma Paketi
Paket ID içeriği :Cihaz isteklere karşı ACK, NAK, STALL ve NYET(high-speed) gönderebilirken, PC sadece ACK döndürür.

Paketin Kaynağı :Bu paketi verileri alan taraf gönderir. Eğer Jeton paketinin PID alanı IN ise bu paketi PC, eğer OUT ise cihaz gönderir.

Ek veriler :Bu pakette ek veriler bulunmaz. Sadece PID bulunur.

Paketin Anlamı :Bu paket alınan verilere karşı alıcı taraf tarafından emir tekrarı(ACK) yapmak için gönderilir.Fakat alıcı taraf bir hata tespit ederse elsıkışma paketi göndermeyebilir.

Status Basamağı Bu basamak Elsıkışma paketine benzer fakat, sadece bir paketin başarılı bir şekilde alınıp alınmadığını değil tüm transferin başarılı olup olmadığını belirtir. Her cihaz hangi basamağı işliyor olursa olsun PC’nin isteği üzerine diğer basamakları terkedip STATUS basamağını yanıtlamak zorundadır. Şimdi bu basamakta gönderilen Jeton, Veri ve Elsıkışma paketlerini inceleyelim.

Jeton Paketi
Paket ID içeriği :Veri basamağının alıcısı cihaz ise (OUT) bu alan IN aksi halde OUT olur.
Paketin Kaynağı :PC
Ek veriler :Cihaz ve uçnokta’sının adres bilgileri
Paketin anlamı :Bu paket bu basamağın yani Status basamağının veri paketi yönünü belirlemek için için gönderilir.

Veri Paketi
Paket ID içeriği :DATA1
Paketin Kaynağı :Bu basamağın yani Status Basamağının Jeton paketi PID’ı IN ise cihaz, OUT ise PC veri gönderir.

Ek veriler :Transferin başarısını 0 uzunluklu bir veri paketi belirler.0 uzunluklu bir veri paketinde sadece PID ve CRC bitleri bulunur, veri bitleri bulunmaz. Status basamağında veriyi PC gönderiyorsa sadece 0 uzunluklu bir paket gönderir.Cihaz gönderiyorsa 0 uzunluklu bir paket, NAK ya da STALL gönderir.

Paketin Anlamı :Bu paket biraz öncede açıklandığı eğer bir hata yoksa sıfır uzunlukta bir paket içerir. Bu tüm transferin başarılı olduğunu gösterir.Sıfır uzunluklu bir paket başka amaçlarda da kullanılır.Örneğin istekler iletilirken önden gönderilen bir sıfır uzunlukta paket, isteğin iletiyor durumda olduğunu ifade eder.

Elsıkışma Paketi
Paket ID içeriği :Veri paketini cihaz gönderdiği ise PC emir takrarı yapar ve PID alanı ACK olur. Eğer verileri PC gönderdi ise yani alıcı taraf cihaz ise bu alan ACK, NAK ve STALL olabilir.

Paketin Kaynağı :Eğer bu basamağın yani Status basamağının veri paketi alıcısı PC ise Elsıkışma paketini de PC gönderir aksi halde cihaz gönderir.

Ek veriler :Bu pakette ek veri bulunmaz.Sadece PID’dan ibarettir.

Paketin Anlamı :Bu paket Status basamağının veri paketini alan alıcı tarafından gönderilir ve tüm transferin son paketidir.

Görüldüğü gibi her basamakta iletilen paketlerin de daha önce anlatılan tanımlayıcılar gibi belirli bir düzeni ve yerleşimi vardır.Aslında tüm transfer’ler bir byte dizisi halinde yolculuk yapar.Fakat PC’nin ve cihazın hangi byte’ın ne anlama geldiğini bilmesi ve buna göre işlem yapması gerekir. Bu yüzden tüm veriler belirli bir kalıp şeklinde tasarlanmıştır. Bu şekilde bu kurala göre tasarlanmış bir cihaz kodu, hangi sıradaki byte’ın hangi anlama geldiğini, hangi sıradaki byte’ın hangi bitinin ne anlama geldiğini bilmiş olur. Örneğin Setup basamağının veri paketinde gönderilen byte’ların yerleşimini incelemiştik.

Cihaz bu yerleşimi bildiğinden ilk byte bmRequestType ikinci byte’ın bmRequest … olduğunu bilir. Böylece birinci byte’ın en değerlikli biti (7.bit) transfer yönünü gösterir diyerek gerekli işlemleri ve hazırlıkları yapabilir.Şimdi bu kalıpların istekler gönderilirken hangi değerler ile doldurulduğuna bakalım. Gönderilen her isteğe göre bu yapıda olan byte’lar değişiklik gösterecektir. Böylece cihaz farklı istekleri ve işlemleri yine bu yapıyı baz alarak değerlendirebilecektir.

Standart İstekler Daha öncede bahsedildiği gibi bir USB cihaz PC’deki portlardan herhangi birine bağlandığı zaman PC cihazı tanımak, sınıflandırmak ve yeteneklerini öğrenmek için bir dizi istekte bulunur. Cihaz bu isteklerin bazılarını desteklemeyebileceği gibi, bazılarınıda mutlaka desteklemek zorundadır.

Cihaz desteklemediği istekler olsa bile mutlaka STALL ile yanıt vermelidir. Cihazların listelenmesi için tanımlanmış toplam onbir istek bulunur ve bunlar 0×00 ile 0x0C arasındadır. Bu istekler cihaza gönderilirken SETUP basamağında yukarıda bahsedilen yapıya uygun olarak gönderilir. Şimdi bu istekleri daha yakından inceleyelim.

Get_Descriptor ( 0×06)

Açıklama: Bu istek cihazdan herhangi bir tanımlayıcıyı göndermesini bildirmek amacıyla SETUP basamağında gönderilir.

bmRequestType İçeriği: SETUP basamağının Veri paketinde bulunan bu alan, bu isteğin gönderilmesi halinde aşağıdaki bit yapısında olur;

Şekil-33) Get_Descriptor için bmRequestType içeriği
get-descriptor-bmrequesttype

bRequest İçeriği: SETUP basamağının Veri paketinde bulunan bu alan bmRequestType’ın 6.ve 5.bitleri 00 olduğundan USB’nin onbir standart isteklerinden birini içerir.Get_Descriptor için bu istek numarası 0×06′dır.

wValue İçeriği: SETUP basamağının Veri paketinde bulunan bu alanın yüksek byte’ında tanımlayıcı tipi düşük byte’ında ise tanımlayıcı değeri bulunur.

Örneğin bu istek ile String Tanımlayıcısı isteniyorsa yüksek byte 0×03(Tablo-2 Tanımlayıcı tablosuna bakın) değerini alacaktır.

wIndex İçeriği: SETUP basamağının Veri paketinde bulunan bu alan String Tanımlayıcısı hariç daima 0′dır.String Tanımlayıcısında ise daha önce anlatıldığı gibi istenen String’in index’ini içerir.

wLength İçeriği: SETUP basamağının Veri paketinde bulunan bu alan gönderilmesi istenen, isteğin gerektirdiği verilerin toplam uzunluğunu gösterir.Bu değer eğer cihazın uçnoktasının gönderebileceği veri boyundan büyükse cihaz uçnokta büyüklüğü kadar veri gönderir, ardından sıfır uzunluklu bir paket daha gönderir.

Bu durumda PC kalan verileride isteyecektir. Bu istek ile alınmak istenen tanımlayıcılar Tablo-2′de listelenmiştir.Konfigrasyon tanımlayıcısının istenmesi ile bu tanımlayıcıyı takiben arabirim ve uçnokta tanımlayıcılarıda gönderilmelidir.(Şekil-32′deki hiyerarşik yapıya bakın)

Set_Descriptor ( 0x0B )

Açıklama: Bu istek cihaz’a belirli bir künye ekler veya herhangi mevcut bir künyeyi günceller. Direkt olarak cihaz yazılımını değiştirdiğinden birçok cihaz tarafından desteklenmez.

bmRequestType İçeriği: SETUP basamağının Veri paketinde bulunan bu alan bu istekde de Şekil-33′daki yapıda olacaktır.

bRequest İçeriği: SETUP basamağının Veri paketinde bulunan bu alan bmRequestType’ın 6.ve 5.bitleri 00 olduğundan USB’nin onbir standart isteklerinden birini içerir.Set_Descriptor için bu istek numarası 0x0B’dir.

wValue İçeriği: SETUP basamağının Veri paketinde bulunan bu alanın yüksek byte’ında tanımlayıcı tipi düşük byte’ında ise tanımlayıcı değeri bulunur.

wIndex İçeriği: SETUP basamağının Veri paketinde bulunan bu alan String Tanımlayıcısı hariç daima 0′dır.String Tanımlayıcısında ise daha önce anlatıldığı gibi istenen String’in index’ini içerir.

wLength İçeriği: SETUP basamağının Veri paketinde bulunan bu alan PC’nin güncellemek ya da eklemek istediği tanımlayıcının byte’larının uzunluğunu içerir.

Get_Configuration ( 0×08 )

Açıklama: Bu istek cihazdan daha önce set edilen konfigrasyon değerini almak için kullanılır.Bu değer aslında Konfigrasyon Tanımlayıcısının bConfigurationValue alanında saklanan değerdir. PC cihazı listelerken, eğer cihaz belirtilen şartları sağlıyorsa bu değeri set edecektir. (Set_Configuration’a bakın)

bmRequestType İçeriği: SETUP basamağının Veri paketinde bulunan bu alan bu istekde de Şekil-33′daki yapıda olacaktır.

bRequest İçeriği: SETUP basamağının Veri paketinde bulunan bu alan bmRequestType’ın 6.ve 5.bitleri 00 olduğundan USB’nin onbir standart isteklerinden birini içerir. Get_Configuration için bu istek numarası 0×08′dir.

wValue İçeriği: SETUP basamağının Veri paketinde bulunan bu alanın değeri bu istek için sıfır’dır.

wIndex İçeriği: SETUP basamağının Veri paketinde bulunan bu alanın değeri bu istek için sıfır’dır.

wLength İçeriği: SETUP basamağının Veri paketinde bulunan bu alan istenen konfigürasyon değerinin uzunluğunu içerir. Konfigrasyon Tanımlayıcısının bConfigurationValue alanı 1 byte olduğundan bu uzunluk değeride bu alanda 1 byte olacaktır.

Set_ Configuration( 0×09 )

Açıklama: Bu istekle PC, cihaz tarafından tanımlanan ve okunan bilgilerin uygun olduğunu kabul eder ve Konfigurasyon Tanımlayıcısında belirtilen Konfigurasyon değerini set eder.

bmRequestType İçeriği: SETUP basamağının Veri paketinde bulunan bu alan bu istekde de Şekil-33′daki yapıda olacaktır.

bRequest İçeriği: SETUP basamağının Veri paketinde bulunan bu alan bmRequestType’ın 6.ve 5.bitleri 00 olduğundan USB’nin onbir standart isteklerinden birini içerir. Set_Configuration için bu istek numarası 0×09′dur.

wValue İçeriği: SETUP basamağının Veri paketinde bulunan bu alanın düşük byte’ında cihaz tarafından belirlenmiş Konfigrasyon değeri bulunur.Cihaz bu istekdeki bu alanı okur ve önceden belirlediği bir alanda bu değeri saklar. Sakladığı bu değer daha sonra Get_Configuration ile okunabilir. Eğer cihaza daha önce bu istek gönderilmemişse cihaz içindeki bu alan değeride 0 olacaktır.Bu durumda cihaz ADDRESS durumundadır.

wIndex İçeriği: SETUP basamağının Veri paketinde bulunan bu alanın değeri bu istek için sıfır’dır.

wLength İçeriği: SETUP basamağının Veri paketinde bulunan bu alanın değeri bu istek için 0′dır.

Yazan: Ahmet ATAR

PIC18F4550 Uygulama kodları program ve kaynak dosyaları : pic18f4550-usb-bilgi.rar alternatif link2 PIC USB Firmware, USB Test uygulaması, USB Management DLL, USB Motor Kontrol, USB-AutoRun, usb-monitor, USBMonitorFree, usbverfy, USB-Debug, Kaybak

YAZININ DİĞER SAYFALARI: 1 2 3 4 5 6

Yazar: gevv

Yazarımızın 320volt.com Blog üzerinde şu an okuduğunuz yazı dahil 1955 yazısı bulunmaktadır. Yazarımız hakkında bilgileri ve diğer yazılarını görmek için bakınız;

Elektronik

 
  1. gevv says:

    Alternatif link: http://www.4shared.com/file/165573725/e082f0b6/pic18f4550-usb-bilgi.html

  2. mehmet says:

    ellerinize sağlık çok güzel açıklamışsınız. yanlız ben anlayamadım .bende bir devre var ve bu devre rs232 ile çalışıyor ve porttan aldığı bilgiyi max232 vasıtasıyla 18f452 kullanılan bir devre ile eproma yazıyor. şimdi ben nasıl bir değişiklik yapıp 4550 ile direk usb den çalıştırabilirim devreyi. yardımcı olursanız sevinirim. iyi günler

  3. tarık says:

    Helal olsun böyle bir paylaşımda emeği geçenlere…

  4. mesut says:

    Teşekkür ediyorum, usb mantığını anlamak için çok güzel bir çalışma

  5. ali says:

    emeği geçen herkese çok teşekkürler usb çalışmaları için gerçekten aydınlatıcı bir kaynak…

Yorum Sayfaları

Yorum yapın

Doğrulama: (kutuyu işaretleyiniz)

  • Lütfen Türkçe imla kurallarına dikkat etmeye özen gösteriniz.
  • Yorumunuz yönetici tarafından kontrol edilmeden yayımlanmaz.
  • Paylaşılan devrelerin malzeme listesini istemeyiniz. Olsa zaten paylaşılırdı şema üzerinden listeyi çıkartabilirsiniz
  • Gavatar sitesine avatarınızı yükleyebilirsiniz.