another_one 0 28 января, 2019 Опубликовано 28 января, 2019 · Жалоба Дорогие сотоварищи! У меня есть вопрос о запуске W5300 Я пытаюсь использовать его в режиме UDP (для использования далее с VLC Player) В datasheet W5300 существует неясное описание 1) Не описано определение битов WDF в регистре MR 2) Не описано определение адресации регистра. В одном случае написано big-endian , в другом - в 16-битном режиме наоброт 3) Пример инициализации не состоит из регистров для сокетов? ... Пожалуйста подкорректируйте мои предположение, кто работал с W5300 Ниже приведена инициализация localparam MR_ADR = 16'0000; // Исходный аппаратный адрес физический адрес (MAC-адрес) localparam SHAR = 16'h0008; // milticast datasheet exmp 00.08.DC.01.02.03 localparam SHAR_ADR = 10 часов 008; // localparam SHAR2 = 16'hDC01; localparam SHAR2_ADR = 10'0000A; // localparam SHAR4 = 16'h0203; localparam SHAR4_ADR = 10'0000C; // // Шлюз IP-адрес 192.168.0.1 localparam GAR = 16'hC0A8; localparam GAR_ADR = 10'h010; localparam GAR2 = 16'0000; localparam GAR2_ADR = 10'h012; // Маска подсети с адресом СУБР 255.255.255.0 localparam SUBR = 16'hFFFF; localparam SUBR_ADR = 10'h014; localparam SUBR2 = 16'hFF00; localparam SUBR2_ADR = 10'h016; // Исходный IP-адрес 192.168.0.3 localparam SIPR = 16'hC0A8; localparam SIPR_ADR = 10'h018; localparam SIPR2 = 16'h0003; localparam SIPR2_ADR = 10'h01A; /// Тайм-аут повторной передачи RTR 400 мс localparam RTR = 16'h0fA0; localparam RTR_ADR = 10'h01C; /// RCR количество раз повторной передачи localparam RCR = 16'000000; localparam RCR_ADR = 10'h01E; localparam TMS01R = 16'h4000; // SOCKET0 - 64 КБ, SOCKET1 - 0 КБ localparam TMS01R_ADR = 10'h020; localparam TMS23R = 16'0000; // SOCKET2 - 0 КБ, SOCKET3 - 0 КБ localparam TMS23R_ADR = 10'h022; localparam TMS45R = 16'0000; // SOCKET4 - 0 КБ, SOCKET5 - 0 КБ localparam TMS45R_ADR = 10'h02C; localparam TMS67R = 16'0000; // SOCKET6 - 0 КБ, SOCKET7 - 0 КБ localparam TMS67R_ADR = 10'h026; localparam RMS01R = 16'h0C00; // SOCCKET0 - 12 КБ localparam RMS01R_ADR = 10'h028; localparam RMS23R = 16'0000; // SOCKET2 - 0 КБ, SOCKET3 - 0 КБ localparam RMS23R_ADR = 10'h02A; localparam RMS45R = 16'0000; // SOCKET4 - 0 КБ, SOCKET5 - 0 КБ localparam RMS45R_ADR = 10'h02C; localparam RMS67R = 16'0000; // SOCKET6 - 0 КБ, SOCKET7 - 0 КБ localparam RMS67R_ADR = 10'h02E; localparam MTYPER = 16'h00FF; // TX - 8 блоков, RX- 8 блоков localparam MTYPER_ADR = 10'h030; локальный параметр PTIMER = 16'0000C8; // 5 с эхо-запрос localparam PTIMER_ADR = 10'h036; localparam PMAGICR = 16'0000; // магическое число localparam PMAGICR_ADR = 10'h038; локальный параметр PSIDR = 16'0000; // идентификатор сеанса PPP localparam PSIDR_ADR = 10'h03C; localparam PDHAR = 16'0000; // PPPoE аппаратный адрес назначения 00.01.02.03.04.05 localparam PDHAR_ADR = 10'h040; localparam PDHAR2 = 16'h0203; // localparam PDHAR2_ADR = 10'h042; localparam PDHAR4 = 16'h0405; // localparam PDHAR4_ADR = 10'h044; localparam Pn_BRDYR = 16'0000; // Отключить PIN BRDY localparam P0_BRDYR_ADR = 10'h060; localparam SnMR = 16'000000; // Включить socketn для UDP // = 16'h0082; // Включить socketn для UDP localparam SnMR_RST = 16'h0080; localparam S0MR_ADR = 10'h200; localparam SnCRopen = 16'h0031; // Открыть Socketn (с SEND и SEND_MAC = 1?) localparam S0CR_ADR = 10'h202; localparam SnCclose = 16'0000; // Закрыть Socketn localparam Sn_IMR = 16'0000; // SENDOK разрешение прерывания localparam S0_IMR_ADR = 10'h204; localparam Sn_IR = 16'h0010; // очищаем прерывание SENDOK localparam S0_IR_ADR = 10'h206; localparam Sn_InitDONE = 16'h0032; // SOCKET - это режим UDP после OPEN localparam Sn_CLOSE = 16'0000; // localparam Sn_PORTR = 16'h1388; // Исходный порт номер 5000 localparam S0_PORTR_ADR = 10'h20A; localparam Sn_DHAR = 16'h0008; // Целевой аппаратный адрес Socketn 00.08.DC.01.02.10 localparam S0_DHAR_ADR = 10'h20C; localparam Sn_DHAR2 = 16'hDC01; // localparam S0_DHAR2_ADR = 10'h20E; localparam Sn_DHAR4 = 16'h0210; // localparam S0_DHAR4_ADR = 10'h210; localparam Sn_DPORTR = 16'h1388; // Номер порта назначения Socketn = 5000 localparam S0_DPORTR_ADR = 10'h212; // localparam Sn_DIPR = 16'hC0A8; // Целевой IP-адрес Socketn C0.A8.00.0B localparam Sn_DIPR = 16'hFFFF; // IP-адрес получателя Socketn 255.255.255.255 localparam S0_DIPR_ADR = 10'h214; localparam Sn_DIPR2 = 16'hFFFF; // IP-адрес получателя Socketn 255.255.255.255 localparam S0_DIPR2_ADR = 10'h216; localparam Sn_MSSR = 16'h05B4; // Максимальный размер сегмента localparam S0_MSSR_ADR = 10'h218; localparam Sn_TX_WRSR = 16'h0001; // размер данных 64 КБ, записанных во внутренней памяти TX //// CS_1: case(flag_st) SWreset: if(clk_cnt == 3'b000) comnd = WAIT; WAIT: if(clk_cnt == 3'b000) comnd = MRr; MRr: if(clk_cnt == 3'b000) comnd = S0MR; S0MR: if(clk_cnt == 3'b000) comnd = IMRr; IMRr: if(clk_cnt == 3'b000) comnd = SHARr; SHARr: if(clk_cnt == 3'b000) comnd = SHAR2r; SHAR2r: if(clk_cnt == 3'b000) comnd = SHAR4r; SHAR4r: if(clk_cnt == 3'b000) comnd = GARr; GARr: if(clk_cnt == 3'b000) comnd = GAR2r; GAR2r: if(clk_cnt == 3'b000) comnd = SUBRr; SUBRr: if(clk_cnt == 3'b000) comnd = SUBR2r; SUBR2r: if(clk_cnt == 3'b000) comnd = SIPRr; SIPRr: if(clk_cnt == 3'b000) comnd = SIPR2r; SIPR2r: if(clk_cnt == 3'b000) comnd = RTRr; RTRr: if(clk_cnt == 3'b000) comnd = RCRr; RCRr: if(clk_cnt == 3'b000) comnd = MTYPERr; MTYPERr: if(clk_cnt == 3'b000) comnd = TMSRr; TMSRr: if(clk_cnt == 3'b000) comnd = RMSRr; RMSRr: if(clk_cnt == 3'b000) comnd = DIP; DIP: if(clk_cnt == 3'b000) comnd = DIP2; DIP2: if(clk_cnt == 3'b000) comnd = S0PORTR; S0PORTR: if(clk_cnt == 3'b000) comnd = CR_0; endcase Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 30 января, 2019 Опубликовано 30 января, 2019 · Жалоба а почему вы не пользуетесь их библиотекой? у них очень хорошо все расписано и настроено. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
another_one 0 31 января, 2019 Опубликовано 31 января, 2019 · Жалоба Я смотрел их библилотеку, делаю все также, регистры пишутся, читаются, но не пингуеться и wireshark ничего не показывает что записываю. И ножка инит постоянно в высоком уровне. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 31 января, 2019 Опубликовано 31 января, 2019 (изменено) · Жалоба Вот рабочий пример. UDP и TCP. Только в дефайнах поставьте W5300, я работаю с W5500 Wiznet.zip замените w5500.c w5500.h на w5300.c w5300.h w5300.c w5300.h Изменено 31 января, 2019 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
another_one 0 3 февраля, 2019 Опубликовано 3 февраля, 2019 · Жалоба Спасибо! Вроде все так как и у вас на этапе инициализации Но по прежнему ничего нет, регистры пишутся , записываются но режим UDP не устанавливается и INT в HIGH В связи с этим уточняющий вопрос - после какой минимальной конфигурации устройство должно пинговатся? Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 4 февраля, 2019 Опубликовано 4 февраля, 2019 (изменено) · Жалоба 11 hours ago, another_one said: Спасибо! Вроде все так как и у вас на этапе инициализации Но по прежнему ничего нет, регистры пишутся , записываются но режим UDP не устанавливается и INT в HIGH В связи с этим уточняющий вопрос - после какой минимальной конфигурации устройство должно пинговатся? Спасибо! вот мой тестовый мейн void main() { GPIO_Setup(); USART_Setup(USART1, 921600); SPI_Setup(SPI1); DWT_Init(); WIZNET_Init(); while(1) { //WIZNET_RunTcpServer(SOCK_TCPS, g_data_buff, PORT_TCPS, &g_size); WIZNET_RunUdpServer(SOCK_UDPS, g_data_buff, PORT_UDPS); } } Со стороны компьютера запускаю Hercules. Изменено 4 февраля, 2019 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 4 февраля, 2019 Опубликовано 4 февраля, 2019 · Жалоба 15 часов назад, another_one сказал: В связи с этим уточняющий вопрос - после какой минимальной конфигурации устройство должно пинговатся? Для 3100, 3150, 5100 так: MR(RST = 0, PB=0), SHAR, GWR, SUBR, SIPR. С 5300 уже не работал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
another_one 0 4 февраля, 2019 Опубликовано 4 февраля, 2019 · Жалоба Спасибо! Я посмотрел Ваш WIZNET_Init() и складывается впечатление что достаточно записать MR, SHAR, GAR, SUBR, SIPR, чтобы устройство начало пинговатся... Еще маленький вопрос - есть ли зависимость этих адресов от инициализации, например если я поставлю на свое усмотрение, может ли быть это причиной дальнейших проблем с инициализацией 2 minutes ago, Сергей Борщ said: Для 3100, 3150, 5100 так: MR(RST = 0, PB=0), SHAR, GWR, SUBR, SIPR. С 5300 уже не работал. Спасибо! Получается что так Но что-то не заводиться... и уже все что можно перепроверил Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 4 февраля, 2019 Опубликовано 4 февраля, 2019 · Жалоба 20 минут назад, another_one сказал: есть ли зависимость этих адресов от инициализации Разумеется. SHAR должен быть уникален в вашей подсети, SUBR должен содержать маску именно вашей подсети, куда включено устройство, SIPR должен принадлежать вашей подсети и быть уникальным в этой подсети. GAR должен содержать адрес шлюза этой подсети. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
another_one 0 4 февраля, 2019 Опубликовано 4 февраля, 2019 · Жалоба 18 minutes ago, Сергей Борщ said: Разумеется. SHAR должен быть уникален в вашей подсети, SUBR должен содержать маску именно вашей подсети, куда включено устройство, SIPR должен принадлежать вашей подсети и быть уникальным в этой подсети. GAR должен содержать адрес шлюза этой подсети. Похоже именно в этом проблема, я записывал все значения этих регистров как в даташите Прошу подсказать исходя из https://my-files.ru/ear7xp Какие данные нужно записывать в моем случае Заранее благодарен! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
another_one 0 4 февраля, 2019 Опубликовано 4 февраля, 2019 · Жалоба Спасибо большое! Теперь пингуется!))) Только вот в режим UDP не входит Мониторю Wireshark'ом, передачу еще пока никакую не делаю Ожидаю факт открытия UDP, которого не происходит согласно данным в S0_CR и S0_SSR Вероятно что-то напутал с адресами, прошу меня подкорректировать Вот моя инициализация конкурирования UDP и его открытие : 1) nRESET pin hold in low 10 2) After nRESET release(going to HIGH) wait 10 ms 3) Write to MR (address 0x000) = 0x0000 ; 4) Write to IMR (address 0x004) = 0x70FE ; 5) Write to SHAR (address 0x008) = 0x0008 ; 6) Write to SHAR2 (address 0x00A) = 0xDC01 ; 7) Write to SHAR4 (address 0x00C) = 0x0203 ; 8) Write to GAR (address 0x010) = 0xA9FE ; 9) Write to GAR2 (address 0x012) = 0xD959 ; 10) Write to SUBR (address 0x014) = 0xFFFF ; 11) Write to SUBR2 (address 0x016) = 0x0000 ; 12) Write to SIPR (address 0x018) = 0xA9FE ; 13) Write to SIPR2 (address 0x01A) = 0xD957 ; 14) Write to RTR (address 0x01C) = 0x0FA0 ; 15) Write to RCR (address 0x01E) = 0x0007 ; 16) Write to MTYPER (address 0x30) = 0x00FF ; 17) Write to TMS01R (address 0x20) = 0x400 ; 18) Write to RMS01R (address 0x028) = 0x0C00 ; 19) Write to S0_MR (address 0x200) = 0x0002 ; 20) Write to S0_IMR (address 0x204) = 0x0011 ; 21) Write to S0_DIP (address 0x214) = 0xA9FE ; 22) Write to S0_DIP2 (address 0x216) = 0xD955 ; 23) Write to S0_PORTR (address 0x20A) = 0x1388 ; 24) Write to S0_DPORTR (address 0x212) = 0x1388 ; 25) Write to S0_CR (address 0x202) = 0x0001 ; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 119 4 февраля, 2019 Опубликовано 4 февраля, 2019 · Жалоба 5 часов назад, another_one сказал: Ожидаю факт открытия UDP, которого не происходит А его и не будет - UDP протокол без соединений, как только что-нибудь пошлете - оно и выскочит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
another_one 0 5 февраля, 2019 Опубликовано 5 февраля, 2019 · Жалоба Спасибо!, я тоже так подумал, но смущает тот факт что регистры S0_CR и S0_SSR не показывают что прошла инициализация UDP, т.е сокет не открыт в UDP, как я тогда буду что-то посылать?? S0_CR показывает LISTEN... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
another_one 0 5 февраля, 2019 Опубликовано 5 февраля, 2019 · Жалоба Попробовал передать в этих условиях, wireshark не показывает передачу по UDP. Посмотрел посредством netstat какие UDP открыты, использую один из них, указываю DIPR 0.0.0.0, DPORTR 5000. По-прежнему SOCK_UDP не читается Прошу подсказать что не так с инициализацией UDP, видимо что-то в указанием адресов и портов Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 6 февраля, 2019 Опубликовано 6 февраля, 2019 (изменено) · Жалоба 14 hours ago, another_one said: Попробовал передать в этих условиях, wireshark не показывает передачу по UDP. Посмотрел посредством netstat какие UDP открыты, использую один из них, указываю DIPR 0.0.0.0, DPORTR 5000. По-прежнему SOCK_UDP не читается Прошу подсказать что не так с инициализацией UDP, видимо что-то в указанием адресов и портов я не понял вы сокет открываете? (socket(sn, Sn_MR_UDP, port, 0x00)). что показывает Sn_SR? Изменено 6 февраля, 2019 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться