Goto page 1, 2 Next
Atlantis
Guest
Fri Jun 10, 2016 7:17 pm
Skleciłem sobie ostatnio płytkę do eksperymentów z PIC32. Na pokładzie
siedzi PIC32MX270F256B, ENC28J60, AT45DB641, gniazdko do podłączenia
PenDrive'a i parę innych drobiazgów. Zabrałem się za oprogramowywanie
poszczególnych elementów i problem pojawił się przy sieci.
Użyłem najnowszej dostępnej biblioteki z MLA od Microchipa (ta z 2013
roku). Zmiany jakie wprowadziłem są kosmetyczne - właściwie tylko tyle,
że skopiowałem wyłącznie potrzebne mi pliki i zmodyfikowałem ścieżki w
include'ach, dostosowując je do własnej struktury katalogów. Poza tym
jest to dokładnie ten sam, standardowy kod.
Projekt się skompilował, jednak po wgraniu go do MCU okazało się, że
pingi nie wracają, a w tabeli ARP routera nie pojawia się wybrany przeze
mnie adres MAC układu.
Niemniej komunikacja po SPI działa prawidłowo, a sterownik od ENC
raportuje pomyślne zakończenie inicjalizacji po włączeniu zasilania.
Po wykonaniu paru eksperymentów przekonałem się, że chociaż diody na
gniazdku RJ45 zachowują się prawidłowo, funkcja MACIsLinked() za każdym
razem zwraca false, bez względu na to, czy kabel jest podłączony, czy nie.
A akcie chwilowej desperacji wymieniłem nawet gniazdko RJ45 (standardowy
HanRun z trafem) i ENC28J60 - podejrzewając, że któryś z tych elementów
może być wadliwy. Przy okazji pomierzyłem ścieżki, w razie gdyby gdzieś
było jakieś małe zwarcie, które pominąłem. Niestety, żadna z tych
operacji nie przyniosła rezultatu - układ ciągle nie działa.
Połączenia sprawdzałem już kilkanaście razy, zresztą fragment schematu z
ENC został przekopiowany z innego, działającego układu. Jedyna różnica
jest taka, że tym razem nieco poprawiłem projekt płytki (menadry na
liniach różnicowych RX i TX Ethernetu + lepiej umiejscowione rezystory
na tych liniach).
Ktoś ma jakiś pomysł? Może jednak mimo wszystko problem jest programowy?
jacek pozniak
Guest
Fri Jun 10, 2016 8:04 pm
Atlantis wrote:
Quote:
Ktoś ma jakiś pomysł? Może jednak mimo wszystko problem jest programowy?
A skąd to założenie, że biblioteka od microchipa nie jest wadliwa?
jp
Atlantis
Guest
Fri Jun 10, 2016 8:09 pm
W dniu 2016-06-10 o 22:04, jacek pozniak pisze:
Quote:
A skąd to założenie, że biblioteka od microchipa nie jest wadliwa?
Bo całe mnóstwo ludzi używa jej w takiej samej konfiguracji sprzętowej?
Atlantis
Guest
Sat Jun 11, 2016 9:44 am
Kilka kolejnych obserwacji:
1) Wymieniłem prawie wszystkie przyległości ENC i gniazdka RJ45. Na
dobrą sprawę z niewymienionych elementów pozostały tylko kondensatory
odsprzęgające na VCC oraz te przy kwarcu.
2) Na próbę podłączyłem płytkę bezpośrednio z pecetem za pomocą
scrossowanego kabla. Na płytce świeci się zielona dioda, a żółta miga.
Na pececie widać miganie żółtej, ale zielona się NIE świeci.
Układ ścieżek wygląda następująco:
https://s33.postimg.org/yeolw1exp/2016_06_11_11_00_36.jpg
Mirek
Guest
Sat Jun 11, 2016 11:08 am
W dniu 11.06.2016 o 11:44, Atlantis pisze:
Quote:
2) Na próbę podłączyłem płytkę bezpośrednio z pecetem za pomocą
scrossowanego kabla. Na płytce świeci się zielona dioda, a żółta miga.
Na pececie widać miganie żółtej, ale zielona się NIE świeci.
Nie wiem jak się zachowuje ENC28j60, ale nie pamiętam już kiedy musiałem
stosować scrossowany kabel.
Podobna konfiguracja diodek kojarzy mi się kiedy miałem zamieniony
zielony z biało-zielonym w jednej wtyczce. Co ciekawe - z jednym
switchem to działało (zrywało co jakiś czas, ale można było tego nie
zauważyć).
--
Mirek.
Atlantis
Guest
Sat Jun 11, 2016 1:53 pm
W dniu 2016-06-11 o 13:08, Mirek pisze:
Quote:
Nie wiem jak się zachowuje ENC28j60, ale nie pamiętam już kiedy musiałem
stosować scrossowany kabel.
Podobna konfiguracja diodek kojarzy mi się kiedy miałem zamieniony
zielony z biało-zielonym w jednej wtyczce. Co ciekawe - z jednym
switchem to działało (zrywało co jakiś czas, ale można było tego nie
zauważyć).
Na zwykłem, niecorssowanym (zresztą fabrycznym) kablu układ zachowuje
się dokładnie tak samo.
Zrobiłem już chyba wszystko, co mogłem zrobić:
1) Wymieniłem wszystkie elementy feralnego bloku, za wyjątkiem kilku
odsprzęgających na linii VCC.
2) Zwarłem meandry na liniach różnicowych RX i TX.
3) Wylutowałem układ AT45DB641, współdzielący z ENC magistralę SPI.
4) Upewniłem się, czy kwarc się wzbudza. Zarówno licznik częstotliwości
jak i oscyloskop pokazują sygnał na pinach OSC2 (25MHz) i CLKOUT (6,25MHz).
5) Upewniłem się, że nie ma zwarć ani przerw. Kilkanaście razy
obejrzałem płytkę pod lupą i sprawdziłem miernikiem.
6) W akcie desperacji spróbowałem nawet na szybko przeportować stos
Tuxgraphics, z którego korzystałem na AVR-ach. Po uwzględnieniu rzeczy
specyficznych dla PIC32, kawałki kodu z Atmegi skompilowały się. Efekt
był jednak dokładnie taki sam.
Ktoś ma jakiś pomysł? Może jednak stosowanie meandrów nie było zbyt
dobrym pomysłem? Już rezygnacja z mostków po drugiej stronie płytki
wiązała się z wydłużeniem ścieżek, a celem zapewnienia miejsca na
menadry trzeba było jeszcze bardziej odsunąć ENC od gniazdka. Może
jednak lepiej mieć jak najkrótsze ścieżki, nie martwiąc się brakiem
idealnej linii różnicowej?
Schemat tutaj:
https://s33.postimg.org/afjqt6fvh/enc.png
platformowe gĹupki
Guest
Sat Jun 11, 2016 3:28 pm
widzisz, nie pomogłeś mi z USB dla PICów...
ale ja Ci spróbuję pomóc - WIRESHARK!!!
platformowe gĹupki
Guest
Sun Jun 12, 2016 2:37 pm
a jakby tak podpiąć gotowy modulik z ENC pod SPI? będzie wiadomo, czy
wina softu czy może układu...
Atlantis
Guest
Sun Jun 12, 2016 4:01 pm
W dniu 2016-06-12 o 16:37, platformowe głupki pisze:
Quote:
a jakby tak podpiąć gotowy modulik z ENC pod SPI? będzie wiadomo, czy
wina softu czy może układu...
Wczoraj też mi to przyszło do głowy i w ten sposób udało mi się ustalić,
że problem nie jest sprzętowy.
Z pomocą jednego z kolegów z grupy (jeszcze raz dziękuję) udało mi się
ustalić, że biblioteka do obsługi Ethernetu najwyraźniej gryzie się z
biblioteką do USB MSD. Dlaczego? Jeszcze nie mam pojęcia...
Artur Miller
Guest
Sun Jun 12, 2016 4:31 pm
W dniu 2016-06-12 o 18:01, Atlantis pisze:
Quote:
W dniu 2016-06-12 o 16:37, platformowe głupki pisze:
a jakby tak podpiąć gotowy modulik z ENC pod SPI? będzie wiadomo, czy
wina softu czy może układu...
Wczoraj też mi to przyszło do głowy i w ten sposób udało mi się ustalić,
że problem nie jest sprzętowy.
Z pomocą jednego z kolegów z grupy (jeszcze raz dziękuję) udało mi się
ustalić, że biblioteka do obsługi Ethernetu najwyraźniej gryzie się z
biblioteką do USB MSD. Dlaczego? Jeszcze nie mam pojęcia...
kiedyś ogólną teorię gryzienia stosowało się do wyjaśniania problemów z
konfliktami IRQ jak do peceta wsadziło się za dużo kart na ISA'ę ;)
a w temacie - są jakieś sekcje krytyczne w tych libach? dobrze obsłużone?
a.
platformowe gĹupki
Guest
Sun Jun 12, 2016 5:47 pm
nie znam tych bibliotek, ale na przykład w stmie to wyraźnie są
dołączane jakieś bzdety stdlib... może zdublowałeś jakieś pliki?
Piotr Wyderski
Guest
Mon Jun 13, 2016 11:26 am
Atlantis wrote:
Quote:
Bo całe mnóstwo ludzi używa jej w takiej samej konfiguracji sprzętowej?
Kompilator na pewno mają wadliwy, więc czemu ne bibliotekę? :-)
A do rzeczy, to sprawdziłeś błędy trywialne? Ja ostatnio
spędziłem kilka godzin z analizatorem szukając błędów
w transmisji I2C, bo najprostszy przecież PCF8574
w przedziwny sposób czasem działał, a czasem nie,
a okazało się, że nie podłączyłem mu VDD i był
zasilany pasożytniczo. :-/
Pozdrawiam, Piotr
Atlantis
Guest
Mon Jun 13, 2016 12:00 pm
W dniu 2016-06-13 o 13:26, Piotr Wyderski pisze:
Quote:
A do rzeczy, to sprawdziłeś błędy trywialne? Ja ostatnio
spędziłem kilka godzin z analizatorem szukając błędów
w transmisji I2C, bo najprostszy przecież PCF8574
w przedziwny sposób czasem działał, a czasem nie,
a okazało się, że nie podłączyłem mu VDD i był
zasilany pasożytniczo. :-/
Akurat od strony sprzętowej to sprawdziłem go na wszystkie możliwe
sposoby. Łącznie z demontażem i ponownym upewnieniem się, czy na pewno
pod żadnym układem nie przeoczyłem jakiegoś zwarcia/niedotrawienia.
Wymieniłem też wszystkie elementy poza kilkoma kondensatorami
odsprzęgającymi. Dopiero podłączenie zewnętrznego modułu z ENC28J60
utwierdziło mnie w przekonaniu, że problem NIE jest sprzętowy.
Jak już pisałem w innym miejscu - okazuje się, że biblioteka od TCP/IP
gryzie się z biblioteką USB MSD. Wystarczy, że usunę z pętli głównej
wywołanie funkcji USBTask(), a płytka pojawia się w sieci. Jest to o
tyle dziwne, że z tego co mi wiadomo ludzie korzystają z tych bibliotek
jednocześnie...
jacek pozniak
Guest
Mon Jun 13, 2016 3:27 pm
Quote:
Jak już pisałem w innym miejscu - okazuje się, że biblioteka od TCP/IP
gryzie się z biblioteką USB MSD. Wystarczy, że usunę z pętli głównej
wywołanie funkcji USBTask(), a płytka pojawia się w sieci. Jest to o
tyle dziwne, że z tego co mi wiadomo ludzie korzystają z tych bibliotek
jednocześnie...
Spróbuj zostawić USBTask() ale tak aby nigdy nie była wołana; np. uzależnić
wywołanie od jakiejś zmiennej volatile.
Jeśli nie będzie układ działał to może być jakiś problem linkera.
jp
Atlantis
Guest
Mon Jun 13, 2016 5:56 pm
W dniu 2016-06-13 o 17:27, jacek pozniak pisze:
Quote:
Spróbuj zostawić USBTask() ale tak aby nigdy nie była wołana; np. uzależnić
wywołanie od jakiejś zmiennej volatile.
Jeśli nie będzie układ działał to może być jakiś problem linkera.
main {
volatile uint8_t test = 0;
//Sporo innych instrukcji
while {
if (test) USBTasks();
//Sporo innych instrukcji
//Miedzy innymi funkcje obsolugi stosu TCP/IP
}
}
Tak wyglądający program działa prawidłowo.
Wystarczy jednak, że zmienna test zostanie zdefiniowana z wartością 1, a
program się wykrzacza. Tak więc winę musi ponosić coś, co się dzieje
wewnątrz tej funkcji.
Goto page 1, 2 Next