Перейти к содержанию
    

Allwinner T113-s3 уделал HiFi4 DSP. Смеяться или плакать?

56 minutes ago, gosha-z said:

Мануалов нет по одной простой причине - использованные корки заимствованы не совсем честно.

Насчет этого сильно сомневаюсь, т.к. об исках от (весьма серьёзных) производителей корок что-то не было слышно.

 

Quote

опровергнуть никто не может

= никому не нужно

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 hours ago, gosha-z said:

Вот и думайте, стоит ли ориентироваться на такой код...

 

5 hours ago, mantech said:

линуксоиды тупо впиндюривают их в свои линуксы и им тоже по большому счету пофиг на то, как они написаны - а спросишь - так исходники открыты, сиди и правь... Отчасти поэтому мое мнение только одно - никогда хороший, надежный софт, который полностью соотв. описанию и работает, как положено не будет открытым и бесплатным, и хоть до потолка пусть прыгают поклонники свободного софта, опровергнуть никто не может.

 

На самом деле оказалось не всё так плачевно! Я думал, будет хуже. Главное - разобраться в исходниках Линукса и у-бута под тот камень, который нужен - и всё будет замечательно.

 

Сбацал SDK под камушек V3s в стиле BareMetal.

 

 

V3s удобен по следующим причинам:

 

- паяемый корпус

- встроенная память на 64 мегабайта

 

Плата - Lichee Pi Zero.

 

 

Взять плату можно тут: https://aliexpress.ru/item/33021459494.html

 

Сама плата выглядит так:

  

147290_1591877063_s.png.b8998d1979156a47c54c0fd48ec1c80f.png

 

 

 

Испытывал V3s  на 1200 МГц (ядро) + 456 МГц (память).

 

Работа ведётся автономно, без всяких ОС и у-бутов.  Стиль написания программ: процедурно-ориентированное программирование на C.

 

:yes: Что может и что делает SDK? : :sun_bespectacled:

  

1) Воспроизведение звука с помощью встроенного аудио-кодека

 

2) Настройка канала ДМА для аудиокодека

 

3) Настройка прерываний от ДМА для аудиокодека (по окончанию половины буфера и полного буфера)

 

4) Настройка аудио-параметров кодека

 

5) Работа с таймером: задержки, считывание значение тика

 

6) Инициализация видеосистемы: установка логического разрешения, формата пиксела, установка базового адреса видеопамяти. Под LCD 800x480.

 

7) Подсветка LCD через ШИМ (PWM)

 

8) Функция VSync для синхронизации вывода изображения с отрисовкой на LCD.

 

9) Настройка второго канала ДМА для копирования "память-память". Функция проверки готовности пересылки ДМА.

 

10) Быстрый MEMCPY с помощью NEON

 

11) Инициализация UART для обмена данными с ПК (удобно для отладки).

 

12) Инициализация портов GPIO для периферии.  Светодиоды на PG0,PG1,PG2 + для управления джойстиком (см. следующий пункт).

 

13) Инициализация джойстика от SEGA MegaDrive.  Доступны  все 12 кнопок: U,D,L,R,START,A,B,C,X,Y,Z,MODE. Возможна одновременность нажатия всех кнопок в любых сочетаниях.

 

14) Инициализация системы прерываний: GIC, GIC distributor.  Установка любого вектора прерываний. Разрешение-запрет прерываний.

 

15) Настройка MMU, регионов кеширования. Разрешение кеширования для кода, данных. Включение предсказания ветвлений, NEON, VFP.

 

16) Инициализация встроенной DDR2 (64 МБ), установка тактовой частоты памяти.

 

17) Установка частоты ядра процессора. Открытие всех нужных гейтов для тактирования шин, периферии.

 

18) Рантайм для C/C++ : инициализация BSS секции, копирование LMA => VMA (для переменных  с начальным значением, которые не константы), инициализация конструкторов

классов (до main).

 

19) Инициализация порта SDIO для подключения карточек SD.  Инициализация и низкоуровневая работа с SD-картой

 

20) Драйвер файловой системы Petit FS от  Chan. Поддержка FAT 12,16,32.

 

21) Поддержка Fat FS для внешних приложений.

 

22) Работа с кешами:  invalidate, flush и другие.

 

23) Функции для рисования спрайтов. Задний буфер для отрисовки.

 

24) Скрипты для создания SPL-программы (elf to bin, встраивание хедера для загрузчика, подсчёт контрольной суммы).

 

25) Загрузчик внешнего приложения в начало DDR2 по адресу 0x40000000 и передача управления загруженному коду

 

26) ещё чего-нибудь, что забыл написать или сделаю.

 

 

Есть три реализации SDK :

 

1) тулчейн GCC (arm-none-eabi-gcc, последняя версия)

 

2) IAR EWARM v.7.7.  (можно и 8.5)

 

3) ARMCLANG v.6

 

  

По вопросам приобретения SDK, пишите в личку или на почту:  repstosw2018 СОБАКА gmail ТОЧКА com

 

:smile: Чуть позже сделаем видео с работой эмулятора на V3s.

 

Изменено пользователем repstosw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

44 минуты назад, __inline__ сказал:

Взять плату можно тут: https://aliexpress.ru/item/33021459494.html

Скажите, а коробочка/корпус для него бывает? И куда лично вы это засовываете? :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 hours ago, Xenia said:

Скажите, а коробочка/корпус для него бывает? И куда лично вы это засовываете? :)

 

Я пока над этим не думал, так как всё на стадии экспериментов с BareMetal.   Предыдущую модель на DSP укатал в корпус портативной приставки SEGA.

 

BPP_top.jpg.fd442b7d2cdebf4c44d8ef7187b4a22f.jpg     _1.jpg.95088eb1df1b08903ed0573721c2c8d7.jpg  _4.jpg.6252b4d87e8c4a95a7a35a756f86cee1.jpg

Изменено пользователем repstosw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем известно, что задница кроется в мелочах...  Так и тут.  В общем, перенёс я эмулятор GBA на V3s.  Попутно вылезли проблемы, которые успешно разрешились через какое-то время.

 

1) Без этого обмен с внешней памятью будет крайне медленным:

 

/* Enable SMP mode for CPU0, by setting bit 6 of Auxiliary Ctl reg */
 asm volatile(
	      "mrc p15, 0, r0, c1, c0, 1\n"
	      "orr r0, r0, #1 << 6      \n"
	      "mcr p15, 0, r0, c1, c0, 1\n"
             );

 

2) Перед тем как ставить частоту ядру процессора по-выше, необходимо проинициализировать LDO новым значением напряжения (по-выше дефолтного).  Иначе V3s будет работать на очень малой частоте.  Кусок кода:

 

void clock_init_safe(void)
{
	struct sunxi_ccm_reg * const ccm =
		(struct sunxi_ccm_reg *)SUNXI_CCM_BASE;
	struct sunxi_prcm_reg * const prcm =
		(struct sunxi_prcm_reg *)SUNXI_PRCM_BASE;

	/* Set PLL ldo voltage without this PLL6 does not work properly */
	clrsetbits_le32(&prcm->pll_ctrl1, PRCM_PLL_CTRL_LDO_KEY_MASK,
			PRCM_PLL_CTRL_LDO_KEY);
	clrsetbits_le32(&prcm->pll_ctrl1, ~PRCM_PLL_CTRL_LDO_KEY_MASK,
		PRCM_PLL_CTRL_LDO_DIGITAL_EN | PRCM_PLL_CTRL_LDO_ANALOG_EN |
		PRCM_PLL_CTRL_EXT_OSC_EN | PRCM_PLL_CTRL_LDO_OUT_H(1370) | PRCM_PLL_CTRL_IN_PWR_HIGH ); //LDO 3.3V, установка 1.37V для повышенной частоты ядра CPU
	clrbits_le32(&prcm->pll_ctrl1, PRCM_PLL_CTRL_LDO_KEY_MASK);

	clock_set_pll1(1200000000);
  
  //........

 

3) Перезапуск DMA для память-память должен включать в себя не только разрешение на запуск DMA, но и перед этим нужно повторно делать запись дескриптора в соответствующий регистр.  Иначе более одного канала одновременно DMA  не сможет работать.  Сейчас одновременно работают два DMA - один для аудиокодека (кольцевой буфер)  , второй - копирование из заднего буфера в видеопамять.

 

void MDMA_Start(void)
{
 MDMA_DESC_ADDR_REG=(u32)&MDMA_Descriptor; //DMA Channel 1 Descriptor Address
 MDMA_EN_REG=1;                            //DMA Channel 1 Enable
}

 

Видео сниму чуть-позже, когда выглянет солнце.

Изменено пользователем repstosw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ещё один баг обнаружил, на этот раз - в исходниках u-boot'а: display.h

 

Там стоит ограничение на число возможных форматов пиксела:

 

#define SUNXI_DE2_UI_CFG_ATTR_FMT(f)		((f & 0xf) << 8)

 

А должно быть так:

 

#define SUNXI_DE2_UI_CFG_ATTR_FMT(f)		((f & 0x1F) << 8) /* ошибка в коде u-boot: ограничивали режимы до 15, а их больше ! */

 

Иначе не все режимы доступны.

В эмуляторе GBA используется "не совсем стандартный" пиксель-формат : BGR 5:5:5.  Поэтому пришлось выкрутиться и приспособить ABGR 1:5:5:5, задав такой режим альфы, чтобы она не мешала:

 

//display.h:
//...
#define SUNXI_DE2_FORMAT_ABGR_1555              0x11 /* добавил */
#define SUNXI_DE2_UI_CFG_ATTR_FMT(f)		((f & 0x1F) << 8) /* ((f & 0xf) << 8) */ /* ошибка в коде u-boot: ограничивали режимы до 15, а их больше ! */
//...
  
//sunxi_display.c:
//...
        data = SUNXI_DE2_UI_CFG_ATTR_EN |
               SUNXI_DE2_UI_CFG_ATTR_FMT(SUNXI_DE2_FORMAT_ABGR_1555) |
	       SUNXI_DE2_UI_CFG_ATTR_ALPMOD(1) |
	       SUNXI_DE2_UI_CFG_ATTR_ALPHA(0xff);

	writel(data, &de_ui_regs->cfg[0].attr);
//...

 

Всё работает как надо, но без скейлера на LCD совсем грустно...   Так как LCD - это не VGA монитор, и уже произвольный таймлайн развёртки не задашь, то приходится довольствоваться малым размером кадра эмулятора на LCD 800x480.   Простой растяжки пиксела как в A13, у V3s нет - поэтому выхода три:

 

1) использовать видео-скейлер, а это значит дополнительно преобразовывать RGB кадр 240x160 в YUV.

 

2) использовать софтовые скейлеры - они чудовищно занижают производительность:  на игре с FPS = 480, скейлер в 2 раза занижает FPS до  120 (так как площадь увеличивается в 4 раза).

 

3) отказаться от большой дуры-дисплея, и взять дисплей по-меньше разрешением.

 

И DMA в V3s не поддерживает переменный шаг приращения, что совсем печально - скейлер на ДМА не сделать.  Всё-таки в A13 DMA лучше...

 

Вот такой размер кадра в оригинале выходит:

 

    2.jpg.9b0df1cccdd0da1ad6d8a4d3d945a416.jpg

 

 

Есть ещё скейлеры на NEON, пробовал их - прирост в скорости незначительный - то же падение FPS в 4 раза из-за большой площади софтовой прорисовки:

 https://github.com/DPRCZ/gpsp/tree/master/arm

 

 

 

Изменено пользователем repstosw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

23 hours ago, __inline__ said:

3) отказаться от большой дуры-дисплея, и взять дисплей по-меньше разрешением.

 

Пошёл по этому пути.

В качестве замены - выбрал дисплей-донор с приставки Sony PSP  Go.  У него 480x272, что немногим больше, чем требуемые 400x240, прикинул - тепримо.

 

На счёт качественных параметров дисплея, всё взвесил.  Информация из другого форума:

 

Quote

1) Экран в PSP 1000-2000 шлейфил, уходил в синеву вместо черного цвета, да и сами цвета были не ахти сочные.

 
2) Экран PSP 3000 получше, картинка более цветастая и сочная, даже черезчур, немного ненатуральные цвета.

Плюс кто-то полосы на экране замечает при игре, но у меня на моей 3008 синей ПСП такого не замечено.

 
3) А в PSP Go экран самый лучший, поскольку лишен недостатков первых двух. отличная цветопередача, цвета более естественные и нет шлейфов.

 

4) PSP Vita: Дисплей: 5-дюймовый OLED, 960x544 - сильно большой по разрешению.

 

Пункт 3) подходит идеально.:biggrin:

 

Видеообзор PSP Go. Со 157-й секунды.  Чувачок вроде шустро бегает и не мажет  при движении. :good3:

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 6/11/2020 at 11:54 AM, __inline__ said:

Раскурил  Allwinner A13 SoC на уровне голого железа.

Если не сложно подскажите по аудио кодеку v3s. Я не могу понять каким образом задается количество семплов запроса к дма. Я вижу fifo, его размер это и есть максимальный линенный запрос? Но где говорится о его размере? В описании упоминаются некие пакеты. Пакет это что такое? Это и есть запрос на заполнение fifo? Если устанавливать размер семпла в 24 бита, то DMA Destination Data Width устанавливать на 8 бит? Откуда Вы вообще черпаете информацию по железу? ПДФ явно расчитаннан на тех, кто уже в теме. Я к сожалению нет.

я пробовал программировать через алсу, но столкнулся с тем, что размер буфера нет возможности установить более чем в 32 раз больше чем размер пакета. Так и не смог понять это ограничения железа, алсы, или драйвера. Хотелось бы поменьше накладных расходов. Я ожидал, что можно будет сделать как на stm. задать размер буфера и запустить связку дма цап в цикле.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

26 minutes ago, igor_pskov said:

Но где говорится о его размере?

 

Размер задаётся в настройках DMA.

 

26 minutes ago, igor_pskov said:

Это и есть запрос на заполнение fifo?

 

Это можно указать в размере одного блока DMA.

 

26 minutes ago, igor_pskov said:

Откуда Вы вообще черпаете информацию по железу?

 

С исходников у-бута, с исходников Линукса, с даташита.

Много чего узнал экспериментальными методами.

 

26 minutes ago, igor_pskov said:

Я ожидал, что можно будет сделать как на stm

 

Я тоже так думал пару лет назад. Потом пересилил себя и раскурил по всё вышесказанное V3s.

 

26 minutes ago, igor_pskov said:

ПДФ явно расчитаннан на тех, кто уже в теме. Я к сожалению нет.

 

Есть два выхода из ситуации:

1) раскуриваете всё самостоятельно

2) приобретаете мой SDK для V3s (за этим в личку или в почту)

Изменено пользователем repstosw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17.06.2020 в 03:58, __inline__ сказал:

C6745 оказался лучше, чем BlackFin BF532/533  и STM32H743.

Хочу попросить вас про STM32H743 рассказать, раз уже вы упомянули о своем знакомстве с ним.

Лично меня интересует приложение для платы OpenH743I-C (без опционных модулей, которые изображены на фото, но с дисплеем):

https://www.waveshare.com/openh743i-c-standard.htm

OpenH743I-C-5.jpg

Здесь меня радует то, что дисплей, тот что нужен, прилагается. Ну и еще то, что эта плата у меня уже есть :).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 hours ago, Xenia said:

Хочу попросить вас про STM32H743 рассказать, раз уже вы упомянули о своем знакомстве с ним.

  

На вертепе в микропроцессорах есть тема про игровую консоль на H743. надеюсь, найдёте. :sun_bespectacled:

Там я подробно разжевал всё.

 

Вкратце скажу:  о SEGA Megadrive, SNES, NEO-GEO и CPS даже не мечтайте! Не взлетит!   А GBA так тем более.

 

 

 

 

On 6/26/2020 at 12:48 PM, __inline__ said:

Пункт 3) подходит идеально.:biggrin:

 

 

Нифига не идеально!

На этот дисплей (от PSP GO) иформация вообще не ищется: марка LQ038T3LX01S - оказался проприетарным дерьмом от Шарпы и Соньки.  Там у него разъём 34 пина, из них только 18 контактов имеют смысл, остальные - питание и земли.  И пишут что 24 бита цветность.  Как они в 18 ног распихали 24 бита?  Значит - LVDS, так как ещё вижу - дифференциальные пары разведены - 3 штуки (R,G,B).  Ну и переходник 34 контакта на 51 на шлейф более 15 см как бы намекает на LVDS.  

 

Короче фтопку этот LCD. Буду к VGA монитору целять, как это делал с A13  - можно любое разрешение поставить без бордюров. :biggrin:

 

 

On 6/16/2020 at 5:34 PM, mantech said:

Я вот все надеюсь на это творение болгар https://olimex.wordpress.com/2019/10/25/new-ip-camera-oshw-board-in-design-rfc/, но че-то до релиза все у них никак не дойдет. Подожду до августа, или буду свою борду ваять...

 

БГА?

Кстати, в личпи зеро,  что у меня - система питания сделана на DC-DC, без управления. Это упрощает запуск камня, в отличие от плат со всякими AXP203 и подобными, где  ещё ими рулить придётся. :)

Изменено пользователем repstosw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

46 минут назад, __inline__ сказал:

БГА?

Кстати, в личпи зеро,  что у меня - система питания сделана на DC-DC, без управления.

Да! Как ни странно на 4хслойке все, что мне надо можно уместить. А паять реально легче, чем 0.4 планар...

По поводу питалки тоже думаю на дискретке сделать, т.к. в AXP203 только 2 импульсных DC-DC а нужно 3, один все-равно дискретный делать. Ну а питание проца придется переключать резюком на порт проца, как олимексы делали.

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

14 hours ago, mantech said:

А паять реально легче, чем 0.4 планар...

 

Кому как. Мне шаг 0,4 проще распаять (без лупы), чем усаживать вслепую BGA.

 

P.S.  Подкиньте марки доступных микросхем Видео-ЦАПов!   Чтобы RGB делать в аналоговый VGA. А то хрень на резисторах делает цветовые засветы! :biggrin:

Тут детальнее:

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, __inline__ сказал:

Чтобы RGB делать в аналоговый VGA.

А зачем это вообще? Старые моники подключать??

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

20 minutes ago, mantech said:

А зачем это вообще? Старые моники подключать??

 

И старые, и новые. Там, где есть 15-пиновый VGA-разъём.  Или есть уже мониторы без VGA-разъёма? Если да, то жизнь становится серой...

Изменено пользователем repstosw

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...