Jakiś czas temu złożyłem sobie projekt radia internetowego/odtwarzacza MP3 z wykorzystaniem mikrokontrolera PIC32MX795F512L i układu Ethernet PHY DP83848. Firmware napisałem przy użyciu starych bibliotek MLA. Wszystko działało całkiem sprawnie. Później powstała nowsza wersja hardware'u, wykorzystująca znacznie mocniejszy PIC32MZ2048EFM100 i bibliotekę Harmony. Sprawdzała się ona znacznie lepiej - chociażby z uwagi na domyślne wykorzystanie RTOS-a.
Ostatnio postanowiłem backportować nową wersję softu pod stary hardware. Z czystej ciekawości chciałem się przekonać jak dobrze starszy MCU będzie sobie radził z nowymi bibliotekami. Gdyby eksperyment się udał, to potencjalnie mógłbym wykorzystać w przyszłych projektach tych kilka scalaków leżących w szufladzie. ;)
Oczywiście głównym problemem były mniejsze zasoby sprzętowe. O ile PIC32MZ2048EFM100 miał 2MB flasha i 512kB RAMu, to PIC32MX795F512L ma odpowiednio tylko 512kB i 128kB. Program się zmieścił, zajmując jakieś
75% flasha. Zmniejszając rozmiar kilku statycznych buforów, manipulując rozmiarem sterty i rozmaitymi ustawieniami w konfiguracji udało mi się także (chyba) upchnąć wszystko w RAM-ie.Pierwsze wrażenie były jak najbardziej pozytywne. Oprogramowanie działało na starym sprzęcie zaskakująco dobrze. Powiedziałbym nawet, że lepiej niż na starych bibliotekach, co zapewne jest zasługą RTOS-a (różne procesy wykonują się równolegle i np. stos TCP/IP nie łapie przestoju, gdy inny proces utyka w jakiejś dłuższej pętli).
Dzisiaj jednak kilkukrotnie zaobserwowałem dziwną awarię: komunikacja po sieci wykrzaczyła się zupełnie. Płytka przestała odpowiadać na pingi, nie mogłem się dostać do webUI, również kod kliencki na MCU przestał otrzymywać dane z internetu. W momencie wystąpienia awarii dioda ACT na gniazdku Ethernetowym zaczęła się świecić cały czas. Co więcej - parę razy awaria spowodowała wykrzaczenie się komunikacji po Ethernecie na wszystkich urządzeniach podpiętych do tego samego routera! Nie był to jednak całkowity zawias - ciągle mogłem wydawać polecenia w konsoli UART i otrzymywałem sensowne odpowiedzi.
Raczej nie jest to wina sprzętu, bo na starym sofcie (biblioteki MLA) płytka była testowana miesiącami i zawsze działała stabilnie. Taki problem nigdy nie wystąpił. Odnoszę też wrażenie, że prawdopodobieństwo wystąpienia awarii jest silne skorelowane z ilością przesyłanych danych
- problem występował zawsze podczas odtwarzania streamu audio z sieci (radio internetowe po HTTP). Chociaż ta hipoteza musi jeszcze zostać przetestowana, to na razie urządzenie działa odtwarzając lokalne pliki i problem jeszcze nie wystąpił.
Ktoś ma jakąś hipotezę? Gdzie szukać potencjalnej przyczyny?