Потихоньку пилю вебморду к VS1053 и ловлю баги в
драйвере. Пока все получается и даже играет не хуже KaRadio. После прикручивания сервера пришлось распрощаться с 320Kbps - иногда подлагивает. Есть пару идей как ускорить заполнение кольцевого буфера, но времени катастрофический не хватает.
страница Codec Settings
страница Codec Info
UDP: Поднял мощность передатчика с +10dBm/10mW до +13dBm/20mW и 320Kbps заиграло лучше. Видно из-за загруженного эфира терялись пакеты.
UDP: Just for fun разогнал VS1053 с 55MHz до 61.44MHz и оно заработало. Частота SPI шины на передачу аудио потока увеличилась с 10MHz до 15MHz. Можно дальше говонокодить и пока забить на оптимизацию.
UDP: Добавил графики кольцевого буфера в ESP8266 против VS1053. Типичная картина приема 320kbps mp3 при хорошем WiFi - у VS1053 небольшие провалы до 990 байт. Потом что-то случается на стороне ESP8266 и оба буфера опустошаются меньше чем за секунду. Разгон ESP8266 с 80MHz до 160MHz проблему не решают. Имхо затык на стороне web станции, но это не точно. Может буфер мал? Я и так отгрыз у ESP8266 все что можно (ESP8266 плющит если heap меньше 12KB). С 250kbps mp3 такого пока не наблюдается. Если отключить сон радио модема, который в Arduino включен по умолчанию, ситуация улучшается. Провалы в 990 байт случаются реже. Ничего не понимаю.
VS1053 FIFO vs ESP8266 ring buffer
UDP: Кажется понял почему ESP8266 буфер резко опустошался. Все машинное время было занято на передачу в VS1053 и второму SDK/WIFI стеку (который у Arduino крутится в фоне) не хватало время заполнить IwIP TCP MSS/TCP WND буфера.
UDP: Пообщался с умными людьми. Подсказали использовать IwIP v1.4. С ним действительно стабильнее на 320kbps и больше свободного heap. Перенес весь код драйвера VS1053 отвечающий за наполнение буфера в IRAM. В место digitalRead() и digitalWrite() стал писать в регистры ESP8266 на прямую. Можно пробовать прикрутить экран. Пока на 320kbps получилось вот так: