Yüksek Boyutlu veriyi USB üzerinden aktarma

Başlatan Mucit23, 03 Nisan 2020, 21:06:23

Mucit23

Selamlar

Yüksek boyutlu Yaklaşık 8kb civarı bir veriyi USB üzerinden bilgisayara aktarmam gerekiyor. USB de Max Report Size 64 Byte olduğu için arada bir protokol oluşturmam gerekiyor. Bu amaçla verileri düzgün bir şekilde aktarımını problemsiz bir şekilde yapmak için nasıl bir algoritma kullanabilirim?

tunayk

Sabit paket boyutu aslında avantajdır. Dinleyici tarafta daha kolay kontrol sağlanır. Paketinizin başına bir header, sonunada checksum ekler sırayla basarsınız veriyi. Dinleyen taraf aldıkça uygun şekilde diziye yerleştirir. Gönderme alma esnasında da yazılımsal bir handshake  yaparsınız biter gider.

Checksum işi tercihe bağlı, CRC de olur , byte toplamı da. Önemli olan işlemci tarafında fazla zaman kaybettirmesin.

Mucit23

Veri Boyutum sabit Tam olarak 9600 Byte veriden oluşuyor. Muhtemelen Değişmeyecek. Bu değerler 4'er byte Floating sayılardan oluşuyor. Tabi ben byte byte göndereceğim.  Handshake işi biraz kafamı karıştırdı.  Muhtemelen Sorgu cevap şeklinde bir sistem olacak. Bilgisayar paket gönder diyecek, Donanım Sıradaki paketi gönderecek.

Tek seferde 64 Byte gönderebiliyorum.
1. ve 2. byte paketteki verinin genel dizideki start indexini göndersem
son iki byte ise CRC olsa geri kalan boş taki 60 byte'a da  sırayla verileri yükleyip gönderebilirim. Veri boyutu sabit olacağından dolayı 160 seferde bütün veriyi taşıyabilirim. Hız konusu ise muamma. Algoritmam ne kadar hızlı çalışır bilmiyorum Handshake işini oldukça efektif bir şekilde yapmam lazım.  Bunun için iyi bir algoritma yazmam lazım.

tunayk

Eğer işlemci tarafında 9600Byte veri bufferda durabiliyor ise çok kasmaya gerek yok. İşlemciyi slave pozisyonda  tutarsınız. Asıl sorumluluk pc tarafında olur. Belirli bir çevrim sıklığı ile verileri sırasıyla okur. Modbus  mantığı gibi. Şu indeksten itibaren n byte gönder der. Eğer gelen frame doğru ise veriyi alır, değilse tekrar ister.

brandice5

USB CDC ile daha büyük paket boyutu kullanabilirsiniz.