vadimuzzz 0 23 ноября, 2009 Опубликовано 23 ноября, 2009 · Жалоба а где взять полярность или ее настройка не критична? в том файле, что выше, есть и про полярность, как раз marvel-specific. но если Auto Negotiate проходит, то все автоматом выставляется (как линк/дуплекс). полярность нужна, если какой-нибудь олух кабель неправильно обожмет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dim99 0 24 ноября, 2009 Опубликовано 24 ноября, 2009 (изменено) · Жалоба Сегодня попробовал забить ему жестко без всякого auto-neg параметры для 100 mbit. Сначала делаю hard reset для PHY - 10 ms(с альтерафорум там висит скрин из даташита на микросхему). загораются led и он начинает принимать пакеты от сети в режиме auto-neg, потом забиваю параметры для 100 mbit выключаю auto-neg и он тухнет. не знаю. может ему soft reset после этой операции нужен. в общем остался на auto-neg на 100 mbit full duplex. wireshark принимает вот такой пакет: 8 Frame 69 (126 bytes on wire, 126 bytes captured) Arrival Time: Nov 24, 2009 13:50:20.538005000 [Time delta from previous captured frame: 0.000003000 seconds] [Time delta from previous displayed frame: 0.000003000 seconds] [Time since reference or first frame: 1638.742094000 seconds] Frame Number: 69 Frame Length: 126 bytes capture Length: 126 bytes [Frame is marked: False] [Protocols in frame: eth:mdshdr:fc] 0 Ethernet II, src: 00:07:ab:f0:Od:ba (00:07:ab:f0:Od:ba), Dst: 00:00:00_00:00:00 (00:00:00:00:00:00) S Destination: 00:00:00_00:00:00 (00:00:00:00:00:00) Address: 00:00:00_00:00:00 (00:00:00:00:00:00) 0 = IG bit: individual address (unicast) 0 = LG bit: Globally unique address (factory default) Ј[source: 00:07:ab:f0:Od:ba (00:07:ab:f0:Od:ba) Address: 00:07:ab:f0:Od:ba (00:07:ab:f0:Od:ba) 0 = IG bit: individual address (unicast) 0 = LG bit: Globally unique address (factory default) Type: unknown (0x0000) Trai1er: 000000000000000000000000000000000000000000000000... Frame check sequence: 0x00000000 [incorrect, should be 0xd762142d] В mds Header(unknown(0)/unknown(0)) В mds Header ...0 0000 0000 0000 = Packet Len: 0 0000 0000 00.. = Dst index: 0x0000 00 0000 0000 = src index: 0x0000 0000 0000 0000 = VSAN: 0 В mds Trailer eof: unknown (0) CRC: 0x00000000 количество байтов принимается правильное и даже сегодня получил mac адрес, но сам пакет отнюдь не нулевой должен быть. подозрение, что неправильно формируется дескриптор для sgdma из-за чего и не может нормально пакет передать. где бы посмотреть как правильно настроить sgdma и создать дескриптор для передачи данных? Изменено 24 ноября, 2009 пользователем dim99 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 24 ноября, 2009 Опубликовано 24 ноября, 2009 · Жалоба смотреть в драйвере, м.б. тут фокусы с кэшем. смущает еще нулевая CRC, по идее PHY должен ее сам считать при правильных настройках. ну и ман по sgdma почитать. 5-й том квартус-хендбука. а инициализация точно нормально прошла? обнародуйте статусные регистры. а то я помню 2 недели вдоль и поперек TSE изучал, даже на опенкорес ушел, а дело было в хреновом кабеле. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
maior 0 24 ноября, 2009 Опубликовано 24 ноября, 2009 · Жалоба Я убил много времени пытаясь запустить этот марвел-аляску (88E1111), встроенный в упомянутый ЕДК 120К - и бросил это бесполезное занятие. Поставил DP83848 Ethernet адаптер (от MoreThanIP) через HSMC-СантаКруз переходник - и сразу все заработало как надо, включая Simple Socket Server (Iniche+MicroC/OS, etc). Интересно, есть такие гении, которым удалось таки разморозить эту аляску? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dim99 0 24 ноября, 2009 Опубликовано 24 ноября, 2009 · Жалоба смотреть в драйвере, м.б. тут фокусы с кэшем. смущает еще нулевая CRC, по идее PHY должен ее сам считать при правильных настройках. ну и ман по sgdma почитать. 5-й том квартус-хендбука. а инициализация точно нормально прошла? обнародуйте статусные регистры. а то я помню 2 недели вдоль и поперек TSE изучал, даже на опенкорес ушел, а дело было в хреновом кабеле. Есть ли смысл подключить signaltap и посмотреть передаются ли данные к PHY? инициализацию и прочее постараюсь завтра выложить. Я убил много времени пытаясь запустить этот марвел-аляску (88E1111), встроенный в упомянутый ЕДК 120К - и бросил это бесполезное занятие. Поставил DP83848 Ethernet адаптер (от MoreThanIP) через HSMC-СантаКруз переходник - и сразу все заработало как надо, включая Simple Socket Server (Iniche+MicroC/OS, etc). Интересно, есть такие гении, которым удалось таки разморозить эту аляску? Без паники ) я уже плююсь пакетами, осталось разобраться почему нулевыми. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
maior 0 24 ноября, 2009 Опубликовано 24 ноября, 2009 · Жалоба Без паники ) я уже плююсь пакетами, осталось разобраться почему нулевыми. Да у меня он тоже дышал - но на ладан. Simple Socket Server так и не заработал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 24 ноября, 2009 Опубликовано 24 ноября, 2009 · Жалоба Есть ли смысл подключить signaltap и посмотреть передаются ли данные к PHY? конечно, правда имена у сигналов там того, ну хотя бы на участке sgdma - mac поглядеть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dim99 0 25 ноября, 2009 Опубликовано 25 ноября, 2009 · Жалоба Что-то с разбега не получилось за signal tap засесть, завтра попробую это сделать. Предложение по поводу принять пакет - хорошее. только вот как и чем из-под винды его отправить? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 25 ноября, 2009 Опубликовано 25 ноября, 2009 · Жалоба Что-то с разбега не получилось за signal tap засесть, завтра попробую это сделать. Предложение по поводу принять пакет - хорошее. только вот как и чем из-под винды его отправить? попинговать какой-нибудь левый адрес, которого в сети нет. пойдут ARP-пакеты с MAC-ом сетевухи в Src и broadcast(FF:FF:FF:FF:FF:FF) в Dst полях. см. http://ru.wikipedia.org/wiki/ARP Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dim99 0 25 ноября, 2009 Опубликовано 25 ноября, 2009 (изменено) · Жалоба ну не может же быть, что ему не нравится память, отведенная для хранения принятых данных on-chip вместо ddr как в примере. вот думаю выложить sopc, вдруг что-то напутал: Кстати, после отправки пакета проверяю некоторые регистры о том, как отправился пакет: frame_transmited = IORD_16DIRECT(TSE_MAC_BASE,0x068);//frame trans 2 frame_transmited = IORD_16DIRECT(TSE_MAC_BASE,0x0F0);//octets trans 0 frame_transmited = IORD_16DIRECT(TSE_MAC_BASE,0x08C);//ifOutErrors 0 frame_transmited = IORD_16DIRECT(TSE_MAC_BASE,0x088);//ifInErrors 0 количество переданных пакетов - 2 все правильно - при формировании descriptor выставляю свойство start пакета. расстраивает, что количество переданных октетов - 0 вот и получается, что передано 2 пакета удачно, но без полезной нагрузки и без ошибок. как так может быть. Изменено 25 ноября, 2009 пользователем dim99 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 26 ноября, 2009 Опубликовано 26 ноября, 2009 · Жалоба по поводу нулевых CRC и SRC-MAC есть мысль: похоже косяк в настройках, выключен режим CRC offload и включена замена MAC-адреса тем, что лежит в регистрах(а они, видимо, нулевые). выложите код инициализации. ну и raw_send до кучи. по поводу SOPC: я не стал делать отдельное ОЗУ для дескрипторов, а замапил все в одну кучу. логика такая: выигрыш, который дает размещение пакета в отдельной памяти в момент приема/передачи пакета нивелируется тем, что когда пакет принят и проц хочет в нем поковыряться, придется копировать данные в основное ОЗУ, чтобы не блокировать прием. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dim99 0 26 ноября, 2009 Опубликовано 26 ноября, 2009 · Жалоба нашел ошибку - неправильно формируется дескриптор. Проверяю через alt_avalon_sgdma_check_descriptor_status(desc) и выдает разные ошибки, теперь вот сижу пытаюсь сделать нормальный дескриптор. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 26 ноября, 2009 Опубликовано 26 ноября, 2009 · Жалоба нашел ошибку - неправильно формируется дескриптор. Проверяю через alt_avalon_sgdma_check_descriptor_status(desc) и выдает разные ошибки, теперь вот сижу пытаюсь сделать нормальный дескриптор. так это, код инициализации выкладывайте и raw_send, быстрее дело пойдет Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dim99 0 26 ноября, 2009 Опубликовано 26 ноября, 2009 (изменено) · Жалоба вот что есть на данный момент: alt_sgdma_descriptor *desc = (alt_sgdma_descriptor *) DESCRIPTOR_MEMORY_BASE; alt_sgdma_descriptor *currdescriptor_ptr; int tse_mac_raw_sendM(char * data, unsigned data_bytes) { unsigned int* ActualData;//pointer to the transmitting data unsigned length = 128; int tx_length; char buf2[1560]; char *uncached_pkt = alt_remap_uncached ((volatile void*) pkt, 256); char *uncached_buf2 = alt_remap_uncached ((volatile void*) buf2, 1560); uncached_pkt[0]=0xCC; uncached_pkt[1]=0xCC; int k=0; for(k=2;k<254;k++){ uncached_pkt[k]=0xA5; } uncached_pkt[254]=0xEE; uncached_pkt[255]=0xEE; int i=0; for(i=0;i<length;i++) { uncached_buf2 = uncached_pkt; } ActualData = (unsigned int*)buf2; //------------------- //clear bit-31 before passing it to SGDMA Driver ActualData = (unsigned int*)alt_remap_cached ((volatile void*) ActualData, 256); if( length > ALTERA_TSE_MIN_MTU_SIZE ) { /* make sure there is room in the FIFO. */ alt_avalon_sgdma_construct_mem_to_stream_desc( (alt_sgdma_descriptor *) desc, // descriptor I want to work with (alt_sgdma_descriptor *) desc,// pointer to "next" (alt_u32 *) ActualData, // starting read address (length), // # bytes 1, // don't read from constant address 1, // generate sop 1, // generate endofpacket signal 0); // atlantic channel (don't know/don't care: set to 0) int desc_stat=1; desc_stat = alt_avalon_sgdma_check_descriptor_status(desc);//if 0 then packet is good desc->read_burst = 128; desc->write_burst = 128; tx_length = tse_mac_sTxWriteM(desc); } return 0; } desc_stat = 119 проверяет в контрольном регистре дескриптора Owned_by_HW и выдает #define EINPROGRESS 119 /* Connection already in progress */ пока char * data, unsigned data_bytes не использую. дальше беру функцию из tse: alt_32 tse_mac_sTxWriteM(alt_sgdma_descriptor *txDesc) { alt_32 timeout; alt_u8 result = 0; alt_u16 actualBytesTransferred; // Make sure DMA controller is not busy from a former command // and TX is able to accept data timeout = 0; //tse_dprintf("\nWaiting while tx SGDMA is busy......... "); while ( (IORD_ALTERA_AVALON_SGDMA_STATUS(SGDMA_TX_BASE/*mi->tx_sgdma->base*/) & ALTERA_AVALON_SGDMA_STATUS_BUSY_MSK) ) { if(timeout++ == ALTERA_TSE_SGDMA_BUSY_TIME_OUT_CNT) { //tse_dprintf(4, "WARNING : TX SGDMA Timeout\n"); return 0;//error//ENP_RESOURCE; // avoid being stuck here } } // Set up the SGDMA // Clear the status and control bits of the SGDMA descriptor IOWR_ALTERA_AVALON_SGDMA_CONTROL (SGDMA_TX_BASE/*mi->tx_sgdma->base*/, 0); IOWR_ALTERA_AVALON_SGDMA_STATUS (SGDMA_TX_BASE/*mi->tx_sgdma->base*/, 0xFF); // Start SGDMA (blocking call) [i]result = alt_avalon_sgdma_do_sync_transfer(sgdma_tx_dev/*mi->tx_sgdma*/, &txDesc[0]);[/i] alt_u32 sgdma_res = 0; sgdma_res = IORD_ALTERA_AVALON_SGDMA_STATUS(SGDMA_TX_BASE); /* perform cache save read to obtain actual bytes transferred for current sgdma descriptor */ actualBytesTransferred = IORD_ALTERA_TSE_SGDMA_DESC_ACTUAL_BYTES_TRANSFERRED(&txDesc[0]); int frame_transmited=0; frame_transmited = IORD_16DIRECT(TSE_MAC_BASE,0x068);//frame trans // frame_transmited = IORD_16DIRECT(TSE_MAC_BASE,0x0F0);//octets trans // frame_transmited = IORD_16DIRECT(TSE_MAC_BASE,0x08C);//ifOutErrors // frame_transmited = IORD_16DIRECT(TSE_MAC_BASE,0x088);//ifInErrors return actualBytesTransferred; } Изменено 26 ноября, 2009 пользователем dim99 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vadimuzzz 0 26 ноября, 2009 Опубликовано 26 ноября, 2009 · Жалоба 1. char buf2[1560]; - должен иметь квалификатор volatile, иначе компилятор может наоптимизировать, что без поллитры не разберешься. 2. почему 1, // don't read from constant address - в оригинале 0. по логике тоже д.б. 0 3. desc->read_burst = 128; desc->write_burst = 128; это зачем? 4. char buf2[1560] надо сделать глобальной переменной, иначе неясно, что произойдет при выходе из raw_send(функция не дожидается окончания передачи пакета) 5. tse_mac_sTxWriteM(desc) - код не меняли? таймаут сколько стоит? 6. код инициализации MAC/PHY тоже выкладывайте. 7. sgdma_tx_dev = alt_avalon_sgdma_open("/dev/sgdma_tx"); if(!sgdma_tx_dev) { dprintf("[triple_speed_ethernet_init] Error opening TX SGDMA\n"); return ENP_RESOURCE; } не забыли? хотя по п.4 наврал, там синхронная передача вроде. но все равно, глобальная лучше для отладки. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться