September 19, 2019, 03:31:37 pm

News:

Have you visited the Allwinner Chipset wiki? - http://linux-sunxi.org/


Bare metal programming для Cubie?

Started by Andrew_S., April 25, 2014, 07:56:24 am

Previous topic - Next topic

Andrew_S.

собственно возникла потребность низкоуровнего программирования. ARM-ы до этого программировать не приходилось, но был небольшой опыт программирования ADSP.

задача достаточно простая. надо запрограммировать I2S, принимать данные с 2-х каналов внешнего АЦП (по I2S), обрабатывать их и отдавать на ЦАПы (по I2S). будет еще взаимодействие с внешней периферией (энкодер, несколько кнопок, ЖК индикатор), но это будет организовано через I/O порты.
вроде как система в этом - лишняя. к тому же нужна максимальная производительность и отсутствие тормозов.

собственно вопросы:

1. взлетит?
2. подойдут ли для этого стандартные пакеты разработки (GCC ARM, IAR EWARM или еще что то)?
3. как заставить cubie после инициализации грузить не систему а программу?

буду премного благодарен любой помощи.

UnКаЙF

April 25, 2014, 08:51:25 am #1 Last Edit: April 25, 2014, 08:57:11 am by UnКаЙF
1. Теоретически возможно, но это весьма и весьма тернистый путь. A10-A20 это всётаки SOC и ты больше заколебаешься с инициализацией, чем будешь работать над своей задачей. Короче, - из пушки по воробьям, если судить по твоему тех. заданию. Лучше взять ARM попроще, да к тому же с кучей готовых библиотек от производителей. Например STM32 F103, F407 и тому подобные. Если же в будущем планируешь расширять функционал, например, добавить такие сложные вещи как стеки протоколов TCP/IP, 802.11, Bluetooth, Продвинутый GUI, то тогда Cubie - хороший выбор. Смотреть нужно в сторону Embedded Linux, написания модулей ядра и его RT расширений. В принципе, даже если захочешь использовать А20 без ядра, то лучшего источника информации чем исходники линукс кернел не найдешь. Всё равно придется где-то брать библиотеки поддержки аппаратуры.
Я, в принципе, сам пришел на куби с RT-задачей. Вот уже скоро пол года как учу аrm и линукс, но до решения еще ой как далеко  ;D
2,3 - Копать на linux-sunxi.
Посмотри исходники uboot. Он проводит базовую инициализацию SOC  и потом передает управление ядру. Наверное можно будет их переделать под твою задачу.

ua3prq

А почему что-то более мелкое не попробовать из АРМ-ов? И дешевле и меньше. Тот же AVR еще есть.
Никакой обвязки- все на борту. Все равно полный цикл проходить  ;D
Выкинуть из кубика систему- так там ничего не останется, вся периферия мертвый груз.

Andrew_S.

что то более менее мелкое не подойдет по производительности. задача обработки некислая - свертка с достаточно длинным (>100000 семплов) ядром. то есть считать нужно много и желательно на NEON-е. я прописал алгоритм для iOS. IPAD 2 его тянет. вот думаю и эта штука должна потянуть в каком то виде.

собственно cubie планируется как development board. дальше планируется все это перекинуть на платку типа Merrii C10 (A10+4MbNANDFLASH+512kBRAM, то есть cubie без периферии). ни USB, ни встроенный видеоадаптер ни другая штатная перифирия не нужна.

конечно можно все сделать на DSP, но экономически выгоднее использовать готовую распаянную плату с процом и памятью и просто состыковать ее с платой DAC/ADC. поэтом и возник вопрос.

UnКаЙF

April 25, 2014, 09:20:47 am #4 Last Edit: April 25, 2014, 09:24:14 am by UnКаЙF

Andrew_S.

April 25, 2014, 09:54:39 am #5 Last Edit: April 25, 2014, 09:59:48 am by Andrew_S.
> https://github.com/linux-sunxi/u-boot-sunxi/wiki

линукс?

> Мож лучше на FPGA ?

считать такую длинную свертку впрямую даже на плисине - извращение ИМХО. все решается изящнее. + ни на ксилинксе ни на алтере нет никакого штатного I2S, а его эмуляция - развлекуха та еще ...

просто думалось, что есть какой то простой способ разработки под арм, типа CrossCore для ADSP, желательно под win. чтобы написал, откомпилировал, загрузил, заработало (или не заработало). к сожалению в линуксе ни в зуб ногой. разбираться время надо ...

UnКаЙF

Quote> https://github.com/linux-sunxi/u-boot-sunxi/wiki

линукс?

Это ещё не линукс, а всего лишь его загрузчик. В общем, гугл в помощь:
http://www.gentoo.ru/node/21898 напимер.

P.S. Да. Если после винды сразу, то тяжеловато будет к этой всей кухне привыкнуть.
P.P.S. Gentoo - интересная штука, в которой почти всё собирается из исходников.

Andrew_S.

thanxx за ссылку. примерно понятно что это. опять же, зачем самому собирать загрузчик. может взять готовый образ системы с готовым загрузчиком, потом заместить kernel.img своей программой?

UnКаЙF

Вариантов может быть много разных. Загрузчик просто для наглядности:
(Работает с железом когда ядро не загружено. Можно использовать функционал или подсмотреть примеры кода.)

Где-то читал, что можно на работающем линуксе ядро выгрузить и отдать управление куда надо.