• Система автоматизации с открытым исходным кодом на базе 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, чтобы и собирать/прошивать из него, а не только как редактор... Пока - лень, но рано или поздно займусь...
 
Сверху Снизу