Author Topic: Bare metal programming для Cubie?  (Read 4651 times)

Andrew_S.

  • Guest
Bare metal programming для Cubie?
« on: April 25, 2014, 07:56:24 am »
собственно возникла потребность низкоуровнего программирования. ARM-ы до этого программировать не приходилось, но был небольшой опыт программирования ADSP.

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

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

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

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

Offline UnКаЙF

  • Full Member
  • ***
  • Posts: 241
  • Karma: +9/-6
    • View Profile
Re: Bare metal programming для Cubie?
« Reply #1 on: April 25, 2014, 08:51:25 am »
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  и потом передает управление ядру. Наверное можно будет их переделать под твою задачу.
« Last Edit: April 25, 2014, 08:57:11 am by UnКаЙF »

Offline ua3prq

  • Moderator
  • Hero Member
  • *****
  • Posts: 660
  • Karma: +14/-1
    • View Profile
Re: Bare metal programming для Cubie?
« Reply #2 on: April 25, 2014, 08:56:02 am »
А почему что-то более мелкое не попробовать из АРМ-ов? И дешевле и меньше. Тот же AVR еще есть.
Никакой обвязки- все на борту. Все равно полный цикл проходить  ;D
Выкинуть из кубика систему- так там ничего не останется, вся периферия мертвый груз.

Andrew_S.

  • Guest
Re: Bare metal programming для Cubie?
« Reply #3 on: April 25, 2014, 09:17:24 am »
что то более менее мелкое не подойдет по производительности. задача обработки некислая - свертка с достаточно длинным (>100000 семплов) ядром. то есть считать нужно много и желательно на NEON-е. я прописал алгоритм для iOS. IPAD 2 его тянет. вот думаю и эта штука должна потянуть в каком то виде.

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

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

Offline UnКаЙF

  • Full Member
  • ***
  • Posts: 241
  • Karma: +9/-6
    • View Profile
Re: Bare metal programming для Cubie?
« Reply #4 on: April 25, 2014, 09:20:47 am »
« Last Edit: April 25, 2014, 09:24:14 am by UnКаЙF »

Andrew_S.

  • Guest
Re: Bare metal programming для Cubie?
« Reply #5 on: April 25, 2014, 09:54:39 am »
> https://github.com/linux-sunxi/u-boot-sunxi/wiki

линукс?

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

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

просто думалось, что есть какой то простой способ разработки под арм, типа CrossCore для ADSP, желательно под win. чтобы написал, откомпилировал, загрузил, заработало (или не заработало). к сожалению в линуксе ни в зуб ногой. разбираться время надо ...
« Last Edit: April 25, 2014, 09:59:48 am by Andrew_S. »

Offline UnКаЙF

  • Full Member
  • ***
  • Posts: 241
  • Karma: +9/-6
    • View Profile
Re: Bare metal programming для Cubie?
« Reply #6 on: April 25, 2014, 11:09:52 am »
Quote
> https://github.com/linux-sunxi/u-boot-sunxi/wiki

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

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

Andrew_S.

  • Guest
Re: Bare metal programming для Cubie?
« Reply #7 on: April 25, 2014, 11:45:31 am »
thanxx за ссылку. примерно понятно что это. опять же, зачем самому собирать загрузчик. может взять готовый образ системы с готовым загрузчиком, потом заместить kernel.img своей программой?

Offline UnКаЙF

  • Full Member
  • ***
  • Posts: 241
  • Karma: +9/-6
    • View Profile
Re: Bare metal programming для Cubie?
« Reply #8 on: April 25, 2014, 12:57:01 pm »
Вариантов может быть много разных. Загрузчик просто для наглядности:
(Работает с железом когда ядро не загружено. Можно использовать функционал или подсмотреть примеры кода.)

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