Jump to content

    

__inline__

Участник
  • Content Count

    1012
  • Joined

Everything posted by __inline__


  1. Ну на самом деле, кому сильно нужно будет - найдёт способ их приобрести. Тем более, у юрлиц возможностей намного больше.
  2. A20 Allwinner

    Не представляю где это может быть полезно. Всегда хватало 1 UART и то для отладки.
  3. И старые, и новые. Там, где есть 15-пиновый VGA-разъём. Или есть уже мониторы без VGA-разъёма? Если да, то жизнь становится серой...
  4. Кому как. Мне шаг 0,4 проще распаять (без лупы), чем усаживать вслепую BGA. P.S. Подкиньте марки доступных микросхем Видео-ЦАПов! Чтобы RGB делать в аналоговый VGA. А то хрень на резисторах делает цветовые засветы! Тут детальнее:
  5. Ну на самом деле удел оллвиннеров - мультимедиа-девайсы: игровые консоли, планшеты, плееры и т.п. Для военных применений есть Texas Instruments DSP (радары, локация,....).
  6. A20 Allwinner

    Да, nuvoton - неинтересная параша, местами проигрывающая даже STM32H743. И после освоения оллвиннеров, мне уже ничего неинтересно, кроме самих оллвиннеров
  7. Само время ответило на мои вопросы! В неправильной инициализации TCON у V3s. Исправил - заработало! Без тактирования сигналов R, G, B на высоких разрешениях возникают цветовые засветы, что недопустимо на динамичных сценах с движущимися объектами на экране. Надо тактировать! И буферизовать! На одних резисторах яркость очень слабая, пришлось выкручивать монитор на максимум яркости. Разрешение: 800x480 60 Гц. 16 бит на точку. RGB 5:6:5 Схема выше в первом посте - радиолюбительщина, профессионально так не делают! Нужно так, как внизу, не иначе! Не забываем защитные диоды от пробоя от статики! Тактируем цветовые компоненты от LCD_DE: P.S. А ещё лучше - поискать микросхему Video-DAC.
  8. A20 Allwinner

    Работал с A13 и V3s. Начать с установки готового Линукса. Далее найти сорцы убута и Линукса под этот камень и крошить. На выходе должен родиться SDk под Ваши нужды! Занятие не из лёгких.
  9. Читал про это статью в интернете. В теории - любое проприетарное дерьмецо с бэкдорами. Если "for Home or Office use", то это параллельно.
  10. На вертепе в микропроцессорах есть тема про игровую консоль на H743. надеюсь, найдёте. Там я подробно разжевал всё. Вкратце скажу: о SEGA Megadrive, SNES, NEO-GEO и CPS даже не мечтайте! Не взлетит! А GBA так тем более. Нифига не идеально! На этот дисплей (от PSP GO) иформация вообще не ищется: марка LQ038T3LX01S - оказался проприетарным дерьмом от Шарпы и Соньки. Там у него разъём 34 пина, из них только 18 контактов имеют смысл, остальные - питание и земли. И пишут что 24 бита цветность. Как они в 18 ног распихали 24 бита? Значит - LVDS, так как ещё вижу - дифференциальные пары разведены - 3 штуки (R,G,B). Ну и переходник 34 контакта на 51 на шлейф более 15 см как бы намекает на LVDS. Короче фтопку этот LCD. Буду к VGA монитору целять, как это делал с A13 - можно любое разрешение поставить без бордюров. БГА? Кстати, в личпи зеро, что у меня - система питания сделана на DC-DC, без управления. Это упрощает запуск камня, в отличие от плат со всякими AXP203 и подобными, где ещё ими рулить придётся. :)
  11. Есть плата с Allwinner V3s, у неё видео-выхлоп на LCD: каналы R,G,B по 6 бит каждый и HSync, VSync. Питание 3.3V. Для монитора VGA (для ПК, ЭЛТ) собрал видео-ЦАП простейший, схема на рисунке. Монитор ЭЛТ Samsung SyncMaster 765MB. Не работает! Монитор не переключается в режим, лампочка питания мигает. Менял полярность синхро-импульсов - не помогло. Проверил сигналы на каналах R,G,B - присутствуют, на слух воспринимаются как работа автомобильного двигателя. На HSync идёт писк (частоту синхронизации поделил на 2, чтобы услышать). На VSync идёт низкочастотный прямоугольник. Тоесть сигналы есть. А также LCD панель работает. В чем может быть дело? Есть подозрение, что недостаточно уровней на сигналы VSync и HSync для VGA монитора. В плате Olinuxino стоят буферы-инверторы на полевых транзисторах - они запитаны от 5V. Хотя выходы с RGB идут напряжением 3.3V. В интернете одни пишут, что 3,3V достаточно для H/V Sync, другие ставят буфер. Что бы вы посоветовали? И обязательно тактировать RGB от DENABLE ? Зачем это делать, когда без этого работает?
  12. Размер задаётся в настройках DMA. Это можно указать в размере одного блока DMA. С исходников у-бута, с исходников Линукса, с даташита. Много чего узнал экспериментальными методами. Я тоже так думал пару лет назад. Потом пересилил себя и раскурил по всё вышесказанное V3s. Есть два выхода из ситуации: 1) раскуриваете всё самостоятельно 2) приобретаете мой SDK для V3s (за этим в личку или в почту)
  13. Будет однозначно! Не годятся. 1/35мс = 28 FPS всего. При 60 будут дико шлейфить. Более подробнее расписал тут, чтобы не оффтопить:
  14. Пошёл по этому пути. В качестве замены - выбрал дисплей-донор с приставки Sony PSP Go. У него 480x272, что немногим больше, чем требуемые 400x240, прикинул - тепримо. На счёт качественных параметров дисплея, всё взвесил. Информация из другого форума: Пункт 3) подходит идеально. Видеообзор PSP Go. Со 157-й секунды. Чувачок вроде шустро бегает и не мажет при движении.
  15. Проанализировал оба дисплея что выше. Время отклика 30..35 мс, настораживает. Ведь мазать будет при движении??? Тот что ниже - от Sony PSP. Даташиты нашёл и скачал от обоих! Кстати, у того который 400x240 - яркость, контрастность выше и с антибликовым покрытием. По сравнению с PSP'шным.
  16. Эта фигня была выдрана из сорцов линукса(работа с TCON в режиме I8080 CPU BUS). Как я понял из сорцов, в режиме 16 бит биты сильно перекручиваются (таблицу прикладывал в предыдущем посте в спойлере) и необходимо будет ручками корректировать. Плюс к этому - опрашивать биты занятости по чтению и записи после каждого чтения-записи TCON. Ни о каком DMA тут речи не может и быть, поэтому про быструю отрисовку через CPU i8080 BUS на оллвиннерах можно забыть! На китайском форуме мне намекнули, что этоот режим они не используют, и он был сделан как запасной, на всякий случай. Китайцы работают с дисплеями по RGB-интерфейсу. Поэтому с маленькими матрицами облом выходит, так как большинство из них как правило подключаются по i8080 интерфейсу (или SPI). Лишь только малая часть может работать в RGB, но это их не дефолтный режим, часто требуется перевод матрицы в RGB режим, через SPI или I2S. Но есть и исключения из правил: 1) 2) Дисплей от Sony PSP. Чисто RGB, для игр, хорошие цвета и динамика. Как раз для игр. Но 480x272, что чуть больше требуемых 400x240 (формат WQVGA). За ссылку, Arlleex, спасибо!
  17. LG GX500 на 6 часов нормально смотрится - что влево-вправо, что вверх-вниз. Причём цвета очень насыщенны. Похоже всё-же на IPS. Нужен дисплей 400x240 с RGB-интерфейсом - чтобы по умолчанию стоял уже, без всяких переводов через SPI или I2C. Не подскажете где искать? Почту пока не читал. Это большая дура, которая вынуждает меня искусственно раздувать кадр в 4 раза по площади. Так как исходный кадр 400x240. Хотел предыдущий дисплей использовать, который нравится, но он не поддерживает работу в RGB (ножки не выведены на коннектор), только CPU i8080. А в оллвиннерах этот режим через задницу. Поэтому нужен дисплей 400x240 с RGB-интерфейсом, чтобы при включении сразу был доступен. P.S. почему CPU IF i8080 в олвиннерах через задницу - объяснения в спойлере.
  18. Ещё один баг обнаружил, на этот раз - в исходниках 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 лучше... Вот такой размер кадра в оригинале выходит: Есть ещё скейлеры на NEON, пробовал их - прирост в скорости незначительный - то же падение FPS в 4 раза из-за большой площади софтовой прорисовки: https://github.com/DPRCZ/gpsp/tree/master/arm
  19. Один-в-один как штатный, идущий вместе с платой личпи зеро. Думаю, качественные дисплеи должны стоить в 10 раз дороже. Вот почему на мониторе от ПК я вижу под любыми углами? Почему цвета сочные там? Почему отладочные платы не снабжаются аналогичными дисплеями? GX 500 LCD - это IPS? Я его применил в предыдущей консоли, цвета сочные и видны под любым углом. Я понял. Спасибо.
  20. Всем известно, что задница кроется в мелочах... Так и тут. В общем, перенёс я эмулятор 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 } Видео сниму чуть-позже, когда выглянет солнце.
  21. Это кто такие? У меня тоже такой персонаж завёлся с недавнего времени на другом форуме. Тоже орёт про малину, но сам как сидел на STM32, так и остаётся сидеть. Дисплей с сочными цветами или фото удачное? Заинтересовал! Можете написать марку дисплея? Или разрешение в пикселах, тип матрицы и какие интерфейсы поддерживает? Можно в личку или в телегу. Ищу замену штатному дисплею с Lichee Pi Zero, штатный не устраивает из-за плохих углов обзора. Да потому что ленивые и/или тупые. Allwinner - самое тяжёлое, что удалось расковырять.
  22. Я пока над этим не думал, так как всё на стадии экспериментов с BareMetal. Предыдущую модель на DSP укатал в корпус портативной приставки SEGA.
  23. На самом деле оказалось не всё так плачевно! Я думал, будет хуже. Главное - разобраться в исходниках Линукса и у-бута под тот камень, который нужен - и всё будет замечательно. Сбацал SDK под камушек V3s в стиле BareMetal. V3s удобен по следующим причинам: - паяемый корпус - встроенная память на 64 мегабайта Плата - Lichee Pi Zero. Взять плату можно тут: https://aliexpress.ru/item/33021459494.html Сама плата выглядит так: Испытывал V3s на 1200 МГц (ядро) + 456 МГц (память). Работа ведётся автономно, без всяких ОС и у-бутов. Стиль написания программ: процедурно-ориентированное программирование на C. Что может и что делает SDK? : 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 Чуть позже сделаем видео с работой эмулятора на V3s.
  24. Спасибо за разъяснения. Мне вот стало интересно, откуда берут такую подробную информацию писатели линукса? Подозреваю, что не из того куцего даташита, название которого приводил выше. Потому что алгоритмов там не приводится. Вспомнить хотя-бы теже самые аудио-регистры, где надо щёлкать битами, и не зная порядка установки-сбросов битов, работать не получится.
  25. Ничего странного. Исходный кадр игры 400x240 и если ничего не делать, то он займёт четверть экрана! Я конечно уже SaI2x подключил чтобы раздуть на всю площадь экрана, но дополнительно хочется ещё аппаратное решение (пусть даже и без фильтра). Глянул доки, на 128 стр., там формат YUV, не RGB, так что не подходит. А если поиграться с настройками TCON, Pixel Clock? Для увеличения в 2 раза - надо уменьшить скорость чтения пиксела из видеопамяти в 2 раза и заставить TCON повторно читать каждую строку. VGA видеокарты так и работали (к примеру, разрешение 320x240 там получалось за счёт повторного сканирования каждой строки видеопамяти + замедленное чтение каждого пиксела в 2 раза, при этом развёртка соответствует кадру 640x480)