|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 7:56 am
|
Страница 1 от 1
|
[ 10 мнения ] |
|
Проблем с Connect в Microchip TCP/IP стека
| Автор |
Съобщение |
|
gicho
Ранг: Форумен бог
Регистриран на: Пон Мар 13, 2006 1:59 pm Мнения: 3867 Местоположение: Габрово
|
 Проблем с Connect в Microchip TCP/IP стека
Имам вървяща платка с микрочипски PIC с Ethernet. Стека е последния (4.18), компилатора е 3.15 мисля (последния).
Всичко върви (https2, telnet, tcp server demo) с изключение на клиентските TCP сокети. Когато опитам да отворя връзка към отдалечен хост, на който върви приложение с listen сокет, не става нищо. Гледам с wireshark пакетите, но не излизат заявки за отваряне или дори за ARP. TCP client demo-то също не изкарва нищо. Единственият начин да видя пакети за сързване е като задам TCPopen да използва директно IP адрес, но дори тогава зацикля - по sniffer-а виждам ARP запитване за MAC-а на сервера, идаващо от PIC-a, после се вижда ARP отговора на компютъра, и след това се появява пакет от PIC-a, TCP, със сетнати флагове за ACK и RST, т.е. PIC-a решава да отмени връзката. Около 5 мс по-късно идва същата последователност от 3 пакета, като разликата е, че последния (TCP) пакет е с друг source порт (увеличен с единица спрямо предишния цикъл). Така върти групи по 3 пакета безспирно до засиняване, като изрежда сорс портове от 1024 нагоре (което не знам дали е коректно - ако не е отворил връзката по 1024-ти сорс порт, защо ще избира 1025-и? ама това май е от имплементацията на микрочип). Дестинешън порта е очаквания от мен и отворен за listen на PC-то.
Опитах както с DHCP настойки, така и с фиксирани IP адреси. Всичко е въведено коректно и е валидно за дадената мрежа (gateway, DNS, маска).
Тъй като имам проблеми с ICD2-то с тази платка, не мога да се закача да дебъг-на и карам на проба и грешка.
Забелязах, че има проблеми с компилирането на последните версии на стека с последните компилатори, както и че има някой недокументирани промени. Не знам дали това може да е проблема, но ще опитам с по-стара версия.
Ако някой се е сбълсквал с този проблем, моля да помага!
|
| Пет Яну 18, 2008 11:09 am |
|
 |
|
Desert Leo
Ранг: Форумен бог
Регистриран на: Чет Фев 10, 2005 3:25 pm Мнения: 5677 Местоположение: София
|
Видях поста ти в Майкрочипския форум днес и очаквах jamodio да се намеси, но ...
Аз използвам точно неговата модификациs на стека ( www.ljcv.com) и за разлика от оригиналната, тя е доста по-разбираема. Пуснах точно клиентското приложение. Само, че в стейт машината на GenericTCPexample забранявам инкрементирането на клиентския порт и зациклям в очакване на отговор от сървъра. Изглежда, че клиентското приложение е с твърде малък тайм-аут и решава, че сървъра не отговаря и затова опитва отново и отново. Имат значение и таймингите на сървъра. Друго преимущество на тази модификация на стека е, че лесно се коригира за съответния хардуер, а и е базирана на една от най-стабилните версии.
Утре ще погледна разбазикания сорс и какво точно съм разбазикал, защото и при мен първоначално не тръгна.
Успех!
|
| Пет Яну 18, 2008 8:58 pm |
|
 |
|
gicho
Ранг: Форумен бог
Регистриран на: Пон Мар 13, 2006 1:59 pm Мнения: 3867 Местоположение: Габрово
|
Мерси за отговора.
И аз се бях насочил към таймаут, защото явно смята че не са му отговорили и опитва наново - все пак чака само 5мс, туй да не е real time ethernet. В други tcp/ip стекове име опция за port reuse и ако не е зает порта, ще опита отново през него да отвори, но в майкрочипския не немерих подобна възможност.
Да, и аз след известно четене реших, че ще е по-добре да ползвам версията на Jamodio, че без дебъг ще е трудно да търся проблеми, каквито явно не липсват в 4.18
Доколкото разбирам, си се сблъсквал със същия проблем, който описах? Това поне е нещо, явно има проблем в стека.
Ако намериш какво е променено в твоята версия, ще съм благодарен.
Аз ще драпам по проблема като остане време, ако намеря решение ще пиша.
|
| Нед Яну 20, 2008 11:30 am |
|
 |
|
Desert Leo
Ранг: Форумен бог
Регистриран на: Чет Фев 10, 2005 3:25 pm Мнения: 5677 Местоположение: София
|
Оказа се, че последно таймингите съм ги върнал към изходните. Сега си спомням, че това изобщо не помогна, но тогава забелязах, че в switch(GenericTCPExampleState) не всички състояния завършват с break, а се преминава директно към следващото състояние защото GenericTCPExampleState е вече инкриминтирана, което означава, че между състояниятя не се вика функцията StackTask(). Стори ми се, че това би могло да бъде причината и сложих break; в края на всеки case. След отваряне на сокета зациклям в състоянията SM_SOCKET_OBTAINED и SM_PROCESS_RESPONSE. Така не позволявам да се отиде към ресет и инкрементиране на порта, ако сървъра не отговори навреме. Разбира се, това не е завършено приложение, поне дава идея как да ти заработи клиентското приложение.
|
| Нед Яну 20, 2008 6:10 pm |
|
 |
|
gicho
Ранг: Форумен бог
Регистриран на: Пон Мар 13, 2006 1:59 pm Мнения: 3867 Местоположение: Габрово
|
Намерих проблема - незнам дали е същия, но при мен липсваше повикване на TCPWasReset() след TCPOpen() - според коментара на функцията, първото повикване винаги връща true; добавих едно фиктивно викане след TCPOpen() и нещата заспаха.
|
| Пон Яну 21, 2008 12:17 pm |
|
 |
|
mndsl
Ранг: Новодошъл
Регистриран на: Вто Май 23, 2006 4:56 pm Мнения: 113 Местоположение: Варна
|
Gicho, с какъв процесор си, че аз вече 2 дена се боря безуспешно със стека 4.18 и 18F66J65.
|
| Нед Мар 30, 2008 9:48 pm |
|
 |
|
gicho
Ранг: Форумен бог
Регистриран на: Пон Мар 13, 2006 1:59 pm Мнения: 3867 Местоположение: Габрово
|
С 18f67J60.
|
| Нед Мар 30, 2008 10:46 pm |
|
 |
|
mndsl
Ранг: Новодошъл
Регистриран на: Вто Май 23, 2006 4:56 pm Мнения: 113 Местоположение: Варна
|
Тъй и тъй съм почнал, поне да си напиша проблема че да не отварям нова тема. Та проблема е, че не получавам пакети. Гледам че светодиода на RX премигва и това би трябвало да значи, че пика приема някакви пакети. Гледам с дебъгера че EPKTCNT е винаги нула и MacGetHeader винаги връща FALSE, т.е. реално няма приети пакети, които да бъдат обработени. Пробвах да махна всички филтри, но без резултат. Гледам че пика праща ARP заявки за MAC адреса на getaway-а, за какъвто съм сложил компютъра си, компютъра връща отговор, но пика си продължава да си праща заявки, все едно няма отговор, т.е. пак нищо не получава. Вече не знам аз ли съм тъп или тоя стек е нещо бъгав или чипа е дефектен, защото стека 3.75 със ENC28J60 и PIC18F45J10 тръгна от първия път, а този вече 2 дена се дърпа... 
|
| Нед Мар 30, 2008 11:24 pm |
|
 |
|
gicho
Ранг: Форумен бог
Регистриран на: Пон Мар 13, 2006 1:59 pm Мнения: 3867 Местоположение: Габрово
|
Това, което си описал, при викане на connect ли става?
|
| Пон Мар 31, 2008 8:30 am |
|
 |
|
mndsl
Ранг: Новодошъл
Регистриран на: Вто Май 23, 2006 4:56 pm Мнения: 113 Местоположение: Варна
|
Не, въобще е така. Но се оказа че по някаква причина трябва да се разменят TPIN+ и TPIN- входовете. Съжалявам, че моя проблем не е за тази тема, но не ми се пускаше нова.
|
| Пон Мар 31, 2008 9:53 am |
|
|
|
Страница 1 от 1
|
[ 10 мнения ] |
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 1 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|