• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

RTL00 MP3 player

pvvx

Активный участник сообщества
cygwin лучше потому что он полностью эмулирует линукс окружение.
msys ущербен потому что это попытка скрестить ежа с ужом.

в амебовских мэйкфайлах проверяют наличие cygwin.
Дело привычки и к проекту не относится.
Предлагаете стереть совсем make файлы на git?
Обычно их не дают вообще...
У кого-то стоит UDK для ESP8266, у кого msys для ESP-32S... У вас cygwin, у других Ubuntu и т.д.
И если предлагаете cygwin - то и готовый майк прикладывайте. Мелкие коменты, что какая-то команда не пашет у вас с текущим make не интересуют. На это тут принято говорить - у вас Arduino не той версии :)
 
Последнее редактирование:

nikolz

Well-known member
cygwin лучше потому что он полностью эмулирует линукс окружение.
msys ущербен потому что это попытка скрестить ежа с ужом.

в амебовских мэйкфайлах проверяют наличие cygwin.
Нашел ответ, почему cygvin хуже:
Несмотря на то, что можно использовать Windows API, с помощью Cygwin, вы все еще привязаны к Cygwin DLL с его лицензией GPL, что ограничивает распространение программного обеспечения, скомпилированные с ним. MinGW не накладывает таких ограничений на распространение программного обеспечения. MSVC так же создает зависимость от среды выполнения Microsoft, которая является большим, тяжелым и не распространяемым.

Сам Cygwin использует MinGW для компиляции Cygwin DLL, которые, очевидно, не может зависеть от Cygwin. Поэтому без MinGW, Cygwin должна быть составлена с несвободным компилятором.

Кроме того, приложения работают быстрее без POSIX-эмуляции накладных расходов, а в некоторых случаях, внедряющих Cygwin DLL в существующее приложение может вызвать конфликты с родными функциями одного и того же имени, что может вызвать приложение, чтобы стать нестабильной. Поэтому составление расширений приложений, компоненты и библиотеки DLL с MinGW могут быть безопаснее, чем использование Cygwin.

Из всех составителей / C ++, которые могут построить Open Source на Windows, C, MinGW является единственным реальным выбором для платформы в это время. В сочетании с MSYS, это единственная система, которая может обрабатывать GNU стиль строительных инструментов для того, чтобы получить более общие приложения Open Source для компиляции и сборки.
 

aloika

Active member
Попытался соединить два проекта от pvvx в единого франкенштейна - сделать MP3 радио с web-мордой. Наивно пробовал на RTL00, т.е. на RTL8710. В конечном итоге всё собралось и прошилось нормально. "Заработало" только в варианте "моно", wi-fi только в режиме станции, но всё равно странички не открываются - веб-сервер пишет, что не хватает heap. Если вай-фай переключить в ap+sta, то тред плеера отключается по этой же причине.

Интересно, заработает ли это дело на RTL8711AM?
 

pvvx

Активный участник сообщества
Попытался соединить два проекта от pvvx в единого франкенштейна - сделать MP3 радио с web-мордой. Наивно пробовал на RTL00, т.е. на RTL8710. В конечном итоге всё собралось и прошилось нормально. "Заработало" только в варианте "моно", wi-fi только в режиме станции, но всё равно странички не открываются - веб-сервер пишет, что не хватает heap. Если вай-фай переключить в ap+sta, то тред плеера отключается по этой же причине.
Для полноценной работы web-сервера с LwIP необходимо от 200 КБ свободной RAM (не учитывая статические буфера для WiFi и прочие занятые объемы самой SDK). Иначе надо вводить ограничения по кол-ву одновременно открытых соединений и файлов, что приведет к ошибкам в браузерах, если их корректно не описать - отдавать спец ответы...
Интересно, заработает ли это дело на RTL8711AM?
Если правильно распределите буфера DMA для i2s и кода частей декодера MP3 в область SRAM, а сетевые буфера в SDRAM. Иначе не хватает пропускной способности SDRAM, внутренних шин Cortex M3 для вывода в два канала по i2s на максимуме полосы для эмуляции PWM 192 кГц по DMA с одновременной работой декодека и прочих буферов.
Зачем данной реализации проигрывателя вообще web? Одного открытого сокета достаточно для управления списком проигрывания станций с телефона, а с внешнего MCU достаточно и UART. Прикрутите к этому проигрывателю малый TFT в rtlDuino и пару кнопок... Это влезет и в модуль RTL-00 и копаться в SDK даже не надо, для поиграться - хватит стандартных примеров в rtlDuino...
 
Последнее редактирование:

shaman1010

Member
RTL00.
Скомпилированный тестовый вариант в консоль говорит так:

Код:
MP3: Connect url: icecast.omroep.nl/3fm-sb-mp3:80
FIFO: Alloc 16384 bytes at 0x100568b8
MP3: Connecting to server 145.58.53.158...
HTTP/1.0 200 OK
Content-Type: audio/mpeg
Date: Sun, 18 Feb 2018 17:02:50 GMT
icy-br:96
ice-audio-info: samplerate=48000;channels=2;bitrate=96
icy-br:96
icy-genre:pop
icy-metadata:1
icy-name:NPO 3FM
icy-pub:0
icy-url:MUSIC STARTS HERE
Server: Icecast 2.4.0-kh8
Cache-Control: no-cache, no-store
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Origin, Accept, X-Requested-With, Content-Type
Access-Control-Allow-Methods: GET, OPTIONS, HEAD
Connection: Close
Expires: Mon, 26 Jul 1997 05:00:00 GMT
FIFO: Start Buffer fill 8232
[I2S  Wrn]I2S0 Pin may conflict with JTAG
I2S0: Alloc DMA buf 12288 bytes (4 x 384 samples 96 bits)
I2S1: Alloc DMA buf 12288 bytes (4 x 384 samples 96 bits)
MAD: Alloc 15546 bytes at 0x10060e10
MAD: Decoder start.
MAD: Dec err 0x0235 (bad main_data_begin pointer)
MAD: Dec err 0x0235 (bad main_data_begin pointer)
MAD: Rate 48000, channels 2
I2S: Set Sample Rate 96000 (x1)
Dec err 0x0235, воспроизведение, естественно, не начинается.
Смущает такой порядок:
Код:
Connection: Close
[I2S  Wrn]I2S0 Pin may conflict with JTAG
MAD: Decoder start.
MAD: Dec err 0x0235 (bad main_data_begin pointer)
Т.е. соединение закрывается раньше, чем декодер его подхватывает?
Что не так? (компилирую гит-овский пример, без изменений)
 
Последнее редактирование:

pvvx

Активный участник сообщества
Т.е. соединение закрывается раньше, чем декодер его подхватывает?
Что не так? (компилирую гит-овский пример, без изменений)
Никто не закрывается. Это просто информация о том что в текущий момент:
MP3: Connection closed.
FIFO: Closed.

Затем идет: MP3: Connect url: icecast.omroep.nl/3fm-sb-mp3:80
Лечить декодек не собираюсь. На стандартных MP3 он как-то пашет. Далее покупайте лицензию на MP3 и вперед...

Вот проверил, написав батник:
Код:
git clone git@github.com:pvvx/RTL00MP3.git
cd RTL00MP3
set FLASHER_TYPE=cmsis-dap
mingw32-make.exe -s -j 32
mingw32-make.exe -s flashburn
Залилось в плату Creator Pro от RAK и играет...
Установки соединения WiFi в модуле уже были...
---------------
Написал вывод звука по DMA на RTL8710BN в PWM выходы... Позволяют выдавать DSD в 40 МГц :)
А дальше вот стыковать это всё лень... Не нужен мне проигрыватель MP3 инет-радио.
 
Последнее редактирование:

shaman1010

Member
Залилось в плату Creator Pro от RAK и играет...
Так я даже не сомневаюсь :)
Скиньте полученный ram_all.bin , пожалуйста. Начну с простого - проверю, играет ли у меня готовый вариант.

Написал вывод звука по DMA на RTL8710BN в PWM выходы... Позволяют выдавать DSD в 40 МГц :)
А дальше вот стыковать это всё лень... Не нужен мне проигрыватель MP3 инет-радио.
Ваш подход понятен :)
Squeeze player на RTL, кроме Вас вряд ли кто-то сможет поднять, а для осознанного копания в слабоописанном железе нужен либо огромный опыт, либо терпеливый наставник. Но в текущих реалиях - это два ненавидящих друг друга индивидума :)
Куда обращаться для ввинчивания РАССОРТИРОВАННОЙ информации? Если не будет тех, кому интересно передавать опыт здесь - все головы разбегутся в китай, а оттуда будут нам продавать свои творения. Так к одноразовым штамповкам окончательно и перейдем.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Так я даже не сомневаюсь :)
Скиньте полученный ram_all.bin , пожалуйста. Начну с простого - проверю, играет ли у меня готовый вариант.
Ещё есть пример в rtlDuino :) Но я туда давно не лазал и не обновлял.
Для RTL00 частота в 166 MHz не всегда годится (разные пересчеты внутренних CLK там), а прошивка с опцией 166 МГц для модулей с более толстыми CPU. И вообще там всё криво и косо, т.к. это пример на "скорую руку" - целью была проверка потянет или нет, ответ получен и никакого дальнейшего сопровождения проект MP3 не предусматривает. Жду героев желающих заняться ублажением потребителей - отдам всё :)
 

Вложения

Последнее редактирование:

shaman1010

Member
Для RTL00 частота в 166 MHz не всегда годится (разные пересчеты внутренних CLK там), а прошивка с опцией 166 МГц для модулей с более толстыми CPU. И вообще там всё криво и косо...
Последнюю часть процитированного я понимаю :)
Сейчас залил Ваш .bin, из-под винды, вашим-же флешером и результат не изменился :)
Код:
MAD: Decoder start.
MAD: Dec err 0x0235 (bad main_data_begin pointer)
Т.е. это говорит о том, что бяка есть в другой части памяти, которая как-то затрагивается дополнительно.
У меня модуль RTL00 на платке с ch340 и разноцветным светодиодиком, т.е. самая распространенная. Бэкап фуллфлеша и калибровок есть. Очищал весь мегабайт и перезаливал заново туда-сюда. Результат всегда одинаковый - не играет. Т.е. вкрадывается впечатление, что версия ROM другая, и чего-то там по-другому устроено...
 

pvvx

Активный участник сообщества
Последнюю часть процитированного я понимаю :)
Сейчас залил Ваш .bin, из-под винды, вашим-же флешером и результат не изменился :)
Код:
MAD: Decoder start.
MAD: Dec err 0x0235 (bad main_data_begin pointer)
Т.е. это говорит о том, что бяка есть в другой части памяти, которая как-то затрагивается дополнительно.
У меня модуль RTL00 на платке с ch340 и разноцветным светодиодиком, т.е. самая распространенная. Бэкап фуллфлеша и калибровок есть. Очищал весь мегабайт и перезаливал заново туда-сюда. Результат всегда одинаковый - не играет. Т.е. вкрадывается впечатление, что версия ROM другая, и чего-то там по-другому устроено...
Перепишите 9-й и 10-й сектор установок.
----
Достал макетку с RTL00 и FT2232 (2xCOM), воткнул в разъем оригинальный J-link.
Запустил JLink-RunRAM.bat.
Код:
===== Enter SRAM-Boot 1 ====
CPU CLK: 83333333 Hz, SOC FUNC EN: 0x20011113
Img Sign: RTKWin, Go @ 0x10006085
===== Enter Image: MP3 Stereo ====
WdgPeriod = 10000 ms
CLK CPU         83333333 Hz
RAM heap        117672 bytes
TCM heap        64768 bytes
RTL8195A[Driver]: port switch - port0(wlan2), port1(wlan1)
SoftAP ip: 192.168.4.1
MP3: Connect url: icecast.omroep.nl/3fm-sb-mp3:80
FIFO: Alloc 16384 bytes at 0x10057920
RTL8195A[Driver]: set ssid [---del----------
RTL8195A[Driver]: start auth to ---del-----------
RTL8195A[Driver]: auth success, start assoc
RTL8195A[Driver]: association success(res=3)
RTL8195A[Driver]: set pairwise key to hw: alg:4(WEP40-1 WEP104-5 TKIP-2 AES-4)
RTL8195A[Driver]: set group key to hw: alg:4(WEP40-1 WEP104-5 TKIP-2 AES-4) keyid:1
Station ip: 192.168.1.122
MP3: Connection closed.
FIFO: Closed.
MP3: Connect url: icecast.omroep.nl/3fm-sb-mp3:80
FIFO: Alloc 16384 bytes at 0x10057920
[HEAP Wrn]tcm_alloc(4104) - freeSpace(816)!
MP3: Connecting to server 145.58.53.156...
HTTP/1.0 200 OK
Content-Type: audio/mpeg
Date: Sun, 18 Feb 2018 20:58:53 GMT
icy-br:96
ice-audio-info: samplerate=48000;channels=2;bitrate=96
icy-br:96
icy-genre:Pop
icy-metadata:1
icy-name:NPO 3FM
icy-pub:0
icy-url:http://www.3fm.nl
Server: Icecast 2.4.0-kh8
Cache-Control: no-cache, no-store
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Origin, Accept, X-Requested-With, Content-Type
Access-Control-Allow-Methods: GET, OPTIONS, HEAD
Connection: Close
Expires: Mon, 26 Jul 1997 05:00:00 GMT
FIFO: Start Buffer fill 8232
[HEAP Wrn]tcm_alloc(8408) - freeSpace(6208)!
[I2S  Wrn]I2S0 Pin may conflict with JTAG
I2S0: Alloc DMA buf 12288 bytes (4 x 384 samples 96 bits)
I2S1: Alloc DMA buf 12288 bytes (4 x 384 samples 96 bits)
MAD: Alloc 15546 bytes at 0x10065160
MAD: Decoder start.
MAD: Dec err 0x0235 (bad main_data_begin pointer)
MAD: Rate 48000, channels 2
I2S: Set Sample Rate 96000 (x1)
Поет и пляшет.

Может у вас там БП не тянет средние 75 мА 3.3В при MP3 в WiFi=STA ? :)
 
Последнее редактирование:

shaman1010

Member
Достал макетку с RTL00 и FT2232 (2xCOM), воткнул в разъем оригинальный J-link.
Запустил JLink-RunRAM.bat.
Код:
MAD: Decoder start.
MAD: Dec err 0x0235 (bad main_data_begin pointer)
Поет и пляшет.
Точно?
Тогда по подключению - на гите GC2 и GE2 через килоомники на спикер. Все верно?

p.s. не верно :) Нужен еще какой-никакой усилитель.
Только ножками с килоомниками, оказывается, еле заметно что-то там играет. Тогда вопрос снимаю. Играет, только очень тихо, т.е. мелкодинамик не осилит, если использовать по указанной схеме.
 
Последнее редактирование:

pvvx

Активный участник сообщества
Точно?
Тогда по подключению - на гите GC2 и GE2 через килоомники на спикер. Все верно?
Для теста я втыкаю прямо к GPIO проводом на вход в разъем на мамке указав что это "линейный вход" :)
Но без резисторов там перебор уровня сигнала на обычных "sound", но "играет" :)
Конденсатор не нужен - у Sound всё встроено - свой входной фильтр обязан быть...
p.s. не верно :) Нужен еще какой-никакой усилитель.
Только ножками с килоомниками, оказывается, еле заметно что-то там играет. Тогда вопрос снимаю. Играет, только очень тихо, т.е. мелкодинамик не осилит, если использовать по указанной схеме.
Ну а как на динамики то играть с GPIO? :eek:
На наушники от телефона работает прямо с GPIO, хотя они и 32 Ом :)
 
Последнее редактирование:

shaman1010

Member
Написал вывод звука по DMA на RTL8710BN в PWM выходы... Позволяют выдавать DSD в 40 МГц :)
А дальше вот стыковать это всё лень... Не нужен мне проигрыватель MP3 инет-радио.
АЦП и wifi успеют выпихнуть входящий аналоговый сигнал в DSD (40MHz) через WiFi?
На сколько ориентировочно загрузится (перегрузится :) ) 8710B при таком варианте? И что при этом будет с потреблением?
 

pvvx

Активный участник сообщества
АЦП и wifi успеют выпихнуть входящий аналоговый сигнал в DSD (40MHz) через WiFi?
На сколько ориентировочно загрузится (перегрузится :) ) 8710B при таком варианте? И что при этом будет с потреблением?
Не потянет WiFi такой поток. Это 40 Мбит.
 

pvvx

Активный участник сообщества
В 8710BN вроде бы 150Мбит (при 40 полосе), и 75 при 20. С учетом накладных по идее даже в узкую пролезает. Или как?
150 - это скорость PHY WiFi части. Совсем не к теме битовой скорости отправляемых и получаемых данных.
TCP в пределе на RTL в ~1.6 Мегабайт в сек. UDP чуть более. Но постоянно то как, если в сети есть другие устройства?
На многоантенках народ жалуется что телек только в пару метров при WiFi 5ГГц кажет что-то более менее из сжатого видео, а его битрейт то меньше...
Официальная заява такая:
Снимок106.gif
 
Последнее редактирование:

shaman1010

Member
150 - это скорость PHY WiFi части. Совсем не к теме битовой скорости отправляемых и получаемых данных.
В UDP там накладных минимум, т.е. практически к теме битовой скорости.
TCP в пределе на RTL в ~1.6 Мегабайт в сек.
Понятно где горлышко :)
На многоантенках народ жалуется что телек только в пару метров при WiFi 5ГГц кажет что-то более менее из сжатого видео, а его битрейт то меньше...
Яблоко на узкой полосе в 2.4 прокачивает 100-ню мбит/с полезного битрейта.
Но про BN понял. Тогда задача с прикладной точки зрения интересная была у Вас :)
 

pvvx

Активный участник сообщества
Яблоко на узкой полосе в 2.4 прокачивает 100-ню мбит/с полезного битрейта.
Ну любой современный low-end роутер WiFi ныне 350 mbit. Что-то фигово у вас с яблоками - откусано на понты много? :)
В UDP там накладных минимум, т.е. практически к теме битовой скорости.
Там не накладных, а потерь много. TCP - это дуплекс трафик, UDP - в одну сторону. Пока переключится прием/передача с одной антенной то... Вот в TCP переключений больше и ещё TCP стек...
 
Последнее редактирование:

shaman1010

Member
Ну любой современный low-end роутер WiFi ныне 350 mbit. Что-то фигово у вас с яблоками - откусано на понты много? :)
Ну там же 20Mhz - откуда 350Mbit - ? :) За понты там откушено относительно немного + хорошая оптимизация производственных процессов :) С сетевым стеком стабильней unix-а никто не работает :) Дык что - когда начинали, начинали с подобного Вам подхода - выдавить из железки максимум и заставить ее работать круглосуточно без внешнего вмешательства. До 15-го года по накатанной это еще как-то дотянулось. Сейчас "ардуинщики" многое портят, а былые профи решают прикладные задачи, интересные для их собственного эго. :)

Там не накладных, а потерь много. TCP - это дуплекс трафик, UDP - в одну сторону. Пока переключится прием/передача с одной антенной то... Вот в TCP переключений больше и ещё TCP стек...
Зачем каналу АЦП->DSD->WiFI Дуплекс? :) TCP/UDP по потребности, но дуплекс в однонаправленном канале...
 

pvvx

Активный участник сообщества
Зачем каналу АЦП->DSD->WiFI Дуплекс? :) TCP/UDP по потребности, но дуплекс в однонаправленном канале...
Вы ответ сами написали в начальной части своего сообщения.
UDP уж очень сильно выпадает на WiFi. И тем более WiFi без разницы UDP или TCP. Там свой транспортный протокол - 802.11...
Разница есть в кол-ве антенн. Есть WiFi-SoC с 1.5 антенны :) Одна на передачу, вторая на прием. Они и то быстрее.
Немного конкретнее в теме Куда уходят udp пакеты?
А уходят они в Ардуино и её подход, разбивший все связи между дровами WiFi и LwIP к примеру... :)
И Unix - это теоретическая ОС, которая далека от практики и никогда не сможет быть реализована. Ну как виртуальный Бизон Хигса. :) Всю жизнь писать и никогда не потрогать.
"Вынь-да" на этом и выигрывает - что могем слепить то и будет.
 
Последнее редактирование:
Сверху Снизу