• Система автоматизации с открытым исходным кодом на базе 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 - это теоретическая ОС, которая далека от практики и никогда не сможет быть реализована. Ну как виртуальный Бизон Хигса. :) Всю жизнь писать и никогда не потрогать.
"Вынь-да" на этом и выигрывает - что могем слепить то и будет.
 
Последнее редактирование:
Сверху Снизу