|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 1:18 am
Проблем с Ethernet комуникацията между LPC17xx и персоналния
| Автор |
Съобщение |
|
breaniac
Ранг: Новодошъл
Регистриран на: Съб Сеп 17, 2011 10:13 am Мнения: 112
|
 Проблем с Ethernet комуникацията между LPC17xx и персоналния
Здравейте на всички! Проблемът ми е следният: опитвам се да направя трансфер на данни по Еthernet от PC-то към микроконтролер LPC17xx. Незнам кой точно регистър от паметта да изчета за да мога да видя това което пращам от РС-то дали е прието от контролерът (дали самият той го е получил). Ако някой е имал подобен проблем или има някаква идея как може да се направи този трансфер моля нека да се отзове! Връзката между двете устройства съм я осъществил, и работи(изтествал съм я с RUN конзолата на РС-то, cmd->ping xxx.xxx.x.xxx). За проектът използвам следният сорс код : http://www.standardics.nxp.com/suppo...c17xx.keil.zipв него има дирестория с име EMAC, в нея се намира и самият проект. Този проект е на Keil, но може да се зарежда и с други компилатори, понеже е писан на С. Ще ви бъда благодарен ако някой помогне, че съм го загазил с този проект!!!!!!
|
| Съб Сеп 17, 2011 10:16 am |
|
 |
|
ike
Ранг: Форумен бог
Регистриран на: Пет Фев 04, 2005 9:59 pm Мнения: 6019 Местоположение: София
|
 Re: Проблем с Ethernet комуникацията между LPC17xx и персона
_________________ Warriors of the Night, ASSEMBLER!!!
|
| Съб Сеп 17, 2011 10:31 am |
|
 |
|
breaniac
Ранг: Новодошъл
Регистриран на: Съб Сеп 17, 2011 10:13 am Мнения: 112
|
 Re: Проблем с Ethernet комуникацията между LPC17xx и персона
ok ike, poblikuvah q na nqkolko mesta za6toto neznam kude trqbva6e da se poblikuva.
|
| Съб Сеп 17, 2011 3:37 pm |
|
 |
|
bongo_x2
Ранг: Форумен бог
Регистриран на: Вто Яну 20, 2009 11:54 pm Мнения: 11338 Местоположение: "Занзибар"
|
 Re: Проблем с Ethernet комуникацията между LPC17xx и персона
Не че аз съм човекът който ще ти помогне ама не можах да ти отворя линка: "404 Not Found".
|
| Съб Сеп 17, 2011 3:55 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: Проблем с Ethernet комуникацията между LPC17xx и персона
Трудно ще го видиш в регистри  По мрежата постоянно текат най-различни пакети, които постъпват във фифо-то на етнернет контролера. В това фифо няма много място, така че софтуера по-точно мрежовия стек (вероятно uIP или lwIP) постоянно трябва да изчита и обработва. Ако искаш да се ориентираш какво става трябва да си настроиш стека да логва пакетите, които получава/праща. Специално за lwIP има много настройки, така че можеш по протоколи да филтрираш и т.н. Друг е въпросът как точно ще си направиш лога, така като те гледам едва ли си наясно... Има и друг малко по-лесен подход. Инсталирай си Wireshark на компютъра и виж как изглеждат нещата от гледна точка на РС-то. Не знам какви протоколи ползваш но за TCP/IP има прозорци и потвърждения, така че може да стане ясно какво е получено. Ако пък не може да се ориентираш сам с Wireshark-a по-добре зарежи проекта 
|
| Съб Сеп 17, 2011 6:47 pm |
|
 |
|
itso.t
Ранг: Форумен бог
Регистриран на: Чет Фев 03, 2005 2:21 am Мнения: 12765 Местоположение: София
|
 Re: Проблем с Ethernet комуникацията между LPC17xx и персона
Знаещите виетнамски във форума са изключително малко. Комуникацията на кирилица би била значително по-лесна... 
|
| Съб Сеп 17, 2011 10:29 pm |
|
 |
|
breaniac
Ранг: Новодошъл
Регистриран на: Съб Сеп 17, 2011 10:13 am Мнения: 112
|
 Re: Проблем с Ethernet комуникацията между LPC17xx и персона
Изпращам zip с кодът върху който работя. Вътре нещата са организирани по прост начин, поне така пише в дескръпшана на кодът от NXP. Ако може някой да му хвърли едно око и даде идея къде трябва да се пипне какво. А за проблемът с линка по-горе се извинявам. Колкото до това че не съм наясно с някои от нещата така е, понеже за първи път се опитвам да осъществя такъв вид комуникация. Но съм сигурен че кодът който ползвам ще свърши работа, понеже в чуждестранни форуми четох че точно този код от NXP са го използвали хората и са направили комуникацията която аз искам - да пращам данни от PC-то и да ги получавам от MCU-от. Проблемът беше че никой от пичовете не беше качил преработката на въпросният код, за да видя идеята за това как да получа изпратените данни от компютърът в микроконтролерът. Именно затова и пиша тук, ако някой е правил подобно нещо да помогне. 
Последна промяна breaniac на Нед Сеп 18, 2011 2:16 pm, променена общо 1 път
|
| Нед Сеп 18, 2011 2:00 pm |
|
 |
|
breaniac
Ранг: Новодошъл
Регистриран на: Съб Сеп 17, 2011 10:13 am Мнения: 112
|
 Re: Проблем с Ethernet комуникацията между LPC17xx и персона
Само едно пояснение към програмата и по конкретно за main() функцията. В нея идеята ми е да се глобализира променлива, масив или каквото стане в зависимост от особеността на комуникацията  , която да се пълни с данните изпратени от PC-то. Така при съвпадение с някои от "casе" случаите на switch операторът да се премине към съответният случай, например палене на конкретен светодиод, изчитане на температурата от съответен температурен датчик и т.н. Програмата не е напълно завършена затова и накои от case-вете са празни, поради факта че немога да получа съответните данни от PC-то.
|
| Нед Сеп 18, 2011 2:13 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: Проблем с Ethernet комуникацията между LPC17xx и персона
този код е твърде окастрен.. Едва ли човек с опит би го използвал... съответно трудно ще намериш някой да ти помогне.
За сметка на това пък кодът е толкова прост, че няма накъде повече (сигурно няма и 1% от нормален стек). Така че би трябвало да се справиш сам. Имаш една функция дето трябва да се вика постоянно, вътре една стейт машина... Сядай и го разгледай, нищо работа е! После го пусни и дебъгни да видиш какво става. И едва тогава като се сблъскаш с конкретен проблем пиши по форумите. В момента звучиш като блондинка просто...
|
| Нед Сеп 18, 2011 8:12 pm |
|
 |
|
breaniac
Ранг: Новодошъл
Регистриран на: Съб Сеп 17, 2011 10:13 am Мнения: 112
|
 Re: Проблем с Ethernet комуникацията между LPC17xx и персона
miro_act , блондинка или не незнам със сигурност, но знам че на тоя свят всички се раждаме малко или повече блондинки и с времето променяме пигментът на косата  . Така че може и да си прав по тоя въпрос. Ако можеш да ме насочиш поне мъничко какво трябва да направя за да постигна ефектът за който писах по-горе ще съм ти много благодарен! 
|
| Пон Сеп 19, 2011 7:24 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: Проблем с Ethernet комуникацията между LPC17xx и персона
За да ти дам насока трябва да имам престава какво точно правиш и как го правиш... Аз нито мога да гадая добре, нито имам излишно време. Повярвай ми ще е много по-лесно за всички ако си разделиш нещата на стъпки и да си говорим за конкретни детайли. Това, което успях да "отгатна" (пак повтарям не ми е това силата) е, че: 1) Вероятно не ползваш дебъгер щом клатиш светодиоди... Не знам, нямаш jtag или поради друга причина, но ще ти е много по-лесно с дебъгер (а и за нас ще е). 2) Все пак си успял някак си да компилира и заредиш кода и даже имаш ping. Браво! Това показва че голяма част от нещата работят. Данните ти се четат от правилните регистри и те не са ти проблем. За всеки случай се убеди, че пингваш твоето устройсво а не нещо друго... виж дали IP-адреса е същия, може да го промениш и пак да провериш с пинг дали стария адрес ще спре да отговаря.. 3) Трябва да уточниш протокол за комуникация. Възможности много, но тъй като ползваш пример за веб сървър предполагам най-лесно ще ти е чрез tcp/ip socket. Имай предвид че кодът който ползваш е страшно скопен. Не проверява нищо, нито кой порт, нито кой сокет т.е ако се пробваш два сокета да отвориш едновременно ще стане боза. Както и да е... предполагаме че устройството ти ще седи и ще слухти за сокет. За целта някой трябва да го отвори. Може да ползваш telnet. Пак се пуска с run, но по-добре първо да пуснеш конзола (run cmd) и в конзолата пишеш tenet xxx.xxx.x.xxx (там какъвто ти е адреса). По подразбиране телнет ползва порт 23, но така или иначе твоя код не проверява порта тъй че е все тая. Та след като се отвори сокета каквото напишеш на компютъра ще отива в устройството и каквото ти отговори ще го виждаш... Ако не си наясно с телнет може да се пробваш първо с кой да е веб сървър. Примерно пишеш: telnet www.google.com 80 това отваря сокет към 80-ти порт и ако успее ще ти излезе черен екран с маркер. Веб сървърите очакват HTTP заявки, като най-простата е: GET / HTTP/1.0 след това чукаш два пъти enter. И ако имаш късмет сървъра ще ти върне някаква HTML страничка или ще те пренасочи с 302. После обикновено сървъра затваря сокета, т.е телнета излиза... Сега, може да си поиграеш с твоето устройство... Първата стъпка е да конектне, т.е. да ти излезе екрана с маркера. Би трябвало да стане щом пинг работи. След това може да ти излезе още на първия клавиш или да забие... но да не гадаем сега. Вероятно ще трябва да си допишеш кода, защото си махнал важна част... По принцип данните идват на пакети. Не ми се гледа сега колко точно е скопен кода ти. Най-вероятно очаква всичко да дойде на един пакет, но ти така или иначе си махнал тая част от код. Значи ти викаш тая DoNetworkStuff() постоянно, тя си вади пакетите. Някои обработва (пинг примерно) други ще ги остави на теб да обработиш. За целта след всяко извикване може да проверяваш: if (SocketStatus & SOCK_DATA_AVAILABLE) и ако има данни да ги обработиш и след като ги обработиш трябва да освободиш буфера с TCPReleaseRxBuffer(); В примерния веб сървър както може да видиш директно освобождават. Изобщо не се интересуват какво са получили, приемат че е заявка и отговарят с някаква страничка... Не се прави така, но това е друга тема. Данните са ти в RxTCPBuffer ако не си забелязал... но имай предвид, че може да ги получаваш на части според това как ще се нацепят на пакети. Вече ти ще трябва да си решиш дали да ги сглобяваш и после как да ги обработваш. И ако нещо не работи следващия път описваш какво пробваш и какво се получава. Само "не работи" казват блондинките 
|
| Пон Сеп 19, 2011 9:37 pm |
|
 |
|
breaniac
Ранг: Новодошъл
Регистриран на: Съб Сеп 17, 2011 10:13 am Мнения: 112
|
 Re: Проблем с Ethernet комуникацията между LPC17xx и персона
Ok, miro_act. Малко пъти съм ползвал форуми, и не съм наясно за това как се отбелязва самият проблем, затова съм го споменал накратко, без да се впускам в подробности, за което се извинявам. Колкото до дебъгер, да ползвам ULINK2, а контролерът е на развойната платка MCB1700. Нещата ги правя чрез JTAG, а за компилатор ползвам средата и възможностите на Keil uVision4. Това което ме притесняваше в кода, понеже съм го дръпнал от сайта на NXP,е че според мен не е имплементиран режимът за получаване на данните. Изпращането работи (по долу в main-a съм закоментирал една част) един HTTP сървър. Този сървър го зареждам с браузърът и всичко си е OK. Но ще видя да пробвам нещата за които говориш и ако има някакво развитие пак ще пиша. Благодаря за съветите и извинявайте ако съм сгафил с нещо.
|
| Вто Сеп 20, 2011 7:33 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: Проблем с Ethernet комуникацията между LPC17xx и персона
щом браузърът работи значи и получаването работи. Те просто не гледат какво се получава, само че се получило нещо и хоп изпращат страница. И няма какво да се извиняваш, няма глупави въпроси - само глупави отговори 
|
| Вто Сеп 20, 2011 9:16 pm |
|
 |
|
breaniac
Ранг: Новодошъл
Регистриран на: Съб Сеп 17, 2011 10:13 am Мнения: 112
|
 Re: Проблем с Ethernet комуникацията между LPC17xx и персона
Здравейте пиша ви отново във връзка с проблемът който дискутираме тук. Опитах нещата които ми каза miro_act, и по долу съм качил скрийншоти на резултатите. Според мен ping-а работи, същото бих казал и за telnet-a. Като при вторият, за да ми извади съобщението "test" (така както се вижда от скрийншота), трябваше да разкоментирам HTTP сървърът (този сървър по дифолт изпраща една web страничка към PC-то, аз кодът на тази страника го махнах и написах просто стринга - test) и да го извикам в do-while цикълът на кодът, който качих по горе. В противен случай ако този сървър остане закоментиран, контролерът не изпраща нищо към PC-то и след като напиша в RUN конзолата telnet 192.168.0.100 80 (IP-то на контролерът и портът под който работи), тя се опитва да се кънектне към хоста и след известно време забива. Поиграх си и със софтуерът WireShark. Третият скрийншот са резултати от тестове които съм провел с него. Тук се опитвам да изпратя фрейм от PC-то (като използвам разработен от мен Labview панел). Маркираният в синьо текст, са ми всъщност данните които изпращам от панелът към контролерът. Направих общо пет опита да изпратя данни по посоченият начин. Това което ми направи впечатление е, че полезните за мен данни и при петте опита започват да се записват от един и същи адрес на фрейма. С дебъгерът открих функция с име ReadFrame_EMAC, според мен тя би ми помогнала да достигна крайната цел. Самата тя връща съдържанието на указател с име rptr (доколкото успях да проследя алгоритъмът), а този указател сочи към адресът на дискрипторът в паметта, който се формира от приетите данни. При първото цялостно обхождане на цикълът do-while, адресът на първият дискриптор е 0x2008 008Е, при второто на вторият е 0x2008 068Е, при третото на третият става 0x2008 0С8Е, при четвъртото на четвъртият 0x2008 128Е, и при петото обхождане на цикълът указателят се връща на адресът на първият дискриптор (0x2008 008Е). Това което ми направи впечатление е че разликата между адресите е 0х600 или 1536 десетично, което е всъщност размерът на един фрейм имплементиран в кодът (променлива ETH_MAX_FLEN в EMAC.h). Сега въпросът ми е как може като знаем адресите на дискрипторите, да се изчете текущият дискриптор (фрейм), и след това да се раздели на подпакети (както споменава miro_act в последният отговор), като единият под пакет да са полезните данни изпращани от PC-то към контролерът. Обмислям вариантът да използвам масив за тази работа, заедно с функцията CopyFromErame_EMAC, която се намира в EMAC.c, но искам да знам и вашето мнение по въпросът за да не тръгна в грешна посока.
|
| Вто Сеп 27, 2011 8:57 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
 Re: Проблем с Ethernet комуникацията между LPC17xx и персона
Е браво, напредваш много  Лошото е, че сега трябва да разгледам по-подробно тоя стек за да мога ти помогна. Но си мисля че няма нужда да слизаш на толкова ниско ниво. Със сигурност в тоя стек са спестени доста неща, но получаването в някаква форма би трябвало да бачка. Според мен трябва да проверяваш за SOCK_DATA_AVAILABLE и като се вдигне да видиш каква част от данните са ти дошли, да си ги вземеш и евентуално да продължиш да чакаш остатъка (ако чакаш още данни). Без да се занимаваш с фреймове... То ако трябва и това да правиш ще е прекалено.
|
| Сря Сеп 28, 2011 9:17 am |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 3 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|