Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

RTL00 MP3 player

Тема в разделе "Realtek - SDK, прошивки и утилиты", создана пользователем pvvx, 13 окт 2016.

  1. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.097
    Симпатии:
    1.303
    Тестовая прошивка RTL00 MP3 player V004 STEREO.
    GitHub - pvvx/RTL00MP3: RTL00(RTL8710AF) Test MP3
    Так-же уже есть пример для Arduino Arduino для RTL8710.
    Код (Text):
    1. # help
    2. WLAN AT COMMAND SET:
    3. ==============================
    4. Set MP3 server
    5.         # ATWS=URL,PORT
    6.         Sample: ATWS=icecast.omroep.nl/3fm-sb-mp3,80
    7.                 ATWS=meuk.spritesserver.nl/Ii.Romanzeandante.mp3,80
    8.                 ATWS=?, ATWS=close, ATWS=save, ATWS=read
    9. Connect to an AES AP
    10.         # ATW0=SSID
    11.         # ATW1=PASSPHRASE
    12.         # ATWC
    13. DisConnect AP
    14.         # ATWD
    Если задать ATWS=x,0 и ATWS=save, то при старте (соединении с AP) не будет запускать MP3.
    ATST - Mem/Task Info
    Пример лога (раскрыть)
    Код (Text):
    1. #ATST
    2.  
    3. CLK CPU         200000000 Hz
    4. RAM heap        22960 bytes
    5. RAM free        5792 bytes
    6. TCM heap        408 bytes
    7. TCM ps_monitor  764 bytes
    8. RAM Heap Memory List:
    9.  [0]=0x0x100522ec, 0
    10.  [1]=0x0x10003010, 1984
    11.  [2]=0x0x10059820, 272
    12.  [3]=0x0x1006af18, 20704
    13. TCM Free List:
    14.  prev 100524e0, chunk 1fff5454, size 408
    15.  
    16. CPU total run time is 105192
    17. TaskName        DeltaRunTime    percentage
    18. log_servi               0               <1%
    19. tskmad          160             16%
    20. IDLE            810             81%
    21. Tmr Svc         0               <1%
    22. TCP_IP          0               <1%
    23. rtw_xmit_               0               <1%
    24. cmd_threa               0               <1%
    25. rtw_check               0               <1%
    26. rtw_littl               0               <1%
    27. tskreader               0               <1%
    28. rtw_inter               0               <1%
    29. rtw_recv_               10              1%
    30. log_uart                0               <1%
    31. rtw_TDMA_               0               <1%
    32.  
    33. [MEM] After do cmd, available heap 22960+408

    ATOF - Отключить MP3
    ATSD - Damp памяти/регистров с адреса...
    ATWD - Записать dword по адресу

    PWM(2 канала по 96Bit на sample 48 кГц) выход на GC_2 и PE_2
    RTL00_MP3_SCH.gif

    Запись с выхода OUT1/2 на саунд в комп fm3.wma для примерной оценки качества выхода и прямая ссылка на станцию http://icecast.omroep.nl/3fm-sb-mp3 ...
    О`-да: Kak прошить в Windows c Jlink:
    1) распаковать RTL00Flasher.zip в каталог JLink_Vxxx, где находится JLinkARM.dll.
    2) Соединить Jlink и запустить RTL00Flasher.exe
    3) Выбрать Write Flash -> Auto -> Write Flash, файл ram_all.bin...
    wrflash.gif


    Начало положил kissste -> GitHub - kissste/rtl8710_mp3_decoder: mp3 decoder and webradio for boards with RTL8710, RTL8711 and RTL8195 chips
     

    Вложения:

    Последнее редактирование: 1 авг 2017
    powar и kissste нравится это.
  2. 12345

    12345 Новичок

    Сообщения:
    27
    Симпатии:
    0
  3. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.097
    Симпатии:
    1.303
    Очень хорошо - у кого антивирус Bkav, то не скачают и не смогут собрать или использовать Borland Delphi :)
    http://esp8266.ru/forum/threads/kto-dodelaet-flasher-dlja-rtl00-c-jlinkarm-dll.1639/
    Остальным, больше повезет, если антивирус из этого списка:
    ALYac AVG AVware Ad-Aware AegisLab AhnLab-V3 Alibaba Antiy-AVL Arcabit Avast Avira (no cloud) Baidu
    BitDefender CAT-QuickHeal CMC ClamAV Comodo CrowdStrike Falcon (ML) Cyren DrWeb ESET-NOD32 Emsisoft F-Prot 20161014
    F-Secure Fortinet GData Ikarus Invincea Jiangmin K7AntiVirus K7GW Kaspersky Kingsoft Malwarebytes
    McAfee McAfee-GW-Edition eScan Microsoft NANO-Antivirus Panda Qihoo-360
    Rising SUPERAntiSpyware Sophos Symantec Tencent TheHacker TrendMicro
    TrendMicro-HouseCall VBA32 VIPRE ViRobot Yandex Zillya Zoner nProtect
     
  4. goodwin

    goodwin Читатель

    Сообщения:
    123
    Симпатии:
    22
  5. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.097
    Симпатии:
    1.303
    Там, у 12345, скорее всего вирус в компе и заражает все exe файлы при записи (открытии архива) :)
    ---
    Заодно обновил файлы в шапках...
     
    Последнее редактирование: 14 окт 2016
  6. 12345

    12345 Новичок

    Сообщения:
    27
    Симпатии:
    0
    I will try ... I have some RTL8711AF modules and I don't know if it has firmware inside the flash or the condition of e-fuse. Do you know if RTL8710 and RTL8711AF IC have the same pinout? How people manage the missing SDRAM on this devices like this ones since it apear that the current sdk toolchain need SDRAM áreas? Sorry I can not speak russian!
     
  7. kissste

    kissste Читатель

    Сообщения:
    51
    Симпатии:
    16
    RTL8711AF does not have external SPI RAM,
    only RTL8711AM does.

    This MP3 decoder is not using external SPI RAM. The code allocates 50K of internal RAM as a buffer.

    I think, RTL8711AF will work just perfectly fine with this code.
    RTL8711AM - I don't know. It might be OK too, depends on how seamlessly the chip handles the external SPI RAM, or whether it still does have in internal RAM too.
     
  8. 12345

    12345 Новичок

    Сообщения:
    27
    Симпатии:
    0
    I will take a look on this in the next weeks by now too busy here!
     
  9. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.097
    Симпатии:
    1.303
    Oversampling x2:
    code (раскрыть)
    Код (C):
    1.  
    2. static char oversampling;
    3. void set_dac_sample_rate(int rate) {
    4.     if (rate==oldRate) return;
    5.     oldRate=rate;
    6.     DBG_8195A("Rate %d\n", rate);
    7. #ifdef ALLOW_VARY_SAMPLE_BITS
    8.     oversampling = i2sSetRate(rate, 0);
    9. #else
    10.     oversampling = i2sSetRate(rate, 1);
    11. #endif
    12. }
    13.  
    14. // Change "playerconfig.h": char i2sSetRate(int rate, int lockBitcount); (!)
    15.  
    16. char i2sSetRate(int rate, int lockBitcount) {
    17.  
    18.     int sample_rate = SR_96KHZ;
    19.     char result = 0;
    20.  
    21.     if (rate<=48000) {
    22.         rate <<= 1;
    23.         result = 1;
    24.     }
    25.     if (rate>=88200) sample_rate = SR_88p2KHZ;
    26.     else if (rate>=48000) sample_rate = SR_48KHZ;
    27.     else if (rate>=44100) sample_rate = SR_44p1KHZ;
    28.     else if (rate>=32000) sample_rate = SR_32KHZ;
    29.     else if (rate>=24000) sample_rate = SR_24KHZ;
    30.     else if (rate>=22050) sample_rate = SR_22p05KHZ;
    31.     else if (rate>=16000) sample_rate = SR_16KHZ;
    32.     else if (rate>=11020) sample_rate = SR_11p02KHZ;
    33.     else if (rate>= 8000) sample_rate = SR_8KHZ;
    34.     else sample_rate = SR_7p35KHZ;
    35.  
    36.     i2s_obj.sampling_rate = sample_rate;
    37.    
    38.     i2s_set_param(&i2s_obj, i2s_obj.channel_num, i2s_obj.sampling_rate, WL_16b);
    39.  
    40.     DBG_8195A("ReqRate %d Sample Rate %d\n", rate, sample_rate);
    41.     return result;
    42. }
    Код (C):
    1. void render_sample_block(short *short_sample_buff, int no_samples) {
    2.     //Signed 16.16 fixed point number: the amount of samples we need to add or delete
    3.     //in every 32-sample
    4.     static int sampAddDel=0;
    5.     //Remainder of sampAddDel cumulatives
    6.     static int sampErr=0;
    7.     int i;
    8.     int samp;
    9.  
    10. #ifdef ADD_DEL_SAMPLES
    11.     sampAddDel=recalcAddDelSamp(sampAddDel);
    12. #endif
    13.  
    14.     sampErr+=sampAddDel;
    15.     for (i=0; i < no_samples; i++) {
    16.         static short old_smp;
    17.         short new_smp = short_sample_buff[i];
    18.         if(oversampling) old_smp = (old_smp + new_smp) / 2;
    19.         else old_smp = new_smp;
    20. #if defined(PWM_HACK)
    21.         samp = sampToI2sPwm(old_smp);
    22. #elif defined(DELTA_SIGMA_HACK)
    23.         samp = sampToI2sDeltaSigma(old_smp);
    24. #else
    25.         samp = sampToI2s(old_smp);
    26. #endif
    27.         //Dependent on the amount of buffer we have too much or too little, we're going to add or remove
    28.         //samples. This basically does error diffusion on the sample added or removed.
    29.         if (sampErr>(1<<24)) {
    30.             sampErr-=(1<<24);
    31.             //...and don't output an i2s sample
    32.         } else if (sampErr<-(1<<24)) {
    33.             sampErr+=(1<<24);
    34.             //..and output 2 samples instead of one.
    35.             i2sPushSample(samp);
    36.             i2sPushSample(samp);
    37.         } else {
    38.             //Just output the sample.
    39.             i2sPushSample(samp);
    40.         }
    41.         if(oversampling) {
    42. #if defined(PWM_HACK)
    43.             samp = sampToI2sPwm(new_smp);
    44. #elif defined(DELTA_SIGMA_HACK)
    45.             samp = sampToI2sDeltaSigma(new_smp);
    46. #else
    47.             samp = sampToI2s(new_smp);
    48. #endif
    49.             i2sPushSample(samp);
    50.             old_smp = new_smp;
    51.         }
    52.     }
    53. }
     
    Последнее редактирование: 14 окт 2016
  10. kissste

    kissste Читатель

    Сообщения:
    51
    Симпатии:
    16
    in i2s_freertos.c:
    if (rate<=48000 && lockBitcount) {
    #if defined(PWM_HACK) || defined(DELTA_SIGMA_HACK)
    rate <<= 1;
    result = 1;
    [HASHTAG]#endif[/HASHTAG]
    }

    I2S can't be oversampled
     
  11. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.097
    Симпатии:
    1.303
    # ATWS=meuk.spritesserver.nl,/Ii.Romanzeandante.mp3,80
    Waiting for network.
    Connecting to server 136.243.91.246...
    FIFO: alloc 16384 bytes at 0x10059df8
    I2S: alloc DMA buf 12288 bytes (4 x 768 samples)
    MAD: alloc 15546 bytes at 0x10062ee0
    MAD: Decoder start.
    Rate 22050
    Set Sample Rate 88200 (x3)
    (<-- Auto-Oversampled xN)
    Ещё немного покопал проект. Частично восстановил MAD - из static обратно в malloc... Общий объем кода сократился, heap > 100к. Добавил flash_eep.c... , ... , ...
    Всё там-же rtl00MP3.zip

    В принципе, RTL8710 потянет и stereo на простейший I2S DAC.

    Не понятно зачем вообще к ESP8266 подключали внешнюю SPIRAM?
    На RTL8710 при 166MHz и Delta-Sigma выходе (самым жручим ресурс CPU) работает и с буфером FIFO в 2..4 килобайта (т.е. только для видимости что есть буфер, чтобы сильно не менять код - у самого MAD внутренний буфер больше, да у TCP socket в RTL буфер тоже не хилый :) ) и с DMA буферами 4x на 2 ms для I2S. Всё успевает без проблем.

    С выключенным MP3 ("ATOF" - новая команда, будет в следующей версии...) ресурсы такие:
    CLK CPU 83333333 Hz
    RAM heap 95448 bytes
    RAM free-stack 1532 bytes
    TCM heap 2648 bytes
    RAM Heap Memory List:
    [0]=0x0x10050e08, 0
    [1]=0x0x10002358, 5208
    [2]=0x0x10059470, 360
    [3]=0x0x10059990, 89880
    TCM Free List:
    prev 10050ff0, chunk 1fff5454, size 2648

    TCM free-stack 1452 bytes
    Можно переводить MP3 в overlay версию (подгружать по мере необходимости из Flash в RAM), тогда высвободится ещё сотня килобайт... В исходной версии, из ESP8266, все буфера и структуры static - нет возможности выгрузки или перезапуска. Перезапуск починил, от кривизны внесенной Espressif, но не совсем на 100% - остались ещё какие-то ошибки в MAD...
     
    Последнее редактирование: 21 окт 2016
    kissste нравится это.
  12. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.097
    Симпатии:
    1.303
    Запустил два канала I2S - вышло Stereo... :eek: (прошивка в первом сообщении темы.)
    ----
    Нашелся режим у I2S якобы 24 бита stereo, на самом деле битрейт 96000*64 - 2x 32 бита (stereo)... Частота вывода битов 6.144 MHz - в два раза выше, чем у WL_16b (2x 16 бит stereo). Можно ещё в два раза oversample....
    На 48k поток MP3 (на канал) приходится 128 бит на sample. И два канала I2S для stereo - RTL тянет нормально - проверил, надо нормально вписать...

     
    Последнее редактирование: 23 окт 2016
    Victor нравится это.
  13. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.097
    Симпатии:
    1.303
    Как-то это всё работает. Пора наводить порядок в проекте...

    Вход звуковой карты компа соединен двумя 'проводочками' к модулю :) , кое как, gnd идет через USB и Jlink - все шумы процессора слышно... :)
    Видео, чтобы сравнить скорость загрузки RTL00 "всей прошивки" с тормозом ESP8266 и скорости старта стандартного SDK с соединением к AP...
    Отладкой практически не пользуюсь - быстрее исправить в коде и перезагрузить в RTL...
     
    Последнее редактирование: 23 окт 2016
  14. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.097
    Симпатии:
    1.303
    При уточнении вышло, что I2S на RTL может выдавать максимальный channel stream 48000*96 bits (для стандартных каналов MP3 трансляции с потоком ice-audio-info: bitrate=96 stereo).
    Пока прошивка в процессе переработки драйвера... Старые версии - это просто проверка и качество выхода там не рассматривалось - изучался только максимальный bitrate для PWM или других вариантов и какую нагрузку потянет CPU. Ограничение вышло в аппаратной части I2S - больше 96к на 2x24 bit не выдает, хотя CLK 96k*64. Ресурсы CPU ещё есть, свободной RAM ещё много...
    -------
    Драйвер переписан. Вывод - Ok.
    Насчет ресурсов во время проигрывания:
    Код (Text):
    1. # ATST
    2. CLK CPU         166666666 Hz
    3. RAM heap        13528 bytes
    4. RAM free-stack  5416 bytes
    5. TCM heap        2648 bytes
    6. RAM Heap Memory List:
    7. [0]=0x0x100515d0, 0
    8. [1]=0x0x10003010, 1984
    9. [2]=0x0x1005a078, 160
    10. [3]=0x0x1005a1d0, 24
    11. [4]=0x0x1006bd18, 11360
    12. TCM Free List:
    13. prev 100517c0, chunk 1fff5454, size 2648
    14. TCM free-stack  1452 bytes
    15.  
    16. CPU total run time is 157406
    17. TaskName        DeltaRunTime    percentage
    18. log_servi       0               <1%
    19. tskmad         340             33%
    20. IDLE            660             65%
    21. Tmr Svc         0               <1%
    22. TCP_IP          10              <1%
    23. rtw_xmit_       0               <1%
    24. tskreader       10              <1%
    25. rtw_inter       0               <1%
    26. rtw_recv_       10              <1%
    27. LOGUART_T       0               <1%
    28. cmd_threa       0               <1%
    IDLE 660 65%
     
    Последнее редактирование: 25 окт 2016
    Garmin нравится это.
  15. dosikus

    dosikus Новичок

    Сообщения:
    36
    Симпатии:
    3
    pvxx, что планируется в итоге? Плеер с вебмордой?
    Давно хотел такую плюшку на кухне...
     
  16. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.097
    Симпатии:
    1.303
    Пока ничего не планируется. Это просто изучение, что тама в RTL... Жду RTL8711AM - застряли в почте. На них и будет Web :)
     
  17. dosikus

    dosikus Новичок

    Сообщения:
    36
    Симпатии:
    3
    Прошу извинить за оффтоп. А ссылкой на лот не поделитесь?

    И в какой версии клипсины сделан проект ?
    Упсс, в ридми все нашел... :))))
     
    Последнее редактирование: 25 окт 2016
  18. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.097
    Симпатии:
    1.303
    Я не помню.
    Я сам заказами не занимаюсь. Домашние помогают... Отдал им ссылку и они оповещают о ходе операции...
    Вроде эту: 2 шт. лот БЕСПЛАТНАЯ ДОСТАВКА RTL8711AM RTL8711AF Cortex M3 MCU серийный wifi модуль купить на AliExpress
    Заказали вроде 16-го числа, в начале прошлой недели продавец написал, что выслал... пока трек-номер ещё сидит за границей...
    Тут как повезет. Тогда-же заказали ещё всякое барахло - уже пришло в пятницу - т.е. менее недели :confused:
    Используется ПО описанное тут UDK с Eclipse для модулей RTLxxx под Windows
    В 'реадми' и кинутые исходники содержат не полный SDK, т.к. он большой для скачивания и тем более это ещё не законченная версия, а пробная и недо-оформленная. Сделана путем export проекта из Eclipse, а SDK в проект включен внешнем ресурсом с фильтром ненужного... Как он видится в Eclipse (с фильтрами) так и свален в zip. Возможны потери всяких файлов лицензий и прочего... По этому не на git, а то там вечно с этим пристают - типа: "не в том каталоге и не так лежит их любимая лицензия" :).
     
    Последнее редактирование: 25 окт 2016
    dosikus нравится это.
  19. shaman1010

    shaman1010 Читатель

    Сообщения:
    128
    Симпатии:
    14
    Чую новый интересный проект :)
    Вопрос на старте - можно ли на базе данного реалтековского железа сделать полноценный squeezebox player? На роутерном и x86-м железе его поднимают на squeezelite. Здесь его исходники на гите, для разного железа. Здесь бинарники, если нужно просто поднять squeezebox на доступном железе и проверять свою реализацию.
     
  20. pvvx

    pvvx Активный участник сообщества

    Сообщения:
    9.097
    Симпатии:
    1.303
    Не знаю что это такое, squeezebox player, и зачем он нужен? :confused:
    Тут простой тест MP3 пробы. Это как-бы первый из всех проектов, обнаруженных на git-хабе. Его начал kissste, а я просто пытаюсь помочь (да заодно освоить RTL-ы) и ничего более. Весь спрос к kissste :)
    Дешевые цветные дисплеи для прикручивания и цветомузыки MP3 уже пришли :) Что дальше - неизвестно... В принципе жду RTL8711AM - вдруг там есть 1.5 Мегабайта RAM - обзоров пока нет, а PDF-ы на RTL8711AM везде прошлогодние и даже не альфа версии, в которых и половины, что есть в чипе не описано... :)
    Пока можно только зарегистрировать факт, что RTL8710AF во много раз лучше ESP8266, а цена на али на них сравнялась.
    Тут как раз зашевелился продавец ESP32 и написал, что выслал (если опять не обманывает). Если в RTL8711AM всё OK с 1.5 мега памятью, то ESP32 уже не конкурент, т.к. на RTL87xxAM уже есть и фирменная Arduino под управлением RTOS... Скоро сравню.
     
    Последнее редактирование: 25 окт 2016

Поделиться этой страницей