Есть такая задача, нужно создать простенький графический контроллер с выводом видео в hdmi порт на монитор, загрузкой программы с сд-карты и хорошим быстродействием.
Решил обратить внимание на данную плату с процом imx6.
Есть главное требование - "чистое си программирование", желательно использование компилятора IAR.
Вопрос - 1) есть ли какие-либо примеры для первоначальной инициализации периферии и видеоконтроллера (режимы 3д и прочие навороты не нужны), уартов и контроллера сд-карты.
И второе - каким образом скомпилированную программу запускать? И с помощью каких программно-аппаратных средств?
идете на фрискейловский сайт в раздел к приглянувшемуся процу и тащите, что-то типа: "i.MX 6Series Platform SDK : Bare-metal SDK for the i.MX 6 series, including reusable drivers and tests for many peripherals, and much example code. Also includes register definition headers files, and register definitions for debuggers. BSD open source license."
если подходит, то покупаете плату, тащите доки и организуете "восход солнца вручную"..
для запуска своей программы можно пойти по простейшему пути - использовать функционал u-boot - загрузка и прошивка в подходящий накопитель или отладка по сети..
в чем писать - не знаю.. вероятно можно в голом gcc - где собственно собираются u-boot и kernel..
дак почитайте в доке на IAR или на их сайте - поддерживают ли они мотороллу?
Спасибо. Более-менее понятно.
Посмотрел в иаре есть поддержка imx535, насколько сильно он отличается от 6го? Можно-ли компилить под него и потом залить в 6й, можете вкратце об этом?
я плотно в архитектуру не лазил и допускаю, что модульная совместимость может быть (на уровне отдельных кор (i2c. espi)), но в хидерах по адресам регистров совпадений не видел..
согласно вики http://en.wikipedia.org/wiki/I.MX#i.MX53_family
imx5 - cortex A8
imx6 - cortex A9
собирал на imx6q ядро для imx53 - собралось и работает..
мое мнение по поводу IAR - врядли, в пределах своего семейства было бы несложно..
кстати, как вариант взять кит на imx535 и плату конвертера rgb24-hdmi, АРМ и знать не будет, что потеет на hdmi выход
упс.. сходил на IAR посмотрел, так поддержка то есть, например: MCIMX6S5 Yes Yes Yes No No
согласно маркировке это imx6s (solo)
Попробовал скомпилить простенькую прогу - ногодрыг портом - вроде как скомпилилось.
Возник второй вопрос - как все это дело теперь залить в контроллер и запустить? Есть какие-то мысли по этому поводу?
По частям:
1) в каком формате компилить бинарник - есть elf по умолчанию и еще intel hex, binary, motorola и т.д.?
1. я бы скомпилировал обычный бинарник - там главное понять в каком порядке будут байты, MSB<>LSB (т.н. endian)
2. если есть живая плата, то любым доступным способом, например:
- складываете свой бинарь на uSD
- выкладываете в доступ по tftp
потом останавливаете загрузку u-boot
загружаете бинарь в память, например в область, куда грузится ядро и далее команда go адрес-куда-загрузили-бинарь
после этого юбут не рассуждая, делает туда безусловный переход..
если юбута нет, то разбирайтесь с фирменной утилитой от фрискейла, которая работает с голым камнем по юсб протоколу..
по ходу так и будет. Только тогда каким образом грузится убут? Наверно с той-же сд-карты... Может как-то можно мой бинарник вместо него "подкинуть"?
Может глупые вопросы задаю конечно, но до сих пор работал только с флешовыми контроллерами, так что больно не пинайте
по первой части - в толстом мане на камень есть раздел посвященный стратегии загрузки АРМа, там описаны способы, устройства и форматы..
по второй - конечно можно, только ваш бинарник должен выполнить все необходимые функции (настройка pll, инит DDR памяти и etc).. рассматривайте бинарник юбута, как специализированный стендалон..
здесь не принято пинать просто так, хотя особо упертых или агрессивным надо бы..
по поводу загрузки - я не зря упомянул об SDK, внутри помимо примеров работы с отдельными узлами, есть еще каталог с доками..
и там есть вводная типа:
This document’s purpose is to help software engineers create board bring up and test
code for their own custom boards based on the i.MX 6 series of application processors. It
provides example driver code that demonstrates the proper initialization, boot up and
basic I/O operation of i.MX 6 peripherals and controllers. This code can be implemented
into test suites or boot code to help ensure proper board functionality.
а в разделах написано, например для EIM:
7.8 Testing the driver
Build the SDK with the following command:
./tools/build_sdk -target mx6dq -board sabre_ai -board_rev a -test eim
This generates an ELF and binary file into the following locations:
• output/mx6dq/sabre_ai_rev_a/bin/mx6dq_sabre_ai_rev_a-eim-sdk.elf
• output/mx6dq/sabre_ai_rev_a/bin/mx6dq_sabre_ai_rev_a-eim-sdk.bin
Download mx6dq_sabre_ai_rev_a using RV-ICE or Lauterbach Trace32. Alternately, burn
mx6dq_sabre_ai_rev_a to an SD card with the following command (entered in Windows's
"Command Prompt" window):
cfimager-imx -o 0 -f mx6dq_sabre_ai_rev_a-eim-sdk.bin -d g:(SD drive name in your PC)
Finally, power-up the board to run the test.
видите знакомые слова "bin" и "SD"?
я все же посоветую сначала поработать из-под линукса - с комфортом посмотреть на работу интересующих узлов, сделать дампы регистров и настройки PLL, потом отладить свои бинарники запуская из u-boot.. и только потом пробовать полностью отойти от поддержки u-boot и все настройки делать самостоятельно..
абстрактно: в чем то АРМ похож на очень большую и быструю однокристалку, но на тонкости изучения и настройки вы можете убить очень много времени - проще использовать чьи-то результаты и сосредоточиться на решение своих задач..
Спасибо за советы. Ситуация начинает прояснятся потихоньку...
Посмотрел в своем примере, там есть минимальная инициализация камня, в части pll, gpio и еще чего-то там...
Буду ждать плату и пробовать.
А если есть jtag-отладчик, можно-ли для тестов, заливать прогу прямо в память и запускать? Чтоб не писать каждый раз сд-карту и т.п.
В стм32 для этого я менял параметры линкера и в программе базовый адрес векторов nvic, тут есть что-то подобное?
PS. Случаем, не в курсе, по поводу энергопотребления данного камешка? Где-то слышал, что больно сильно греется...