FT232 de USB ile veri transferi - protokol

Başlatan bunalmis, 05 Haziran 2010, 21:21:56

z

FT232 çipi ile işlemciniz arasındaki asenkron haberleşmede oluşabilecek veri bozulmalarını algılayan ve bunların PC den yeni baştan istenmesini sağlayan çok hızlı çalışan protokol öneriniz varmı?



Bana e^st de diyebilirsiniz.   www.cncdesigner.com

serdararikan


z

CRC bir hata kontrol teknigi ve protokolun sadece kucuk bir parcasi.

Sorum hatanin nasil algilanacagiyla iligili degil. Hatanin algilanmasi ardindan karsi tarafa bunun anlatilmasi
yeni gelen verinin alinmasi gerekiyorsa dogru alindiginin bildirilmesi ve tum bu islerin 1ms nin altina inemeyen
usb iletisimi ile yapmak.

Veriler buyuk paketler halinde olmayinca isler iyice zorlasiyor ve iletisim hizi dusuyor.

Soruyu bu cercevede ele almalisiniz.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

t2

#3
FT232de kullanılan  bulk transferin hata düzeltme özelliği de varmış.   
Alıntı YapBulk transfers are intended for applications where the rate of transfer isn't critical,
such as sending a file to a printer, receiving data from a scanner, or accessing
files on a drive. For these applications, quick transfers are nice, but the data can
wait if necessary. On a busy bus, bulk transfers have to wait, but on a bus that is
otherwise idle, bulk transfers are the fastest type.

z

Alıntı yapılan: bunalmis - 05 Haziran 2010, 21:21:56
FT232 çipi ile işlemciniz arasındaki asenkron haberleşmede oluşabilecek veri bozulmaları
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

t2

#5
Alıntı yapılan: bunalmis - 05 Haziran 2010, 21:21:56
FT232 çipi ile işlemciniz arasındaki asenkron haberleşmede oluşabilecek veri bozulmaları

Hata filan yok. hata sıfır. İşlemcinin ve çipin  baudrate'i  eşit ise hata sıfır gibi oluyor.  Her ikisininde formülü var. PCde iletişimi başlatmadan önce, belgesine uygun olarak bunu ayarlamalısınız.
  Set_USB_Device_BaudRate_Divisor(156);  //156  = 19230 baud


Sebep bu değilse, işlemci USB çipten gelen bilgilere yetişemiyor demektir.  Baud eşit de olsa bu bilgileri alıp başka işler yapması gerek. Yani işin yoğunluğuna göre belki de aynı anda okuma ve diğer işleri yapabilmeli gelen datayı hafızaya alıp bekletebilmeli.   Diyelim bilgi gelirken işlemci o sırada meşguldü. Gelen veriyi ZAMANINDA alıp depolayacak vakti olmadı. veriler PC tarafında yığıldı. Sırada çok paket var.  Ya da bir pakedi aldı ama eksik yorumladı.  Pakedin bir numarası olmalı. 126. pakedi tekrar istemek üzere yine usbden "paket126" veya  kendi belirleyeceğiniz bir dizi gönderilebilir.

Pakedin doğruluğu basitçe başında ve sonundaki karakterler ile sağlanabilir. Mesela  her paket
StartXXX.... YYYEnd şeklinde olabilir. Burada start, end, kelimeleri işlemci tarafından kontrol edilecek. XXX diyelim paket nosu YYY iise paketteki bayt sayısı olsun.  Bu paketin uzunluğu işlemcinin her defasında işleyebileceği kadar olmalı. PIC ile seri olarak gelen belirli bir stringi bekleme, ondan sonra gelen belirli uzunluktaki diziyi okumak ve değişkenlere aktarmak zor değildi. Daha da kısa yöntem işlemci tarafından sadece paket numarası gönderilir. Bunu gören PC o pakedi yeniden gönderir. Başka bir şey isteyecekse ona uygun daha uzun cümleler kurar

Asıl yöntem: Pic verileri almaya başlayınca  tümünü bekletmeden alır. Diyelim  10Mb Veri alındı ve hafızaya atıldı. İçinde ne olduğuna bakılmadı. Bu paket bloğu tamamlandığında işlemci sırayla tüm paketleri tarar hata var mı diye bakar. sadece hatalı olanı yeniden ister. onu da aldıktan sonra hafızadaki yerine  yazar. Tüm bilgiler geldiyse artık işine bakar. Mesela bu bir yazıcıysa yazma işine başlar. Hem bu sayede işlemcinin aynı anda veri alması ve diğer işler ileilgilenmesi gerekmez. Gerçekten de USB yazıcı böyle çalışıyor. amerikayı keşfetmeye gerek yok

Veri miktarı fazla ise yeterli bir buffer gerekli. ft232 sadece 64 baytt buffer'a sahip. Dolayısıyla bundan gelecek bilgileri cihaz üzerinde depolamamız ve daha sonra realtime olarak işlememiz gerekebilir. 64 bayt gelsin onu işleyeyim sonra yeniden gelsin yeniden işleyeyim şeklinde düşünürsek  yanlış olur.  Tabi bu projeye bağlı . led yakacaksanız sorun olmaz. CNC  yapıyorsanız sorun olur. 

z

Alıntı YapHata filan yok. hata sıfır. İşlemcinin ve çipin  baudrate'i  eşit ise hata sıfır gibi oluyor.  Her ikisininde formülü var. PCde iletişimi başlatmadan önce, belgesine uygun olarak bunu ayarlamalısınız.

Bu kadar iddiali konusma.

Asenkron seri iletisimde veriler ancak gurultusuz ortamlarda ve her iki tarafin baud rate degerleri esitse %100 hatasiz gidebilir.
Ancak buna ragmen ani bir parazit iletim hattina bindirilmis bitin konumunu bir anda tersine cevirebilir.

Bu nedenle asenkron iletisimde oyle yada boyle muhakkak bir protokol olustururum. Bu, sadece veri bozulmalarini degil ayni zamanda
gondericiden habire gelen verileri koyacak yerim kalmadiysa yeter artik kapa ceneni bana biraz musade et isim azalinca ben
sana tekrar yollaman icin haber veririm tarzinda muhabbetler icin de gerekli.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

t2

Tamam öyle olsun.
Alıntı Yaphata sıfır gibi oluyor.

z

PC tarafinda oyle olabilir fakat islemci tarafinda FT232 nin bufferindaki veriler islemciye dogru akmaya baslar.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com