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

 
 
> Проблема с запуском Wiznet W5100
vesago
сообщение Sep 6 2012, 05:51
Сообщение #1


Тутэйшы
****

Группа: Свой
Сообщений: 708
Регистрация: 30-11-04
Пользователь №: 1 263



К w5100 я подкинул m328 по spi. Тут все нормально - в регистры пишется и считывается. Я сначала дергаю ногу сброса, потом делаю софтовый сброс, потом гружу в w5100 мак адрес, адрес шлюза, маску подсети и ip адрес. Все стандарно. Хотелось бы послать пинг и получить ответ. К сожалению, когда подключаю кабель, компьютер ни как не реагирует. Кабель всякий пробовал. В том числе и перевернутый. Резистор 1М параллельно кварцу повесил - без него регистры не писались/читались. Когда втыкаю пачкорд, что идет на общую сеть, начинает
мигать желтый светодиод, пару раз загорался зеленый. Воткнул перекрестным к ноутбуку - ноль реакции. Не видит сетевуха компьютера. Все прозвонил на наличие нужных питаний и отсутсвие замыканий. Остается поменять микросхему и транс. Что еще можно глянуть? Нуждаюсь в свежей мысли по сабжу.
Прикрепленные файлы
Прикрепленный файл  1.pdf ( 33.23 килобайт ) Кол-во скачиваний: 54
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Метценгерштейн
сообщение Feb 9 2013, 14:28
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



разобрался я с указателем этим. Резюмирую:

он должен крутиться пока не перевалит за 16 бит. Обнулять его и приводить к размеру сокета нельзя, т.к. сразу размер принятых данных (регистр Sn_RX_RSR0) будет равен 2048.
исходя из данного указателя мы сами должны высчитать физический адрес начала данных. При этом, если указатель будет равен 4097, то, при сокете 2К, адрес должен начинаться с начала, т.е. 0x6001 - это для нулевого сокета.

делается это так:
Код
uint16_t RX_beginDataAddr =(RX_pointer&(S0_RX_MASK+(SNum*0x0800)))+(S0_RX_BASE+(SNum*0x0800)); // вычислим физ. адрес начала данных


ну и собственно код работы с визнетом. Мой драйвер + закомментированы штатные дрова- можете их использовать- просто пример как с ними работать.
Код
void WIZnet_main (void)
{
    WIZ_Init();
    uint8_t recv_IP[32];
    for (uint8_t i = 0; i < sizeof (recv_IP); i++)
    {
      recv_IP[i] = 0;
    }
    uint16_t RX_pointer =0;
    
#define SNum    0
    
#define S0_RX_BASE     0x6000     //начало памяти Rx
#define S0_RX_MASK     0x07FF     //2K-1
  
           // режим сервера
            socket (SNum, Sn_MR_TCP, 3001, 0); //for socket: number, protokol, source port, option ???      
    
            while ( !listen (SNum) ) { }      
            
            while (IINCHIP_READ (Sn_SR(SNum)) != SOCK_ESTABLISHED) { }    
            while (IINCHIP_READ (Sn_SR(SNum)) == SOCK_ESTABLISHED) {      
              
              
            uint16_t RX_dataSize; // размер принятых данных
            while (!(RX_dataSize = IINCHIP_READ16 (Sn_RX_RSR0(SNum))));

            RX_pointer = IINCHIP_READ16 (Sn_RX_RD0(SNum)); // считали указатель RX        
            
            uint16_t RX_beginDataAddr =(RX_pointer&(S0_RX_MASK+(SNum*0x0800)))+(S0_RX_BASE+(SNum*0x0800)); // вычислим физ. адрес начала данных
            
            //тут обыграем переполнение буфера RX memory
            uint16 src_mask = RX_pointer & getIINCHIP_RxMASK(SNum);          
           if( (src_mask + RX_dataSize) > getIINCHIP_RxMAX(SNum) )          
            {        
              uint16_t upper_size = (S0_RX_MASK + 1 - RX_pointer); //размер первых байт, кот влезли в конец буфера
            
              for (uint16_t i=0; i<upper_size; i++) {
                recv_IP[i] = IINCHIP_READ (RX_beginDataAddr + i); // пишем их в массив
                }
                
              for (uint16_t i=upper_size; i<RX_dataSize; i++) {
                recv_IP[i] = IINCHIP_READ ((S0_RX_BASE+(SNum*0x0800)) + (i - upper_size)); // пишем оставшиеся байты с начала буфера
                }
              
            }
          
          else
            {                                           // если данные не вылезли за размер буфера
              for (uint16_t i=0; i<RX_dataSize; i++) {
                recv_IP[i] = IINCHIP_READ (RX_beginDataAddr + i); // положили данные в массив
                }              
              
            }            
            
            RX_pointer += RX_dataSize;   // изменим указатель на длину принятых данных
          
            IINCHIP_WRITE16 ((Sn_RX_RD0(SNum)), RX_pointer);        
            IINCHIP_WRITE (Sn_CR(SNum), Sn_CR_RECV); // команда на изменение регистра
            while( IINCHIP_READ(Sn_CR(SNum)));
          
            RX_pointer = IINCHIP_READ16 (Sn_RX_RD0(SNum)); // считали указатель RX
            printf("RX_pointer -> %4d      recv_IP -> %s\r\n", RX_pointer, recv_IP);    
              
            
            
            
            
            
//
//              uint16_t RX_dataSize; // размер принятых данных
//              while (!(RX_dataSize = IINCHIP_READ16 (Sn_RX_RSR0(SNum))));
//                      
//              recv (SNum, recv_IP, RX_dataSize);
//              printf("recv_IP -> %s   \r\n  \r\n", recv_IP);    
              
            }//while
    
              
              
              
            disconnect (SNum);
            close (SNum);
            
            printf("connection closed");
            
          
          
  }
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- vesago   Проблема с запуском Wiznet W5100   Sep 6 2012, 05:51
- - Сергей Борщ   QUOTE (vesago @ Sep 6 2012, 08:51) Остает...   Sep 6 2012, 07:28
|- - vesago   Цитата(Сергей Борщ @ Sep 6 2012, 09:28) В...   Sep 6 2012, 07:32
- - vesago   В общем сделал я вторую плату - те же яйца. W5100 ...   Sep 11 2012, 11:30
|- - Сергей Борщ   А может быть ошибка в процедуре записи/чтения реги...   Sep 11 2012, 19:18
||- - vesago   Цитата(Сергей Борщ @ Sep 11 2012, 21:18) ...   Sep 12 2012, 06:55
|- - alexPec   Цитата(vesago @ Sep 11 2012, 15:30) В общ...   Sep 11 2012, 21:14
|- - Lmx2315   Цитата(alexPec @ Sep 12 2012, 01:14) Кста...   Sep 12 2012, 07:10
|- - alexPec   Цитата(Lmx2315 @ Sep 12 2012, 11:10) ..ув...   Sep 12 2012, 19:56
|- - vesago   Да, схема проста как валенки. В полном объеме в ре...   Sep 13 2012, 05:30
|- - Lmx2315   Цитата(vesago @ Sep 13 2012, 09:30) Да, с...   Sep 26 2012, 16:11
- - vesago   В общем запустился дивайс. Пингуется на 100 мегаби...   Sep 14 2012, 05:48
|- - alexPec   Цитата(vesago @ Sep 14 2012, 09:48) На пр...   Sep 15 2012, 09:49
|- - vesago   Цитата(alexPec @ Sep 15 2012, 11:49) Стра...   Sep 26 2012, 06:29
- - Метценгерштейн   vesago, а почему у Вас два сигнала W_SCS и W_SEN п...   Jan 22 2013, 10:49
|- - vesago   Цитата(Метценгерштейн @ Jan 22 2013, 12:4...   Feb 8 2013, 07:07
- - Метценгерштейн   Запустил я свой модуль, пишу в него, читаю регист...   Feb 2 2013, 14:36
|- - AHTOXA   Цитата(Метценгерштейн @ Feb 2 2013, 20:36...   Feb 8 2013, 16:11
- - Метценгерштейн   пишу новую процедуру. в общем, не могу победить пе...   Feb 7 2013, 13:19
- - Метценгерштейн   я уже не пользую штатную ф-ю, т.к. она не заработа...   Feb 8 2013, 07:43
- - vesago   ...   Feb 8 2013, 08:08
- - Метценгерштейн   к слову сказать, запустил я родные дрова под него,...   Feb 8 2013, 16:03
- - Метценгерштейн   обязательно расскажу. Только пока что победил визн...   Feb 8 2013, 19:13
- - Метценгерштейн   и еще, касательно документации на wiznet. Особенно...   Feb 11 2013, 08:15
- - Метценгерштейн   новая засада- такой код с UDP работает нормально К...   Feb 18 2013, 20:09
- - Метценгерштейн   вроде нашел решение   Feb 18 2013, 20:09


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

 


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


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