Notlar..

320volt / Elektronik Kaynakları/

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

Elektronik Kaynakları, blog arşivinde TÜRKÇE PIC18F4550 VE USB BILGISI PICC DILI UYGULAMALAR konusu "mplab c18 kullanımı* pic18f4550* Türkçe pic18f4550* Türkçe usb* usb kullanım kılavuzu* usb pic haberleşme* usb veri taransferi* " ile etiketlendi

Hazırlayan: Ahmet ATAR PIC18F4550 ve USB hakkında mükemmel bir çalışma adım adım usb 18f serisi hakkında Türkçe bilgi bulmak çok zor hele USB dahada zor detaylı anlatım bir çok kişinin hihtiyacını katşılayacaktır ayrıca örnek uygulamalar programlarda bulunmakta. Ne yazık ki çalışma yarım ilk 3 bölüm bulunmakta yinede temel USB bilgileri ve pic18f4550 hakkında ki tam bilgiler mplab ile C18 dili kullanımı çok faydalı olacaktır. Emeği geçen hazırlayan kişilere teşekkürler

Adım Adım USB ve Uygulamalar

USB Arrabirimiinii kulllanarak prrojje gelliştirrebiilmeniz iiçin gereklli herşey…….
Yazan: Ahmet ATAR

İÇİNDEKİLER

Bölüm 1

USB Tarihçesi
Avantajları ve Dezavantajları

Bölüm 2

USB Projesi Geliştirmek İçin Gerekli Elemanlar
USB Denetleyici Seçimi
PIC18F4550′nin USB Özellikleri
Derleyici Seçimi ve Programlama Dili
Programlayıcılar
Test Devresi ve Özellikleri
Windows Uygulaması İçin Programlama Dili
USB Projesi Geliştirirken Kullanılacak Test Programları
Device Monitoring Studio
USB Verify

Bölüm 3

USB Transferi’nin Detayları
Bus’taki Verinin Yönetimi
Transfer Elemanları
Uç Nokta Nedir?
USB Borusu Nedir?
Paket Tipleri ve İçerikleri
Transfer Türleri ve Özellikleri
Kontrol Transferler
Kesme Transferler
Yığın Transferler
İzokron Transferler
USB Cihazların Sisteme Tanıtılması
Listeleme İşlemi ve Adımları
Tanımlayıcılar ve İçerikleri
Aygıt Tanımlayıcısı
Konfigrasyon Tanımlayıcısı
Arabirim Tanımlayıcısı
Uçnokta Tanımlayıcısı
String Tanımlayıcısı
Kontrol Transferi’nin Detayları
İşlem Evreleri
İstekler

Giriş : Günümüzde birçok elektronik cihazın USB arabirimini içerdiğini görmekteyiz.Hiç yanımızdan ayırmadığımız MP3 çalarımız, bilgilerimizi cebimizde taşımamıza olanak sağlayan usb disklerimiz buna en güzel örnektir. Bu sebepten dolayı bizimde tasarladığımız elektronik ürünlerin eğer bilgisayar ile iletişim kurması gerekiyorsa arabirim olarak USB’yi desteklemesi kaçınılmaz olmaktadır.

Çünkü günümüzde seri, paralel gibi birçok standart yerini USB’ye bırakmış durumda.Eskiden paralel veya seri porttan çalışan yazıcılarımız bile bugün USB arabirimi ile tasarlanmaktadır. Bu yüzden bu makalenin hazırlanma amacı elektronikle gerek hobi amaçlı, gerekse profosyonel olarak ilgilenen kişilere “hazır yazılım ve donanım” kullanmadan direkt kendi USB arabirimli cihazlarını en basit yoldan tasarlamaları için hazırlanmıştır.

Birçok elektronik içerikli sitede USB arabirimli cihaz tasarlamak isteyen kişiler bu gereksinimlerini ya hazır bir HEX dosyası ve donanım bulup gidermekte ya da çaresiz diğer eskiyen protokolleri kullanmakla yetinmektedir. İşte bu makalenin hazırlanış amacı elektronikçileri “hazırcı zihniyet” anlayışına iten bu etkenleri ortadan kaldırmak ve Türkiye’de bu konuda neredeyse yok denecek kadar az bulunan Türkçe döküman eksikliğini gidermektir.

Makale toplam on bölümden oluşmaktadır.Birinci bölümde USB’nin gelişim tarihi ve avantajlarına çok kısa bir şekilde giriş yapılmıştır.İkinci bölümde ise tasarım esnasında kullanılacak devre ve programlar tanıtılmaktadır. Üçüncü bölümde USB Protokolünün detayları ve elemanları kafa karıştırmayacak şekilde incelenmektedir.

Tüm elektronikçilere faydalı olması dileği ile….
Ahmet ATAR

Bölüm 1 USB Tarihçesi

USB arabiriminin geliştirilmesi Hewlett Packard firması ile başlamıştır. Fakat o zamanlar HP Arabirim Bus’ı olarak anılmaktaydı. Bu arabirimin sadece HP’ye yani tek bir firmaya ait olması Lisans ücretleri ve buna benzer sebeplerden dolayı istenmeyen bir durum olduğundan USB standartlarını belirlemek üzere bir örgüt kurulmuştur.

Bu örgütte bulunan şirketler Intel,Microsoft,NEC, Philips HP ve Compaq’dır.Ocak 1996 tarihinde ilk olarak USB 1.0 sürümü devreye girmiş,hemen ardından Eylül 1998′ de ise USB 1.1 sürümleri hazırlanmıştır.

USB 1.1 ile gelen özelliklerden bir tanesi Kesme OUT transfer tipi’nin ve yüksek hız desteğinin eklenmesidir. (Bu transfer tipi ve diğerleri ilerki ünitelerde incelenecektir.) Aralık 2000′de ise mini-B tipi konnektör eklenmiştir. USB arabirimine destek veren ilk işletim sistemi 98 kadar kuvvetli olmada Windows 95′dir. Fakat bu arabirim 98 işletim sistemi ile yaygınlaşmıştır.

Tüm gelişmelerden sonra en büyük adım olan USB 2.0 geliştirildi.20 kat olması hedeflenen transfer hızı 40 kat olarak belirlenmiş ve transfer hızı saniyede 480MBit yani 60MB olmuştur.

Avantajları ve Dezavantajları

USB arabiriminin avantajları denildiğinde akla ilk gelen yüksek işlem hızı ve hata denetiminin son derece güvenli olmasıdır.Böylece tasarımcıları yazılım ve donanımlarında hata denetimi ile uğraşmaktan kurtarmaktadır. USB arabirimi sinyallere fonksiyonlar yüklemediğinden birkaç USB portuna takılı cihaz aynı hat üzerinden farklı işlevleri yerine getirebilir.Paralel porta takılı bir cihaz düşünün. Bu cihaz paralel portun bir veya birkaç bitini kendisi için tahsis edip özel bir amaçla kullanıyorsa bu diğer cihazlar için bir engel oluşturacaktır.

Bir diğer avantaj ise güç sarfiyatının düşük olmasıdır.Tasarımlar sayesinde kullanılmayan cihazların güçleri kesilir fakat gerektiğinde tekrar haberleşmeye hazırdırlar.

USB tasarımında kullanılacak devre elemanları pahalı değildir.Örneğin bu makaledeki projelerimizde kullanacağımız PIC18F4550 denetleyicisi Microchip firması tarafından üretilmiş, ek özellikleri ile birlikte USB modülünüde bünyesinde barındırmaktadır ve fiyatı yaklaşık 15YTL kadardır.Bu yonganın SPI,I/O,CCP,USART,ADC,TIMERS ve kesmeler gibi ek özellikleri sayesinde hem USB haberleşmesi halledilir hemde tasarımla ilgili ek işlemler tek bir yonga ile yapılabilir.

USB’nin dezavantajları denildiğinde ise akla ilk gelen eski donanımlarla uyumsuz olmasıdır. USB desteği olmayan bir sisteme USB cihazını bağlamanın tek yolu dönüştürü kullanmaktır. Fakat buda USB işlevselliğini gölgelemektedir. USB arabirimi masaüstü arabirimi olarak tasarlandığından mesafe sınırlamaları vardır.Kablo boyutu düşük hızlı cihazlar için 3 metre tam hızlı ve yüksek hızlı cihazlar için 5 metre olabilir.Fakat hub kullanılarak bu sınır azda
olsa aşılabilir.

Cihazlar kendi aralarında haberleşemezler.İki mikrodenetleyici yonga seri protokol kullanarak örneğin 9600baud hızında haberleşebilirken USB sistemlerde bu söz konusu değildir. Haberleşmeyi sadece PC yönetir, başlatır ve sonlandırır. USB’nin dezavantajları hakkında bir örnek daha verirsek buda protokolün çok karmaşık olmasıdır. Aynı zamanda USB cihazların satışlarında, cihazın üretici kimliğine sahip olması gerekir.

Bu USB-IF’den 1500$ karşılığında alınabilir.Yani yüksek çaplı projeler tasarlanmak isteniyorsa USB’nin çokda ucuz olduğu söylenemez. Tüm bu dezavantajların yanında USB arabirimin diğer avatajları göz önüne alındığında başka protokollerle çalışmak zaman kaybından başka birşey değildir.

Bölüm 2 USB Projesi Geliştirmek İçin Gerekli Elemanlar

USB Denetleyici Seçimi: Piyasada USB projelerinde kullanılmak üzere farklı firmalarca tasarlanmış birçok USB denetleyicisi mevcuttur. Bazıları bir mikrodenetleyiciye arabirim olarak bağlanabilirken, bazıları da direkt denetleyici içerisinde yer almaktadır.

Bir denetleyiciye arabirim olarak bağlanabilen USB arabirim yongaları maliyet, eleman fazlalığı ve giriş/çıkış uçlarının bazılarının kendilerine tahsis edilmeleri gibi unsurlardan dolayı çok fazla tercih edilmemelidir.Fakat bu yapılacak tasarıma ve USB arabirim yongasına göre değişmektedir. Örnek vermek gerekirse USBN9604 gibi bir USB arabirim yongası, bir denetleyiciye hem paralel hemde seri olarak bağlanabilir.

Aynı zamanda piyasa fiyatı kendi kategorisinde bulunan diğer yongalara göre daha ucuzdur.Fakat yinede bunun haricinde birde denetleyici yonga fiyatı olduğundan On-Chip USB yongalar daha ucuza gelmektedir. Bu sorunların yanında tasarım yapılacak USB yonganın kolay bulunabilmesi de belli başlı bir olaydır. Aynı zamanda kullanılacak yonganın iç mimarisine hakim olmak, internetten hazır kod ve kaynak bulmak da son derece önemli etkenlerdendir.

İşte bu sorunları göz önünde bulundurarak projelerimizde, tek chip üzerinde USB arabirim modülü ve diğer çevresel donanımları bulunan PIC18F4550 yongasını kullanacağız.Bu chip’e alternatif olarak giriş/çıkış sayısı daha az olan PIC18F2550′de kullanılabilir. PIC18F4550′nin USB Özellikleri PIC18F4550′nin dahili USB birimi bulunmaktadır ve temel özellikleri aşağıda listelenmiştir;

* USB 2.0 uyumludur.
* Low Speed(1.5Mb/s) ve Full Speed(12Mb/s) hızlarını desteklemektedir.
* Kontrol, Kesme, İzokron ve Yığın transferleri desteklemektedir.
* 32 Adet Uçnoktası vardır.(Çift yönlü 16 adet)
* 1KB USB Ram belleği(Dual Access)
* Dahili voltaj regülatörü
* Dahili Pull-Up dirençleri

PIC18F4550′nin USB işlemleri için ayırdığı toplam 22 adet register’ı mevcuttur.Bunların en önemli olanları ve projelerimizde sıkça kullanacaklarımız aşağıda incelenmiştir.Daha fazla bilgi ve diğer bitlerin özellikleri için chip’in datasheet’i incelenebilir.

Her USB destekli microdenetleyicide olduğu gibi PIC18F4550′ninde SIE motoru bulunur.(Serial interface Engine)SIE gönderilen paketlerin çözülmesinde ve ilgili register’ların set edilmesinde aynı zamanda gönderilecek verilerinde USB paket formatına dönüştürülmesinde büyük bir rol üstlenir. PIC18F4550′nin SIE motoru dahili tranceiver’dan faydalanabileceği gibi dış bir tranceiver’ada bağlanabilir.Dahili bir 3.3 volt regülatörü vardır ve 5 volt’luk uygulamalarda dahili tranceiver’a güç sağlar.Hem SIE’nin hemde CPU’nun USB RAM’ine direkt hafıza erişimi mevcuttur.

Şekil-1) USB Kontrol Yazmacı
ucon-usb-control-register

PPBRST bitinin set edilmesi tüm Ping-Pong Buffer işaretçilerinin düzenlenen tamponlara yerleştirilmesini sağlar.0 olarak bırakılırsa Ping-Pong buffer’lar görmezden gelinir. Ping-Pong buffer özelliği birçok denetleyicide bulunur.

Bu özellik bilgi setinin tampona yazılmasının hemen ardından ikinci setinde tampona yazılmasını sağlar.Böylece ilk veri gönderilirken ikinci veri seti’de gönderime hazır olur.Bu alım işleminde de aynıdır.

SE0 biti USB bus’ında Single Ended Zero durumu oluştuğunda set olur.Bu durum D+ ve D- hatlarının aynı anda yüksek olduğu özel bir durumdur.

PKTDIS biti SIE’nin paket aktarmasını ya da almasını aktif yapmak üzere kullanılan bir bayraktır.Bu bit bir SETUP paketi alınmasının ardından SIE tarafından set edilir ve paket aktarma/alma işlemi pasif yapılmış olunur.SIE’nin paket alma/aktarma işlemine tekrar izin vermek için bu bit CPU tarafından sadece temizlenebilir.

USBEN biti USB modülünü aktif/pasif yapar.Eğer cihaz bus’a bağlı ise ve bu bit set edilirse cihaz attached durumuna geçer, temizlenirse cihaz bus’dan çıkatılmış gibi olur. (Detached) Böylece cihaz’ın bus ile olan ilişkisi yazılımsal olarak kontrol edilebilir. Aynı zamanda bu bit set edildiğinde tüm PPBI yazmaçlarını 0′a kurar, USB regülatörünü dahili pull-up dirençlerini aktif yapar (Eğer ayarlandıysa)

RESUME biti PC’ye resume sinyali göndermek için kullanılır.Resume sinyali göndermek için bu bit yaklaşık 1 ile 13ms arası set edilmeli ardından temizlenmelidir.Askı durumundaki bir cihaz PC’ye haberleşmeyi canlandırması için Resume sinyali gönderebilir.

SUSPND biti USB modülün suspend duruma yani askıya geçmesini sağlar.Bu bit set edilerek SIE’nin clock kaynağı pasif yapılmış olunur.Bus’da 3ms işlem görmeyen bir cihaz suspend durumuna geçmelidir.Bu durum IDLEIF bayrağının set olmasıyla anlaşılabilir.Bu durumda SUSPND biti set edilerek suspend moduna geçilmelidir.Bus’da takrardan faliyet başlaması durumunda ACTVIF biti set olur.Bu durumda SUSPND biti temizlenmeli ve SIE’nin clock kaynağı aktif edilmelidir.

Şekil-2) USB Konfigrasyon Yazmacı
ucfg-usb-configuration-register

UTEYE biti düşük hızlı cihazlarda J-K-J-K, tam hızlı cihazlarda ise K-J-K-J sinyelleri test’i için kullanılır.Daha fazla bilgi için datasheet’e bakın.

UPUEN biti dahili pull-up’ları aktif etmek için kullanılır.Eğer FSEN biti set edilmişse D+ pini, edilmemişse Dpini yükseğe çekilir.Böylece dahili pull-up’lar sayesinde dışarıdan full-speed veya low-speed için D+ ve Dpinlerini direnç ile yükseğe çekmeye gerek kalmaz. Bu bit set edildiğinde D+ ve D- pinlerinden herhangi biri dahili regülatör sayesinde direkt 3.3V’a çekilir.

FSEN biti tam hız ya da düşük hız seçimde kullanılır.PIC18f4550 sadece bu hızları desteklemektedir. Bu bit set edilirse harici saat girişi 48MHz, set edilmezse 6MHz olmalıdır.

PPB0-PPB1 bitleri Ping-Pong Buffer konfigrasyonu için kullanılır.Bu bitlere daha sonra değineceğiz.

Şekil-3) USB Status Yazmacı
ustat-usb-status-register

ENDP0-ENDP3 arası bitler isteklerin ya da verilerin hangi uçnoktaya geldiğini gösterir. PIC18f4550′nin toplam 16 adet uçnoktası olduğundan bu dört bit ile uçnokta adresi belirlenmiş olur.

DIR biti transferin yönünü belirtir.Bu bit set ise transfer cihazdan PC’ye doğru(IN transfer) aksi halde PC’den cihaza doğrudur.(SETUP veya OUT transfer)

PPBI biti son işlemden sonra Ping-Pong Buffer işaretçisi’nin Odd/Even durumunu gösterir.

USTAT transfer hakkında bilgiler içerdiğinden önemlidir.Bir işlem tamamlanıp TRNIF biti set edildikten sonra USTAT SIE tarafından otomatik olarak güncellenir.USTAT SIE tarafından korunan 4 byte’lık bir FIFO’ya sahiptir.Bu FIFO dolu iken yeni bir istek gelmesi halinde SIE otomatik olarak NAK ile yanıt verecektir.Bir işlem tamamlandıktan sonra USTAT SIE tarafından otomatik olarak update edilir.

Şekil-4) USB Uçnokta n Yazmacı
uepn-usb-endpoint-n-control-register-uep0-through-uep15

EPHSHK biti set edilirse uçnokta elsıkışma’sı aktif hale gelir.Bu bit set edilmediği takdirde elsıkışma olmaz.Bu daha çok izokron transferlerde kullanılır.Çünkü izokron transferlerde verinin koşulsuz alındığı kabul edilir ve veri akışı süreklidir.Fakat diğer transfer tiplerinde bu bit set edilerek elsıkışma aktif edilmedir.

EPCONDIS biti uçnokta’nın SETUP,IN veya OUT için kullanılmasını kontrol eder.Eğer EPOUTEN ve EPINEN bitleri set edilmişse, bu bitin set edilmesi halinde uçnokta sadece IN ve OUT işlemleri için kullanılır.Eğer set edilmezse SETUP işlemleri için, yani kontrol transferler için kullanılır. Fakat IN ve OUT işlemlerine de izin verilir.

EPOUTEN biti set edilmişse uçnokta OUT olarak kullanılabilir.

EPINEN biti set edilmişse uçnokta IN olarak kullanılabilir.

EPSTALL biti STALL kesmesi oluştuğunda(UIR.STALL) set olur.Hangi uçnokta STALL ile yanıt verdiyse bu bit sayesinde öğrenilir.Yazılımsal olarak temizlenmelidir. Bu kontrol register’larının yanında UADDR register’ı listeleme sırasında cihaz’a Set_Address isteği ile gönderilen adresi saklamak için kullanılır. URFM register’ı URFMH ve URFML yazmaçlarında 11 bitlik çerçeve numarasını saklar.

USB RAM Yerleşimi

PIC18F4550 2KB’lık RAM alanına sahiptir.RAM alanı toplam 15 banktan oluşur.Bank 4 ve 7 arası alan, SIE ve mikrokontrolör çekirdeği tarafından paylaşımlı olarak kullanılır.Bu alan 0×400 ve 0x7FF arası olmak üzere toplam 1Kb’dır. Bu büyüklükte bir alan USB’nin tüm işlemleri için yeterli büyüklüktedir. İzokron hariç diğer transferler full-speed modda maximum 64KB bloklar halinde bigi alıp gönderebilirler.

İzokron transferlerde ise bu sınır 1024′dür. 0×400 ve 0x7FF arası USB Ram alanının, 0×400 ve 0x4FF arası olmak üzere toplam 256 byte’lık alanı Buffer Descriptor için kullanılır.Bu alan diğer işlemler içinde kullanılabilir.Şimdi Buffer Descriptor yapısını ve ne işe yaradığını inceleyelim.

Buffer Descriptor ve Buffer Descriptor Tablosu

Aşağıda Buffer Descriptor’ın PIC18F4550′nin datasheet’inden alınmış şekli verilmiştir. Şekil-5) Tampon Künyesi

buffer-descriptor-buffer-descriptor-tablosu

Yukarıdaki şekilde görüldüğü gibi Buffer Descriptor yani tampon künyesi dört byte’lık bir alandan oluşmaktadır. Tampon künyesi asıl kullanılacak olan bellek alanı hakkında SIE’ye bilgiler sağladığı gibi yonga kodu’na da bilgi sağlar.

BDnSTAT alanı ilerki bölümlerde detaylı bir şekilde incelenmiştir. BDnCNT alanı gönderim işlemi yapılırken kaç byte bilgi gideceğini gösterirken, alım esnasında ise kaç byte bilgi okunduğunu gösterir. BDnADRL ve BDnADRH alanları ise bilgilerin tutulacağı tampon bölgesinin başlangıcına işaret etmektedir.

Buffer Descriptor alanı 16 adet uçnokta tarafından kullanılır. Yani her uçnokta’nın bir buffer descriptor’ı ve tamponu vardır. BDnCNT alanı uçnoktanın maximum paket büyüklüğüne göre yapılandırılır. Şekildeki örnekte BDnCNT alanına 0×40 yüklenerek uçnokta n tampon büyüklüğü,  yani maximum paket büyüklüğü 64 olarak belirlenmiştir.

SIE veri alımı yaparken bu alandan daha büyük bir veri paketi alamaz.Çünkü uçnokta n maximum paket büyüklüğü 64 byte’dır.Bu işlem veri gönderimi içinde geçerlidir.İzokron transferlerde tek bir uçnokta kullanılmak şartı ile BDnCNT alanı 1024′e kadar çıkabilir. Böylece USB için ayrılan tüm bellek alanı bu uçnoktaya ayrılmış olur.

Fakat BDnCNT 1 byte olduğundan 1Kb alan tanımlaması için geriye kalan üst iki bit BDnSTAT alanının alt iki biti olan BC8 ve BC9 bitlerine yazılır. Bu anlatılanları uçnoktaları, tanımlayıcıları ve PIC firmware’ini incelerken daha iyi anlayacaksınız. BDnSTAT alanı CPU Mode ve SIE Mod olmak üzere iki şekilde kullanılır. Aşağıda BDnSTAT alanının her iki şekilde de açıklamaları bulunmaktadır.

Şekil-6) Tampon Künyesi n Status Yazmacı (CPU Mod)
bdnstat-cpu-mod

UOWN bit USB Buffer alanının CPU veya SIE tarafından kullanılmasını tayin etmek üzere basit bir semaphore mantığı ile çalışır.USB bellek bölgesi CPU çekirdeği ve SIE tarafından paylaşımlı olarak kullanıldığından bellek alanına aynı anda hem CPU hemde SIE erişemez.Bu bit’in 0 olması halinde Buffer sahibi (Buffer OwnerShip) CPU’ya aittir ve her türlü kontrol fonksiyonları kullanılabilir.Bu bit’in set olması halinde ise buffer alanı SIE tarafından kullanılır ve hiçbir şekilde CPU tarafından erişilemez.

Böylece paylaşımlı bellek alanı güvenli bir şekilde kullanılır.UOWN biti set edilmiş, yani bellek SIE tarafından kullanılıyorken transfer işlemi tamamlandığında UOWN otomatik olarak temizlenir ve buffer sahipliği CPU’ya bırakılır. Tek istisna KEN bitinin set olmasında gerçekleşir. Bu durumda tampon şartsız olarak SIE tarafından kullanılır ve bırakılmaz.

DST biti veri senkronizasyonu için kullanılır.Bu bitin set olması Data1, 0 olması ise Data0 paketini gösterir. Aşağıdaki tabloda veri senkronizasyonu’nun nasıl sağlandığı gösterilmiştir.

Şekil-7) Data Senkronizasyonu
dst-data-senkronizasyonu

DTS değer değişim biti olarak kullanılır.DTS bitinin kullanılabilmesi için DTSEN bitinin set edilmiş olması gerekir.Değer değişim biti sayesinde veri kaybı olup olmadığı anlaşılır. IN ve OUT işlemleri için değer değişim bitleri PID( Paket ID ) alanında taşınır. DATA0 0011, DATA1 ise 1011′dir.Yani tek değişen 3.bittir. Değer değişim biti hem alıcı hemde verici tarafından takip edilir ve başlangıçta her iki taraftada DATA0 olarak kurulur. Veriyi alan alıcı taraf vericinin göndermiş olduğu değer değişim bitini kendisinin ki ile karşılaştırır.

Eğer aynı ise kendi değer değişim bitinin durumunu değiştirir ve ACK yollar. ACK ile karşılaşan verici ise kendi değer değişim bitini de değiştirir. Böylece değer değişim bitleri her iki tarafda da aynı olmuş olur.Yani bir sonraki süreç DATA1 olacaktır. İzokron transferlerde değer değişim biti daima DATA0′dır. Çünkü haberleşme anında ACK gönderilmediği için verinin şartsız olarak alındığı kabul edilir.

Yukarıdaki şekilde DTS bitinin senkronlandığında ve yanlış paket alımı halinde UOWN ve TRNIF bitlerinin durumu verilmiştir. Yanlış veri alımı halinde veri senkronizasyonu gerçekleşmez. Bu durumda bellek bölgesi bırakılmaz ve SIE’de kalır. (Yeniden veri gelebilir diye UOWN set olarak kalır) Aynı zamanda ACK gönderilse bile bu TRNIF bitinin durumunu değiştirmez.Dolasıyla donanım kesmesi oluşmaz ve yonga kodunun verinin geldiğinden haberi olmaz.Alıcı kısım bir hata halinde ya da meşgul ise NAK yollar.

Bu durumda UOWN ve TRNIF bitleri değişmeden kalır. Alıcı taraf ACK yollar fakat verici bunu alamazsa veri, aynı değer değişim bilgisi ile tekrar gönderilir. Fakat bu kez değer değişim biti alıcı tarafından değiştirilmez.Değer değişim biti değişmediğinden, ve yeni gelen değer değişim biti eskisi ile aynı olduğundan her iki tarafta tekrar senkronlanır.

KEN biti bellek bölgesinin, veri alım işlemi bittikten sonra dahi SIE’de kalması için kullanılır.

INCDIS biti SIE’nin bellek bölgesine her yazımı sonrası bellek adresini otomatik olarak arttırması için kullanılır.Bu bit set edilirse adres otomatik olarak artar aksi halde artmaz.(Uçnokta SSP için)

DTSEN biti veri senkronizasyonunun olup olmayacağını belirler.Bu bit set edilirse veri senkronizasyonu var aksi halde yoktur.İzokron transferlerde bu bit temizlenebilir.

BSTALL biti genellikle kontrol transferlerde kullanılır ve desteklenmeyen istek, kontrol isteği başarısız veya uçnokta başarısız gibi işlemlerde uçnoktanın STALL ile yanıt verebileceğini belirler. Bu şekilde kullanıma USB Spesifikasyon Protokol Stall adını vermiştir.Aynı zamanda uçnoktanın HALT özelliği bir Set_Feature isteği ile set edilmişse uçnokta veri alışverişi yapamaz duruma gelir ve her isteği STALL ile yanıtlamalıdır.Bu şekilde kullanılmasına Spesifikasyon Fonksiyonel Stall adını vermiştir.Yani BSTALL biti set edilirse istekler STALL ile karşılanır.

BC8-BC9 bitleri veri adedi BDnCNT alanını aşması halinde, üst bitlerin bu bitlere yazılması için kullanılır.Böylece BDnCNT maximum 1024 olabilir.

Şekil-8) Tampon Künyesi n Status Yazmacı (SIE Mod)
bdnstat-sie-mod

UOWN bit bu modda set olmalıdır.Bu bit hakkında bilgi CPU mod anlatılırken verilmiştir.

PID0-PID bitleri paket alımı sonrası Packet ID’leri gösterir.Bu bitler kontrol edilerek paket’in IN, OUT veya SETUP olduğu tespit edilebilir.

PING-PONG Buffer Özelliği

Bu özellik UCFG register’ının PPB0:PPB1 bitleri ile yapılandırılarak kullanılır.Bir uçnokta için ping-pong buffer tanımlanmışsa iki Buffer Descriptor girişi set edilir.Bunlar Even transfer ve Odd transfer’dir.Bu sayede CPU işlemleri için bir Buffer Descriptor verilecek, SIE işlemleri için ise diğer Buffer Descirptor verilecektir. Bir uçnokta için tanımlanacak toplam dört adet Ping-Pong modu vardır;

• Ping-Pong desteklenmiyor
• Ping-Pong Buffering sadece Uçnokta 0 için destekleniyor
• Ping-Pong Buffering tüm uçnoktalar için destekleniyor
• Ping-Pong Buffering Uçnokta 0 hariç tüm uçnoktalar tarafından destekleniyor.

USB Modül, herbir uçnokta için Ping-Pong işaretçilerini izleme konumunda tutar.Bir işlemin tamamlanmasından sonra(UOWN biti SIE tarafından temizlenip, TRNIF biti set olduktan sonra) PPB işaretçisi toggle yaparak Odd BD’ye setlenir.Hemen ardından tamamlanan bir sonraki işlem’den sonra da tekrar toggle yaparak Even BD’ye döner.Ping-Pong Buffer işaretçi’nin Odd/Even BD durumu USTAT register’ının PPBI biti sayesinde takip edilir. Buffer Descriptor Table için tamponlama modları yerleşimi, PIC18F4550′nin 177. sayfasında verilmiştir.

USB Kesmeleri

Şekil-9) USB Kesme Yazmacı
usb-kesmeleri-usb-interrupt-status-register-uir

SOFIF biti SIE tarafından Start-Of-Frame jetonu alındığında set olur. Start-Of-Frame yani çerçeve başlangıcı jetonu ileriki bölümlerde incelenecektir. Bu bit yazılımsal olarak temizlenmelidir.

STALL biti SIE tarafından STALL gönderildiğinde set olur.Bu durumun gerçekleşmesi için ilgili uçnoktanın, tampon künyesi alanındaki BSTALL özelliğinin set olması gerekir.Bu bit yazılımsal olarak temizlenmelidir.

IDLEIF biti, cihaz bus’da 3ms boyunca faliyet görmediğinde set olur.Bu bit yazılımsal olarak temizlenmelidir.

TRNIF biti beklenen transfer tamamlandığında set olur.Yazılımsal olarak temizlenmelidir.

ACTVIF biti bus’da yeniden faliyet başladığında set olur.IDLEIF’in set olmasının ardından suspend duruma geçen bir cihaz bu bitin set olması durumunda suspend durumundan çıkar.

UERRIF biti UEIE bitlerinden biri daha önce kuruldu ise ve bir hata oluştu ise set olur.Yazılımsal olarak sadece temizlenebilir.

URSTIF biti bus’da reset durumu algılandığında set olur. Yazılımsal olarak temizlenmelidir. UIE register’ı UIR register’ındaki kesmelerin oluşması için maskeleme bitlerini içerir. Bu yüzden ayrıca bit açıklamaları yapılmayacaktır. Ayrıntılı bilgi için datasheet’e bakın. Aynı zamanda diğer hata kesmeleri gibi register’lar tasarım esnasında fazla kullanılmayacağından burada açıklanmamıştır.

USB Osilatör Konfigrasyonu Ayarları

PIC18F4550′nin USB işlemleri ve diğer işlemler için gelişmiş osilatör seçenekleri vardır.En göze çarpan özelliği ise full-speed USB transferini desteklediği için 48MHz saat freakansı ile çalışabilmesidir. Aşağıda datasheet’den alınmış osilatör konfigrasyon tablosu yer almaktadır.

tablo-usb-osilator-konfigrasyonu-ayarlari

Şekil-11) Osilatör Konfigrasyon Ayarları (Devam)
tablo2-usb-osilator-konfigrasyonu-ayarlari

Biz uygulamalarımızı full-speed mod’da tasarlayacağımızdan 48MHz’e ihtiyacımız olacaktır. Bunu doğrudan OSC girişlerine uygulayabileceğimiz gibi 20MHz veya tabloda gösterilen diğer osilatör frekanslarını uygulayarak da kullanabiliriz. Fakat bunun için gerekli konfigrasyon ayarlarını bu duruma göre ayarlamalıyız. PIC18F4550′nin dahili 96MHz PLL’i bulunmaktadır.

Bu PLL içeride 2′ye bölünerek full-speed işlemler için (FSEN biti “1”) 48MHz’lik saat kaynağı elde edilir. Fakat 96MHz’lik PLL giriş olarak daima 4MHz saat işaretine ihtiyaç duymaktadır. Bu durumda dışarıdan direkt 4MHz uygulayabileceğimiz gibi PLLDIV’de yapacağımız değişiklikle farklı osilatör kaynaklarınıda kullanabiliriz.

Diyelim ki full-speed modda USB tasarımı yapıyoruz ve 20MHz saat kaynağı kullanıyoruz.Bu durumda 96MHz’e 4MHz giriş elde etmek için PLL Prescaler’a “100” binary bilgisinin yüklenmesi gerekir. Bu durumda dışarıdan uygulanan saat sinyali 5′e bölünür ve 96MHz PLL için 4MHz’lik saat kaynağı sağlanmış olur. Peki USB işlemleri için 48Mhz kullanılırken CPU frekansı kaç Mhz olacaktır? CPU saat kaynağı, 96MHz PLL çıkışından 48MHz’e dönüşmeden, yani ikiye bölünmeden alındığı için dahili CPU freakansı prescaler’ına 96MHz olarak gelecektir.

Fakat bu freakans CPU’ya gitmeden CPUDIV PLL prescaler’a geldiği için CPUDIV “00” iken, bu saat işareti ikiye bölünerek CPU çekirdeğine gider.Yani USB 48Mhz kullanırken CPU saat kaynağıda 48Mhz olur. Fakat bu CPUDIV’e yüklenecek değerler ile değiştirilebilir.

Örnek olarak 10 Mhz CPU frekansı kullanmak istiyorsak

FOSC3:FOSC0 HS, CPUDIV1:CPUDIV0 “01” yani /2 olarak ayarlanmalıdır.Bu durumda dahili CPU saati 10Mhz olur.FOSC3:FOSC0 HS-PLL olarak ayarlanırsa, aynı ayarlar geçerli olmak üzere CPU frekansı 48Mhz olacaktır.Bu anlatılanlar yukarıdaki tablolarda gösterilmiştir.

  • Mesut

    Bunca zamandır hergun 320volt (eski isimlerini saymıyorum) ziyaret etmeden sörfe baslama microkonroller ile seri iletisimi bitirdik bir çok protokolle calistik ama cesaret edipte usb isine girmedim yaklasık bir haftadır bu is uzerine yogunlastım ama ne yazikki türkçe kaynak bulmak zor (malum yas geçiyor turkcesini anlayamazken ingilizcesi olum ) ama gercekten bu calısmayı yapan ve burada yayınlayan adminime teskkurler ellerin dert görmesin bu arada adminim burda hersey varmı ? :) (usb konusunda baskaca bilgiler varsa memnuniyetle alırım ) :)

  • Mesut

    Tekrar merhaba sevinerek icerigi aldım okudum ancak kitap yarım butun arastırmalara ragmen kitabın icindekiler bolumunde yazanları tam olarak bulamadım 4. bölümden itibaren son verilmis Ahmet atar a ait bir blog adresi buldum ancak oda kapanmıs bu konuda yardımcı olabilirmisiniz eski blog adresi http://www.usbdevgroup.blogspot.com

  • erdal

    Arkadaşlar , Ahmet Atara ulaşan varmı? kitabın yarısı var yarısı yok,kaynağın devamı lazım…acillll

  • kemal

    arkadaşlar kitabın geriye kalan kısmını nereden teğmin edecez

  • Abuzit Kelimov

    Bu vatandaş baktı USB ile ilgili herkes farklı bir şey soruyor, “en iyisi ben bu çalışmayı kitap yapayım, para kazanayım” dedi. Ama düşünmediği bir şey var; “SINIRLI BİLGİ İLE KİTAP YAZILMAZ” Kitap yazmak için ENGİN BİLGİ birikimi gerekir…

    • http://320volt.com gevv

      Ne olduğunu bende bilmiyorum sizin gibi az çok tahminlerim var ama bu kadar bilginin emeğin karşılıksız paylaşılması teşekkürü taktiri hak eder

      Yazarı tanımıyorum fakat kendisi büyük bir iş çıkartmış sağolsun bir çok kişiye yardımcı olduğuna eminim.

  • Davut Naci Kaya

    16.06.2009 tarihinde bu konuyla ilgili, Adil Fatih KİREMİTCİ tarafından hazırlanan bir yüksek lisans tezi hakkında yazı yazmıştım. USB ve
    pic18f4550 hakkında ayrıntılı Türkçe bilgilere ve daha fazlasına aşağıdaki linkten ulaşabilirsiniz. Umarım faydalı olur.

    http://elektroinfo.blogspot.com/2009/06/pic18f4550-mikrodenetleyicisi-ile-usb.html

  • Tolga Karahan

    İyi günler Ahmet hocam. Ben C# kullanarak Usb HID bir proje geliştirmekteyim. Cihaz yapısı bir modem ve pic18f4550 den oluşuyor. Amacım sms göndermek ve arama yapmak.

    Sorunum şu ben sizin vermiş olduğunuz uygulamalardan yola çıkarak kodlar yazdım ve şuanda cihaza veri gönderebiliyorum.

    Dahası cihazda bana veri gönderiyor Usb Monitor programından görüyorum.

    Ancak benim C# sizin vermiş olduğunuz kütüphane ile yazdığım program gelen veriyi görmüyor.

    Sanırım ben kullanamadım.

    Bana bu konuda yardımcı olur musunuz? Nasıl okuyabilirim gelen veriyi?

    Yapmış olduğunuz paylaşımlar için çok teşekkür ederim..

  • Abuzit Kelimov

    Arkadaşlar yukarıdaki bilgiler 18F4550 nin kataloğunda fazlasıyla var. Bahsedilen büyük iş datasheet in sınırlı bir kısmının Türkçe yazımından başka bir şey değil ve anlatılan registerlerde Türkçe’ye çevrilmemiş kısımlarda var. Ayrıca Sayın Davut Naci Kayan’ın verdiği link bilimsel bir çalışma sonucu paylaşılmış.

    Kitap yazmak öyle kolay iş değildir. Türkçe’ye çevirmek ise işin kolay kısmıdır. Çeviri yapacağınız dilde kendinize güveniyorsanız alırsınız bir kitabı, yazarı ile satıştan pay, toplu ödeme gibi belli bir telif hakkı anlaşması yaparsınız, yayınevi ve dağıtım şirketi ilede belli anlaşmalar yaparsınız ve kitabı Türkçe’ye çevirirsiniz. Bu durumda sorumluluğunuz sadece çeviri ile alakalıdır. Kitap satar veya satmaz ayrı konudur ve genellikle konulan sermayenin riski çeviriyi yapana/yazara aittir.

    Ama bir kitabı kendiniz yazmak isterseniz ilk olarak tüm detaylar için izin almak ve kaynak göstermek zorundasınız. Yukarıdaki örnekte Ahmet ATAR bey Microchip firmasından bu yayın için izin almadıysa ve Microchip kendisini Türkiye’de dava ederse 2-5 yıl arası hapis cezası ile cezalandırılır. Bu dava Amerika’da açılırsa çok daha ağır cezalar verilebilir. Çünkü üretici aksini bildirmedikçe her datasheet telif hakkı yasaları ile korunur. Yayının sanal ortamda yapılması ile kitap olarak yayınlanmasıda ayrı ayrı ceza konularıdır. Ayrıca maddi cezalarda sözkonusudur. Datasheet kullanımları ile ilgili detaylar üreticilerin sitelerinde açıkca yazılıdır.

    USB ile ilgili birincil kaynak http://www.usb.org adresidir. İkinci kaynak ise kullanılan donanımın kataloğudur. Üçüncüsü/dördüncüsü ve önemli noktalardan ikisi ise uygulayıcı kişinin ingilizce ve matematik bilgisidir. Çünkü elektronikte uluslararası dil ingilizcedir ve elektroniğin temeli matematik formülleridir. Günümüz elektroniğinde MCU tabanlı sistemler nedeniyle beşinci önemli unsuru ise programcılıktır.

    Kişinin ingilizce, matematik ve programcılık bilgi seviyesi ile uygulama geliştirme/problem çözme süresi ters orantılıdır. Bu üç unsura iyi derecede hakim kişiler hiç elektronikten anlamasalar bile ve ilk iki maddede bahsettiğim bilgiler ellerinde ise kaşarlanmış bir TV tamircisine göre çok ve çok daha avantajlıdırlar çünkü geriye lehim yapmak kalmaktadır ve bunu iyi veya kötü 5 yaşındaki bir çocuk bile yapabilmektedir.

    Tabi önem sırasına göre bilgi edinmeden başlayan ve lehim yapma ile son bulan aşamaların arasında analog/digital tasarımlar, filtre uygulamaları, profesyonel PCB tasarımı vb. konularda çok fazla aşama olduğuda gözardı edilmemelidir.

  • Bülent Bilgin

    Paylaşımı özgürce ve kaliteli şekilde yapan tüm 320volt.com ailesine çok teşekkür ederim

  • E A

    Çok teşekkür ederim. emeğinize sağlık… =)

  • Seçkin ALAN

    Merhaba hocam,
    acaba dosyaları rapidden başka bi yere upload edebilirmisiniz?

    • http://320volt.com gevv

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

  • Seçkin ALAN

    Teşekkürler..!

  • mehmet

    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

  • tarık

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

  • mesut

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

  • ali

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

  • Mehmet

    Paylaşım ve katkılarınız için çok teşekkürler. Daha öğrenecekçok şeyimiz var.

  • Ercan NAZLI

    Hocam emeğine sağlık

  • Muhammed Menap

    Öncelikle merhabalar can dostlarım size

    basit değil benim için ama size göre oyuncak olan bir sorum var pic18f4550 ile usb bağlantısıyla role açma kapama yapabiliyorum ancak;
    Bunu bir rf alıcı verici ile yapmak için nasıl bir yöntem izlemeli bunun hakkında ufacık bir bilgi paylaşırsanız sevinirim şimdiden teşekkür ederim…

    • http://320volt.com gevv

      http://320volt.com/pic18f4550-ile-usb-haberlesme-kullanimi/

      bu proje size feyz verebilir pic18f4550 çıkışlarını, çalışma sistemini rf modüle göre düzenlemek gerekli

  • Oguzhan

    benim bir iki sorum olucaktı öncelikle “Bu anlatılanlar doğrultusunda seçilebilecek tek dil C dilidir. Bizde projelerimizi geliştirirken C dilini kullanacağız. Microchip firması’nın 18xxx serisi denetleyicileri için geliştirdiği komut seti C için optimize edilmiştir ve sadece 18xxx serisi işlemciler ile kullanılacak C18 derleyicisi bulunmaktadır. C18 derleyicisini kurmak için StepByStepUSBToolsPIC AraçlarC18 dizini altından C18Compiler üzerine çift tıklayın ve kurulumu başlatın.” burada yazamlardan bir sey anlamadım kendim c18 kütüphanesi indirdim ardından örnek program icin bu kısımı yapmak kaldı “Linker dosyası parçalara ayrılmış dosyalardaki fonksiyonların adreslerinin ve değişken adreslerinin bilinmesi ve diğer dosyalar tarafından kullanılabilmesi için gereklidir. Bu dosyayı eklemek için Linker Scripts simgesine sağ tıklayın ve çıkan pencereden C:mcc18lkr dizinine gidin. Buradaki linker dosylarından 18f4550_i.lkr adlı dosyayı bulun ve ekleyin. Artık proje derlenmeye hazır durumda. Şimdi Project menüsünden Build All seçeneğini seçin.Proje, eğer eksik birşey yapılmadıysa hatasız derlenecektir.”Fakat bu kısımdaki 18f4550_i.lkr diye bir dosya bir turlu bulamadım.Önce emekleriniz için teşekkürler ve en kısa surede bana dönmenizi bekliyorum.