реклама на сайте
подробности

 
 
> Ethernet контроллер W5100 от Wiznet, проблемы.
Zemlyanov
сообщение Jul 8 2010, 13:14
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 35
Регистрация: 25-12-07
Пользователь №: 33 630



Делаю преобразователь RS 232 >Ethernet. В качестве Ethernet контроллер решил использовать W5100 от Wiznet. Контроллер связал с МК по SPI интерфейсу. Заработал сразу без проблем ,ping , connect к серверу все на ура. После этого я решил отладить передачу данных от W5100 в качестве клиента на сервер. И вот тут начались проблемы . Начинаю передавать данные в размере 10 байт на сервер , но приходит не 10 байт, а 4 пакета по 1460 байт и в последнем пакете последние данные это то что я послал, и это происходит при первой посылке все остальные посылки отправляют столько байт сколько передал.
На сколько я понял, проблема в следующем в W5100 есть регистр Sn_TX_RR (Socket n TX Read Pointer Register) [R] в котором находиться адрес начал передаваемых данных и регистр Sn_TX_WR (Socket n TX Write Pointer Register) [R/W] в котором находится адрес конца передаваемых данных .При первой передаче в регистре Sn_TX_RR находиться случайный адрес и он превышает или находится фиг знает где относительно адрес конца передачи, получается что контроллер по кругу считывает данные со своих регистров доходит до адреса конца чтения и после этого контроллер устанавливает правильное значение в этом регистре и все остальные передачи идут без проблем . Вопрос -как установить правильное значение регистра Sn_TX_RR для первого пакета данных , ведь этот регистр только для чтения и значения в нем контроллер W5100 меняет аппаратно ?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Zemlyanov
сообщение Feb 7 2011, 12:05
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 35
Регистрация: 25-12-07
Пользователь №: 33 630



Проблема в не правильном указании адреса начало и конца чтения данных. У вас и на 100 байтах будут проблемы когда вы достигните конца выделенной памяти под сокет, после чего w5100 пошлет в сеть все что находится в выделенной памяти под другие сокеты а затем вернется на начало и все будет норм пока не достигнет опять конца выделенной памяти. В указании адреса нужно было накладывать
битовую маску. Ниже рабочий код передачи, посмотрите в чем отличия у вас и сделайте как у меня. И все будет ОК. Кстати такая же проблема у вас будет и при приеме данных, поэтому нужно сделать аналогичные изменения и для функции приема данных.
Код
void transmit(unsigned char socket_no,unsigned char get_size,unsigned char *packet)
{  

unsigned int get_offset,fi,get_start_address,i8,;
unsigned int get_free_size;  
unsigned char hi,low;    
    
      do
      {
         get_free_size=check_TX_buffer(2,Sock0);      
      }
    while(get_free_size < get_size);
    
      hi=wiz_rd(0x0424);
      get_offset=hi;                                          
      low=wiz_rd(0x0425);
      get_offset=(get_offset<<8)|low;
       fi=(get_offset&0x07ff);

                                                          
  
       get_start_address =0x4000+ fi;      
      
          

       for(i8=0;i8<get_size;++i8)                    
       {      if (get_start_address==0x4800){get_start_address=0x4000;}
                
           wiz_wr( get_start_address++,packet[TCP_data+i8]);
           ++get_offset;

       }
      
     wiz_wr(Sn_TX_WR0(socket_no),(make8(get_offset,1)));
    
       wiz_wr(Sn_TX_WR1(socket_no),(make8(get_offset,0)));
    
      
    
       wiz_wr(Sn_CR(socket_no),Sn_CR_SEND);        
       while(wiz_rd(Sn_CR(socket_no)));              
      
}


У меня теперь другая проблема с w5100. wireshark показывает что в обмене данных присутствует TCP Dup ACK и TCP Out-Of-Order пакеты

w5100 является клиентом(TCP) в сети и шлет на сервер PC пакет данных 107 байт , после чего сервер шлет ему ответ 17 байт. Почему в обмене присутствуют TCP Dup ACK и TCP Out-Of-Order? Проверялось в таких условиях - PC(сервер) свич w5100(клиент)
, поэтому проблем с сетью быть не может.
В принципе эта проблема не сильно напрягает но люди у которых к одному серверу подключено более 100 клиентов жалуются что на сервер идет лишняя нагрузка из за этих пакетов. Получается что w5100 не отсылает вовремя АСК пакет и сервер шлет повторно TCP Dup ACK. Что то я в регистрах напутал или это такая особенность W5100. Кто что скажет по этому поводу?

Вот какой лог обмена данными показывает программа wireshark. 172.17.226.3 (клиент w5100)
172.17.229.94(сервер ПК)
Код
56    3.717    172.17.226.3    172.17.229.94    TCP    commplex-main > commplex-main [PSH, ACK] Seq=1 Ack=1 Win=2048 Len=107
58    3.886    172.17.229.94    172.17.226.3    TCP    commplex-main > commplex-main [ACK] Seq=1 Ack=108 Win=64679 Len=0
59    3.886    172.17.229.94    172.17.226.3    TCP    [TCP Dup ACK 58#1] commplex-main > commplex-main [ACK] Seq=1 Ack=108 Win=64679 Len=0
60    4.015    172.17.229.94    172.17.226.3    TCP    commplex-main > commplex-main [PSH, ACK] Seq=1 Ack=108 Win=64679 Len=17
61    4.015    172.17.229.94    172.17.226.3    TCP    [TCP Out-Of-Order] commplex-main > commplex-main [PSH, ACK] Seq=1 Ack=108 Win=64679 Len=17
64    4.217    172.17.226.3    172.17.229.94    TCP    commplex-main > commplex-main [ACK] Seq=108 Ack=18 Win=2048 Len=0


Сообщение отредактировал Zemlyanov - Feb 7 2011, 12:07
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Zemlyanov   Ethernet контроллер W5100 от Wiznet, проблемы.   Jul 8 2010, 13:14
- - Yarst   Здравствуйте, Zemlyanov! Пытаюсь разобраться с...   Sep 16 2010, 13:16
- - DSIoffe   Цитата4 пакета по 1460 байт А чем кончилось, а? У ...   Feb 6 2011, 16:25
- - DSIoffe   Большое спасибо. Буду разбираться. Правда, у меня ...   Feb 7 2011, 12:38
- - Zemlyanov   Код hi=wiz_rd(0x0424);// считываете ...   Feb 7 2011, 16:25
- - DSIoffe   Большое спасибо, я нашёл у себя лажу, теперь W5100...   Feb 13 2011, 20:58
|- - kolobok0   Цитата(DSIoffe @ Feb 13 2011, 23:58) ...К...   Mar 14 2011, 09:29
- - DSIoffe   Спасибо, разобрался, есть такое слово - MTU. Вот т...   Feb 14 2011, 19:22
- - DSIoffe   Спасибо, всё так: моё устройство подключено кабеле...   Mar 14 2011, 09:42
- - Errorkpi   А где-то есть описание использования драйвера от п...   Apr 6 2011, 09:41
- - DSIoffe   Лучше всего читать datasheet. Там описаны все реги...   Apr 6 2011, 10:34
- - Errorkpi   Прочитал, конечно впечатляет, но немного не то. Я ...   Apr 6 2011, 10:45
- - DSIoffe   Да я вообще проект для ПЛИС писал по тому даташиту...   Apr 6 2011, 10:50
- - Errorkpi   Курю даташит. Вроде все понятно, пока Будем разби...   Apr 6 2011, 11:09
- - Errorkpi   тут в соседней теме прочитал следующее: ЦитатаСнач...   Apr 6 2011, 12:10
- - DSIoffe   Я софтового сброса не делал, только аппаратный. В ...   Apr 6 2011, 13:29
- - Errorkpi   А выдержка по времени??? или это было притянуто за...   Apr 6 2011, 13:31
- - DSIoffe   Табличка "AC Characteristics". Не менее ...   Apr 6 2011, 14:25
- - Errorkpi   Ну я собственно об этом и писал 2мкс + 10мс. Тольк...   Apr 8 2011, 06:34
- - DSIoffe   Ну да, запас - это святое. А что за соседняя тема?   Apr 8 2011, 07:10
- - Errorkpi   http://electronix.ru/forum/index.php?showt...mp;#e...   Apr 8 2011, 14:51
- - Unfog   Дабы не плодить темы, напишу здесь. Работаю W5100 ...   May 20 2012, 17:37
|- - Lmx2315   QUOTE (Unfog @ May 20 2012, 21:37) Дабы н...   Oct 7 2013, 18:21
|- - Lmx2315   QUOTE (Lmx2315 @ Oct 7 2013, 22:21) Решил...   Oct 8 2013, 17:01
- - pokk   Здравствуйте, возникла у меня вот такая проблема w...   Oct 10 2013, 02:11
- - pokk   Что-то понять не могу с регистра статуса Sn_SR ...   Oct 10 2013, 09:01


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 21:52
Рейтинг@Mail.ru


Страница сгенерированна за 0.01413 секунд с 7
ELECTRONIX ©2004-2016