Monday, January 4, 2016

Using lwIP library @100Mbit speed(EthernetLite)

LightWeight açık kaynak bir TCP/IP kütüphanesidir.
Microblaze,PowerPC ve Zynq içindeki ARM işlemcilerde çalışabilmektedir.
echo server
web server
tftp (udp based) : not guarantee reliable delivery of packets :(
memory file system(mfs) => web,tftp
2 çalışma modu vardır.
1) Socket : Simple,xilkernel=>MB veya FreeRTOS=>Zynq,slow(overhead)
2) RAW:  more complex,callback style,asynchronously,single-thread,higher throughput
TCP/IP checksum offload
ping-pong buffers


-------------
Aşağıda uygulamanın çalışabilmesi gerekli hardware görülmektedir. Block Design'da
1) EthernetLite core
2) Axi Timer
3) Ethernet ve Timer core interrupt'ları
4) 64Kb cache olması gerekir.
SDK da lwIP echo server uygulamasını export ettiğimiz hw üzerinde oluşturuyoruz. IP address , MAC address ve açılan port number sağ tarafta görülmektedir.
echo.c daki recv callback fonksiyonun da gelen veri olduğu gibi echo'lanıyor. 

Putty üzerinden telnet bağlantısıyla deneme yapabiliriz :)


Şimdi uygulamayı echo şeklinde çalıştırmak yerine kendi ürettiğimiz array data'sını ethernet üzerinden gönderelim.

Ben VS 2005 :) kullanarak bir arayüz hazırladım. Butonu basınca bir karakter gönderiyor.Ve gelen stream textbox a yazılıyor. :)

C# kodları

 using System;  
 using System.Collections.Generic;  
 using System.ComponentModel;  
 using System.Data;  
 using System.Drawing;  
 using System.Text;  
 using System.Windows.Forms;  
 using System.Net.Sockets;  
 namespace lwip_simple  
 {  
   public partial class Form1 : Form  
   {  
     System.Net.Sockets.TcpClient clientsocket = new System.Net.Sockets.TcpClient();  
     byte[] instream = new byte[8192];  
     Int16[] instream_int = new Int16[8192];  
     double[] instream_do = new double[8192];  
     public Form1()  
     {  
       InitializeComponent();  
     }  
     private void Form1_Load(object sender, EventArgs e)  
     {  
       clientsocket.Connect("192.168.1.10", 7);  
     }  
     private void button1_Click(object sender, EventArgs e)  
     {  
       NetworkStream serverstream = clientsocket.GetStream();  
       byte[] outstream = System.Text.Encoding.ASCII.GetBytes("a");  
       serverstream.Write(outstream, 0, outstream.Length);  
       serverstream.Flush();  
       int k = serverstream.Read(instream, 0, (Int16)clientsocket.ReceiveBufferSize);  
       for (int i = 0, y = 0; (y < 50); i = i + 2, y = y + 1)  
       {  
         instream_int[y] = (Int16)(instream[i] + ((256) * instream[i + 1]));  
         instream_do[y] = Convert.ToDouble(instream_int[y]);  
         textBox1.Text += instream_do[y].ToString() + "\r\n";  
       }  
     }  
   }  
 }  


No comments:

Post a Comment