Ok, przysiadłem jeszcze do tego projektu i udało mi się ustalić kilka kolejnych faktów:
- Byłem w błedzie co do pamięci SPI RAM. Z cała pewnością NIE JEST za wolna, żeby pełnić funkcję bufora. Przepisałem kod odpowiedzialny za odtwarzanie plików tak, żeby kierował dane z karty SD przez bufor cykliczny w tym zewnętrznym RAM-ie. Odtwarzanie jest całkowicie płynne. Oczywiście w teorii taki duży bufor w tym przypadku nie jest mi do niczego potrzebny, bo zarówno karta SD jak i pendrive są zupełnie stabilnymi źródłami danych, ale zostawię to jak jest - dla uproszczenia projektu.
- Przeniesienie bufora w całości do pamięci SPI pozwoliło mi odzyskać trochę wbudowanego RAM-u, którego część przeznaczyłem na powiększenie buforów lwIP. Robiłem to na wyczucie, wiec nadal nie wiem czy konfiguracja jest optymalna. Wygląda jednak na to, że sytuacja się poprawiła. Teraz jestem w stanie w czasie prawie rzeczywistym odtwarzać stream Radia Kraków w 32 kbps. "Prawie" bo raz na jakiś czas słychać zgrzyt.
- Natomiast stacje nadające w normalnej jakości (stereo i bitrate powyżej 100 kbps) są już potwornie poszatkowane.
Ponieważ odtwarzanie z karty SD przez bufor SPI RAM działa normalnie to wszystko wskazuje na to, że wina leży po stronie wolnej transmisji danych z Internetu. Nie chce mi się wierzyć, że wbudowany w STM32 FastEthernet MAC z PHY podłączonym przez RMII nie jest w stanie wyciągnąć tych trochę ponad 100 kbps (i z trudem wyciąga 32kbps). Zwłaszcza, że właściwie identyczny układ bez żadnych problemów działa na wcześniejszej konstrukcji z PIC32. Stawiałbym raczej na konfigurację stosu lwIP. Gdzie się będzie dało spróbuję jeszcze odzyskać w tym projekcie trochę RAM-u. Tymczasem ktoś mógłby mi może podpowiedzieć które opcje konfiguracyjne są najbardziej kluczowe z punktu widzenia odbierania streama audio? Co mogę wyłączyć, które wartości powinienem poddnieść, a które mogę zmniejszyć?
Jeśli projekt doczeka się kiedyś kolejnej iteracji to chyba już na jakimś STM32F4xx, o ile kiedyś znów będą dostępne w normalnych cenach. :)