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

Arduino для RTL8710.

koreshx

New member
полугодовалой давности пост...
Вот у них:
#define CONFIG_GDMA_EN 1
Это значит, что SPI (HAL SSI) работает по DMA и функции только назначают будущую транзакцию, не дожидаясь исполнения.
Т.е. не важно, какой вызов использовать, spi_slave_write_stream или spi_slave_write_stream_dma, всё-равно будет работать по DMA? Как-то не совсем очевидно, больше похоже, что CONFIG_GDMA_EN добавляет dma функции и конфигурирует контроллер, а дальше уже можно юзать dma или блокирующую передачу. Это я не докопал?
 

pvvx

Активный участник сообщества
полугодовалой давности пост...

Т.е. не важно, какой вызов использовать, spi_slave_write_stream или spi_slave_write_stream_dma, всё-равно будет работать по DMA? Как-то не совсем очевидно, больше похоже, что CONFIG_GDMA_EN добавляет dma функции и конфигурирует контроллер, а дальше уже можно юзать dma или блокирующую передачу. Это я не докопал?
DMA включает та указанная опция - CONFIG_GDMA_EN 1. С ней уже странслированы библиотеки HAL включенные без исходников в Arduino.
Исходники, связанные с SPI, таковы:
RTL00MP3/spi_api.c at master · pvvx/RTL00MP3 · GitHub
RTL00MP3/hal_ssi.c at master · pvvx/RTL00MP3 · GitHub
RTL00MP3/rtl8195a_ssi.c at master · pvvx/RTL00MP3 · GitHub
... и т.д.

Нету там ожидания завершения приема или передачи, что в случае DMA или работы по прерываниям :)
Блокирующие функции подразумевают выход из них только после полного окончания операции, т.е. вызывающий процесс блокируется, пока операция не будет завершена.

Ожидание добавлено мной в класс SPIClass как [inline]while(spi_busy((spi_t *)pSpiMaster));[/inline] на блочные операции. Дальше уже не помню - возможно при малой скорости вывод и одного байта будет иметь преждевременный CS, если он назначен как GPIO... Вставлял ожидание, когда отлаживал работу TFT на SPI c более 20 MHz :) Иначе вообще не работало и прерывало передачу блоков новой командой к SPI.
И после прошлого описания уже раза два поменялись почти все либы в Ameba Arduino и соответственно в rtlDuino... Сборка либ для rtlDuino происходила путем замещения obj в новых либах от Ameba Arduino на obj собранные из исходников, кусков "реверса" и исправленных ошибок, сейчас находящихся в RTL00MP3\RTL00_SDKV35a, но с хидерами от Ameba Arduino (глобальными установками) и частично дополненных и/или замененных, т.к. в Ameba Arduino для RTL8710AF запрещено многое и в уровне HAL стоят проверки, создающие коммерческие ограничения на использование встроенных в чип аппаратных устройств. В итоге имеем солянку. :)
Возможности обновить снова rtlDuino нет - после выхода SDK4.0 я полностью переключился на него, а Ameba Arduino имеет корень из SDK V3.5a и развивается по своей ветке. Тут надо ждать слияния SDK 4.0 и следующих версий от Ameba. Один я больше не хочу писать первым новый rtlDuino с включением и RTL серии "B" из SDK 4.0 - слишком много различий в 4.0 и для серии "A". Мне просто физически не успеть всё проверить и/или написать тесты, да и реакция "потребителей" отрицательна на такие действия (см. форум :) ). Тем более Ameba уже должна сама справляться с Дуриной, т.к. за время "подъема" выпустила dev-board c RTL8710AF и Ameba-Z DEV01 (dev-board c RTL8710BN который ещё не пущен в оф. продажу)...


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

koreshx

New member
pvvx, Вы чертовски правы. Может кому интересно, наглядная иллюстрация, если кто-то как и я не поверил написанному вами уже 20 раз
pic_157_1.gif
Первый канал (желтый) - spi_clock, второй - тестовый пин. Передается буфер 128 байт, 20МГц. Тестовый код в SPI.cpp
Код:
 digitalWrite(0, HIGH);  
    spi_master_write_stream( (spi_t *)pSpiMaster , (char *)_buf, (uint32_t)_count );
    digitalWrite(0, LOW);  

    while(spi_busy((spi_t *)pSpiMaster));
А то что есть две функции (spi_slave_write_stream\spi_slave_write_stream_dma), получается верить нельзя (
 
Последнее редактирование:

AlexeyM

New member
Здравствуйте всем!
Можете подсказать как правильно установить RtlDuino? Есть stlink перешитый, ножка reset правильно работает - проверял. Пытаюсь для началакод в RAM исполнять. Так вот он иногда исполняется, но потом, вдруг перестаёт исполняться - загрузка проходит, контроллер сбрасывается, но в териминале идёт попытка загрузки image1, image2, и всё висит. После танцев с бубном - перестановки амёбы 2.0.0 на 2.0.0.2 и обратно, переписывание поверх pvx последнею с гита версию, установки бинарника arduino ota с гита pvx, вроде некоторе время опять начинает работать, но потом опять перестаёт. Использую правда Visual Studio но я думаю это не важноб с ардуины то же самое. Такое чувство, что точки входа в методы в либах не совпадают. Модуль RTL00.

Вот ещё что прочитал тут
PINE ошибка - при загрузке с Jtag в память включается 166 MHz, а при старте с Flash - 83MHz.
У меня именно так - может в EFUSE дело?

<RTL8195A>

=========================================================




ROM Version: 0.3




Build ToolChain Version: gcc version 4.8.3 (Realtek ASDK-4.8.3p1 Build 2003)




=========================================================


Check boot type form eFuse


SPI Initial


Image1 length: 0x36e8, Image Addr: 0x10000bc8


Image1 Validate OK, Going jump to Image1


===== Enter Image 1 ====




load NEW fw 1


Flash Image2:Addr 0x80000, Len 268544, Load to SRAM 0x10006000


SPI calibration


Find the avaiable window


Baud:1; auto_length:12; Delay start:0; Delay end:63


[SPIF Err]SpicNVMCalStore: The flash memory(@0x90b0 = 0x1311301) is not able to
be write, Erase it first!!


===== Enter Image 1.5 ====


Img2 Sign: RTKWin, InfaStart @ 0x10006049


===== Enter Image 2 ====
 
Последнее редактирование:

Pilnikov

Active member
Почитайте форум повнимательней
Работать то может и будет. Но #не долго# вот прошивку прошить (скеч залить) вы в него точно не сможете

Поищите разницу между
и
 
Последнее редактирование:

mir546

New member
Добра всем! Интересует следующее.
Возможно ли реализовывать на данном чипе воспроизведение музыки с FTP сервера?
Думается мне что с большой(размер файла свыше 1мб) музыкой не получится т.к. его нужно же сначала скачать в память, а потом воспроизвести. Как вариант добавить чип ОЗУ, либо SD карту и грузить сначала на карту, потом воспроизводить.
Что думают профи?
 

Pilnikov

Active member
Добра всем! Интересует следующее.
Возможно ли реализовывать на данном чипе воспроизведение музыки с FTP сервера?
Думается мне что с большой(размер файла свыше 1мб) музыкой не получится т.к. его нужно же сначала скачать в память, а потом воспроизвести. Как вариант добавить чип ОЗУ, либо SD карту и грузить сначала на карту, потом воспроизводить.
Что думают профи?
В мире нет ничего невозможного
Мы не ищем легких путей
Что мешает для скачивания файлов с FTP на SD использовать РС с развитым GUI? А затем уже воспроизводить дешманским МП3 плеером ценой в 100р?
Чтобы реализовать вашу задачу основные силы придется потратить на написание WEB GUI.
В соседней ветке (про МП3 на RTL) @pvvx уже упоминал что для совмещения "приятного с полезным" (Воспроизведения МП3 с ВЕБ Мордой) необходимо много ОЗУ, а с этим у 8710 трудности (нужен 8195 с ценником от 600р)
 

mir546

New member
В мире нет ничего невозможного
Мы не ищем легких путей
Что мешает для скачивания файлов с FTP на SD использовать РС с развитым GUI? А затем уже воспроизводить дешманским МП3 плеером ценой в 100р?
Чтобы реализовать вашу задачу основные силы придется потратить на написание WEB GUI.
В соседней ветке (про МП3 на RTL) @pvvx уже упоминал что для совмещения "приятного с полезным" (Воспроизведения МП3 с ВЕБ Мордой) необходимо много ОЗУ, а с этим у 8710 трудности (нужен 8195 с ценником от 600р)
Идея в том что роутер с usb-flash накопителем(с музыкой) будет в режиме FTP сервера и нужно сделать устройства которые будут подсоединены к этому FTP серверу, смогут просканить NFC метку и исходя из данных этой метки воспроизвести мелодию с сервера.(телефоны с NFC и WiFi дорогое решение)

Если бы было так просто... WEB GUI для меня наименьшая проблема.(веб разработчик), при этом в данной затее не вижу ему применение.

А почему именно 8195? у 8711 столько же ОЗУ.
И где их взять? На али и маузере ESP хоть пруд-пруди, а эти модули/чипы найти не могу, чтобы в минимальном размере/обвесе а не всякие там шилды.
 

Pilnikov

Active member
Идея в том что роутер с usb-flash накопителем(с музыкой) будет в режиме FTP сервера и нужно сделать устройства которые будут подсоединены к этому FTP серверу, смогут просканить NFC метку и исходя из данных этой метки воспроизвести мелодию с сервера.(телефоны с NFC и WiFi дорогое решение)

Если бы было так просто... WEB GUI для меня наименьшая проблема.(веб разработчик), при этом в данной затее не вижу ему применение.

А почему именно 8195? у 8711 столько же ОЗУ.
И где их взять? На али и маузере ESP хоть пруд-пруди, а эти модули/чипы найти не могу, чтобы в минимальном размере/обвесе а не всякие там шилды.
Где взять почитайте в теме https://esp8266.ru/forum/threads/raznoobraznye-moduli-s-rtl871x-i-rtl8195.2017/
А поподробнее про задачу можно?
 

pvvx

Активный участник сообщества
Добра всем! Интересует следующее.
Возможно ли реализовывать на данном чипе воспроизведение музыки с FTP сервера?
Думается мне что с большой(размер файла свыше 1мб) музыкой не получится т.к. его нужно же сначала скачать в память, а потом воспроизвести. Как вариант добавить чип ОЗУ, либо SD карту и грузить сначала на карту, потом воспроизводить.
Что думают профи?
Если качество вывода в виде PWM сигнала устраивает, то это делается за вечер - нужен всего стабилизатор 3.3В, сам модуль и пару резисторов спаянных на соплях...
Если ставите какой DAC, то это уже изготовление платы и можно поставить что ещё - хоть SD карту и или внешний контроллер. Для поделки типа для "дома и для семьи" не принципиально, если уже делается какая плата...
Буферов в самом модуле для воспроизведения с местного файл сервера MP3 не требуется от слова вообще. Буферизация потока нужна при удаленном внешнем сервере на время 'затыков' всего канала связи.
 

mir546

New member
Приношу извинения что долго отвечаю - предпраздничная суета.
Где взять почитайте в теме https://esp8266.ru/forum/threads/raznoobraznye-moduli-s-rtl871x-i-rtl8195.2017/
А поподробнее про задачу можно?
Благодарю за наводку, надеюсь найду там эту информацию.
Задача: считать и распарсить данные из nfc метки. Если там есть ссылка то обратиться с этой ссылкой к ftp серверу по wifi.
По ссылке находится аудиофайл, его нужно воспроизвести.
Кроме прочего нужно воспроизвести с уменьшением темпа в 0.1-0.5 раз(настраивается отдельно) - это думаю реализовать через БПФ, но не знаю достаточно ли для этого мощности того МК который там находится?

Если качество вывода в виде PWM сигнала устраивает, то это делается за вечер - нужен всего стабилизатор 3.3В, сам модуль и пару резисторов спаянных на соплях...
Если ставите какой DAC, то это уже изготовление платы и можно поставить что ещё - хоть SD карту и или внешний контроллер. Для поделки типа для "дома и для семьи" не принципиально, если уже делается какая плата...
Буферов в самом модуле для воспроизведения с местного файл сервера MP3 не требуется от слова вообще. Буферизация потока нужна при удаленном внешнем сервере на время 'затыков' всего канала связи.
Для начала хочу сделать с PWM а там уже послушать как оно будет. Воспроизводиться будут голосовые текста. Но платку скорей всего придётся делать чтобы поставить контроллер зарядки для аккума или взять готовый модуль...
А если осуществлять быстрое преобразование Фурье для уменьшения темпа воспроизведения - нужна буферизация? И хватит ли для этог штатного МК или придётся ставить внешний?
 

pvvx

Активный участник сообщества
Кроме прочего нужно воспроизвести с уменьшением темпа в 0.1-0.5 раз(настраивается отдельно) - это думаю реализовать через БПФ, но не знаю достаточно ли для этого мощности того МК который там находится?
В MP3 декодеке есть регулировки. Так-же темп можно менять скоростью вывода данных на выход, если это ваш сервер и не ведет трансляцию как радио... При радио трансляции сервер дает поток который сильно не изменить - набежит отставание или опережение и псё... В текущих версия стоит коррекция - пропуски или дополнение отсчетов, но сделано криво - не доотладил и при длительной радиотрансляции (прослушивание подряд более 4..10 часов канала радио) иногда срывает...
Синхронизация с сервером MP3-радио делается примерно так - постоянно запрашивается и набирается буфер в пред, и выводится. При сильном опережении сервак не отдает на запросы новые данные - буфер опережения уменьшается. Тогда начинаем корректировать скорость вывода примитивным путем - вставлять каждые N выводов в DAC/PWM дубль. Ну и т.д.
 
Последнее редактирование:

A.V

New member
Продолжаю подпиливать rtlDuino под свои домашние поделки, заодно вникая в FreeRTOS после голого С на АВР-ках.
Добрался но SNTP.

Вопрос: а как задать свой адрес SNTP сервера?

Насколько разобрался в исходниках - в "оригинальном" sntp.c из SDK такое есть, но здесь-то нам предлагают только .h и уже собранный lib_rtl8710.а, с сильно порезанным наполнением. Это надо пересобирать все либы? Тогда второй вопрос - как это сделать "наименьшей кровью" :) makefile-ов что-то не вижу...
 

pvvx

Активный участник сообщества
Продолжаю подпиливать rtlDuino под свои домашние поделки, заодно вникая в FreeRTOS после голого С на АВР-ках.
Добрался но SNTP.

Вопрос: а как задать свой адрес SNTP сервера?

Насколько разобрался в исходниках - в "оригинальном" sntp.c из SDK такое есть, но здесь-то нам предлагают только .h и уже собранный lib_rtl8710.а, с сильно порезанным наполнением. Это надо пересобирать все либы? Тогда второй вопрос - как это сделать "наименьшей кровью" :) makefile-ов что-то не вижу...
Создайте свой каталог, как либу и положите туда исходники. Можно и в директорию "cores\arduino\ ". Оно заместит то, что в "*.a"
Так-же можно разобрать и собрать саму либу "*.a" со своим "*.o".
 
  • Like
Реакции: A.V

A.V

New member
Так-же можно разобрать и собрать саму либу "*.a" со своим "*.o".
О! Благодарю за напоминание.

Что-то меня переглючило, что в обычных либах нужно соблюдать версию/инфраструктуру сборки, как в линуксовом ядре. А "нормальные" либы последний раз собирал в начале 90х, переписывая что-то на турбо-ассемблере :)
Чую, это всё Menta-ы с CoDeSys-ами виноваты... так и до ардуины головного мозга недалеко :)
 

A_D

Active member
Что-то меня переглючило, что в обычных либах нужно соблюдать версию/инфраструктуру сборки, как в линуксовом ядре. А "нормальные" либы последний раз собирал в начале 90х, переписывая что-то на турбо-ассемблере :)
Чую, это всё Menta-ы с CoDeSys-ами виноваты... так и до ардуины головного мозга недалеко :)
В соседней теме покруче проблемы, человек не может запустить в принципе стабильно Creator плату с cmsis-dap, постоянно у него она отваливается и не работает ничего... ссылается то на драйвера, то на вин10, то на mbed, то на realtek - все оч плохо и криво в общем) А вы видимо маг, раз уже копаетесь в кишках ардуино и таких проблем не имеете. ;)
 

A.V

New member
А вы видимо маг, раз уже копаетесь в кишках ардуино и таких проблем не имеете. ;)
"Надо сказать Ахалай-махалай! И обязательно - дунуть! Иначе ничего не получится!" © А.Акопян ;)
От 90% подобных проблем я избавился лет с 10 назад, перейдя на линукс. Только совсем по работе с виндой и приходится общаться, когда очередной тепло/водо/итп. пункт запускаю.

ЗЫ: с файлом разобрался - опять получилось (странно, да?)... Разве что найденный мной sntp.c оказался от какой-то совсем другой версии lwip и пока решил не его пилить, а вставить минимальную заглушку по аналогии.
ЗЫЫ: вот ещё б заставить себя настроить Qt Creator, чтобы и собирать/прошивать из него, а не только как редактор... Пока - лень, но рано или поздно займусь...
 
Сверху Снизу