quarta-feira, 21 de julho de 2010

3º Passo - Testando o envio e recebimento

Agora, é hora de testarmos o envio de dados pela ethernet, para isso nós devemos ultilizar uma ferramenta muito ultilizada na area de TI que é Wireshark, analisador de protocolos de rede com recursos de captura de dados e informações detalhadas. Antigo Ethereal. Instale na sua máquina. Winpcap também deve ser instalado
O funcionamento do Wireshark é bem intuitivo, basta startar a interfece de captura que aparece na primeira página quando abrimos o programa e pronto, poderemos ver os pacotes de rede, circulando na nossa rede. 


Vamos escrever este código e salvar como main.c.


#include  at89s8252.h


typedef unsigned char           BYTE;      
//8 bits endereçamento direto na ram interna
typedef int                     WORD;
//16 bits endereçamento direto na ram interna
typedef unsigned long           DWORD;
// 32-bit endereçamento direto na ram interna

#define     FALSE               0
#define     TRUE                1

#define     MY_MAC              0x530         
//meu endereço MAC na RAM externa

//SPI
#define     CKL                 P1_5
#define     MISO                P1_6
#define     MOSI                P1_7

#include "lcd.h"                //funcões LCD
#include "binarias.h"           //funcoes diversas; funcoes RAM externa
#include "enc28j60.h"           //funções ENC28J60



void main (void)
{
    WORD i;                     //ponteiro
    BYTE dado[]="deniro";       //dado a ser enviado ethernet  
   
    enc28j60_init();            //inicalizo ENC28J60
   
    timer(1000);                //delay
   
    for(i=0;i<6;i++)       
        Escrita_Ram(i,dado[i]); //escrevo em minha ram externa
       
   
    enc28j60_envia_pacote (6);  //envio pela ethernet
}





Compile e execute o simulador do proteus com o wireshark já inicializado. Nós devemos ver os dados sendo enviados pela porta ethernet.




O teste de recebimento, eu fiz enviando um pacote ARP de requerimento. No meu código fonte eu identifico este pacote e escrevo no LCD. 


#define     MAX_RXTX_BUFFER     1518     
//Tamanho maximo do buffer ENC28J60



void servico (void)
{
    WORD pacote;
   
   
    pacote=enc28j60_ler_pacote (MAX_RXTX_BUFFER);
    //adquiro pacote
   
    if(pacote)
    //existe pacote
          if( Ler_Ram(12) ==0x08 && Ler_Ram(13) == 0x06)
          //se for ARP escreve
            lcd_print("ARP",1,1);
           
}    

void main (void)
{
     
    init_lcd(); 
   
    enc28j60_init();            //inicalizo ENC28J60
   
    timer(1000);                //delay    
   
    while(1)
    {
        servico();
    } 
}




A minha RAM externa está como espelho dos pacotes recebidos (ver função "WORD enc28j60_ler_pacote (WORD max_comprimento )"), basta eu ler os endereços de interesse que neste caso são 12 e 13 decimais.
 Facil!
 
Na próxima postagem, vamos inicializar a consrução dos protocolos TCP/IP. Para esta etapa e preciso ter conhecimento do protocolo ethernet. 

Nenhum comentário:

Postar um comentário