Среда разработки для Intel Quark D1000
Intel System Studio for Microcontrollers включает в себя C/C++ компилятор, основанный на LLVM (в его состав входят ассемблер, компоновщик и библиотеки времени выполнения C/C++), GDB-отладчик и внутрисхемный отладчик OpenOCD. ISSM можно использовать как самостоятельный набор инструментальных средств, но в нём есть и плагины для интеграции с IDE Eclipse.
Открываем проект прошивки в ISSM
Прежде чем создавать проект для Intel Quark D1000, нужно установить необходимое программное обеспечение. А именно: IDE Eclipse для C/C++ разработчиков, ISSM, Putty и Zadig. Инсталлируя программы, старайтесь внимательно следовать руководствам, которые можно найти в директории установки ISSM, в папке «docs». Здесь мы так же предполагаем, что вы разобрались с примерами «Hello World» и «FW» для IDE Eclipse. Если это не так, пожалуйста обратитесь к разделу руководства пользователя «Using the Eclipse IDE». Его тоже можно найти в вышеупомянутой папке «docs».
После того, как всё будет готово к работе, запустите Eclipse, воспользовавшись командным файлом «runEclipse.bat», указав в качестве аргумента ту папку, в которую установлена Eclipse. Затем откройте проект прошивки, в нашем случае это «FW-D1000», и выполните его сборку. Ошибок быть не должно.
После того, как прошивку удалось успешно собрать, найдите файл «FW-D1000.elf», который находится в папке проекта «Binaries». Его содержимое будет таким же, как на рисунке ниже. Если вам не удаётся увидеть разделы образа с информацией о символах, нужно проверить, установлена ли на компьютере утилита «objdump». Если она действительно не установлена, обратитесь к разделу «Viewing GNU Elf and Map Files» руководства пользователя для того, чтобы установить «objdump» и настроить путь к ней на компьютере.
Дамп объекта в файле FW-D1000.elf
Передача данных из обработчика аппаратного прерывания
После того, как стало ясно, что пример «FW-D1000» нормально компилируется, его можно изменить под собственные нужды. Здесь мы собираемся поменять строку, которую выводит в окно терминала программа «PushButton» из примера «FW-D1000».
Перейдите в папку «Applicaition» проекта «FW-D1000». В ней имеется 10 приложений-примеров для Intel Quark D1000. Просмотрите файл «AppConfig.h» для того, чтобы выяснить, какое именно приложение будет интегрировано в проект, и, при необходимости, измените файл так, чтобы этим приложением было «PUSH_BUTTON_TEST». Вот как выглядит файл, в котором включена интеграция в готовый проект того, что нам нужно.
//#define MAN_DECODING
//#define POWER_MANAGEMENT_TEST
#define PUSH_BUTTON_TEST
//#define ADC2SPI_TEST
//#define ADC2GPIO_TEST
//#define DDS_TEST
//#define OSCILLATOR_RE_TRIM
//#define PWM_TESTING
//#define MOTOR_CTRL
//#define UART_WAKE
Теперь перейдите в начальный файл приложения, «PushButton.c», который находится в папке «Applications», и слегка отредактируйте код. В результате, когда программа запустится устройстве, вы точно поймёте, что исполняется именно её изменённый вариант. Здесь мы подправили строку «rts_interrupt_msg». Эта строка будет выводиться каждую секунду по прерыванию часов реального времени (Real Time Clocl, RTC).
////////////////////////////////////////////////////////////////////////////////
// это функция обратного вызова для прерывания часов реального времени
////////////////////////////////////////////////////////////////////////////////
char rtc_interrupt_msg[] = "\r\nSean RTC interrupt!";
void rtc_callback_function_PB(void)
{
PUSH_UART(rtc_interrupt_msg,sizeof(rtc_interrupt_msg),0,0);
rtc_callback(rtc_callback_function_PB); // повторно регистрируем функцию обратного вызова
}
Изменив файл, сохраните его. Теперь всё готов к компиляции и прошивке образа на устройство.
Компиляция и прошивка образа на D1000
Для того, чтобы прошить скомпилированный образ на D1000, нужно установить JTAG-соединение с платой. В подробностях это описано в разделе руководства пользователя «Starting Debugging Session». Прежде чем открыть перспективу OpenOCD в Eclipse, проверьте, удалось ли OpenOCD успешно прочитать код «IdCode» целевого CPU, совпадает ли он с ожидаемым («Expected») кодом процессора.
В этом примере мы подключились по JTAG к D1000 и установили OpenOCD-соединение до запуска Eclipse. Иногда Eclipse не может прочитать «IdCode» и показывает вместо кода нули. Если это произошло, нажмите кнопку перезагрузки и посмотрите, удалось ли OpenOCD верно определить «IdCode». После того, как всё определилось, и вы дождались появления сообщений, вроде тех, что приведены на рисунке ниже, можно прошивать изменённый образ на D1000.
Консоль OpenOCD при подключении к эталонной плате D1000
После того, как удалось установить JTAG-соединение с платой D1000, соберите проект «FW-D1000» в IDE Eclipse. Если в ходе сборки ошибок не обнаружится, в папке «Binaries» появится файл образа «FW-D1000.elf». Его можно будет прошить на устройство, воспользовавшись отладочной перспективой «Debug» в Eclipse, которая настроена на использование GDB через OpenOCD.
Настройка отладчика для работы с эталонной платой D1000 с использованием OpenOCD
После прошивки образа появится сообщение об успешном завершении операции в консоли OpenOCD (взгляните на рисунок с консолью выше). В данном примере нужно, чтобы отладчик остановил процесс в функции «main» для пошагового исполнения.
На следующем рисунке показано, как задать точку останова на входе в «main». Отладчик, после завершения прошивки и загрузки образа, остановит процессор в начале функции и будет готов к пошаговому исполнению программы.
Задаём точку останова в функции «main»
Теперь откроем консоль последовательного порта с помощью Putty. Нужно это для того, чтобы видеть UART-сообщения, которые будут выводиться, когда программа отправляет заданное сообщение по аппаратному событию прерывания часов реального времени (RTC) или при нажатии на кнопку (ButtonPress).
При подключении к плате D1000 в нашем распоряжении будут два USB-устройства. А именно, одно – это Dual RS232 HS, которое используется для JTAG-соединения OpenOCD, а второе – это USB-интерфейс к последовательному порту. Перед запуском приложения «PushButton» нужно открыть подключение к последовательному порту, используя клиент Putty со следующими настройками: Baudrate-19200, Flow Control-XON/XOFF.
Отладка: пошаговое исполнение кода
Когда завершится прошивка образа, начнётся отладка кода, с самого начала функции «main», как показано на рисунке ниже. В этом примере программа «PushButton» запускается, а затем отладчик ожидает вызова функции «PushButton», главной функции приложения. Тут же можно просматривать код, написанный на языке высокого уровня, а так же – машинные команды в окне «Disassembly», в котором подсвечивается инструкция текущего указателя команд.
Теперь можно приступать к отладке, выполнять шаги с обходом процедур (step over), шаги с заходом в процедуры (step into), возобновлять (resume) исполнение программы.
Отладчик остановил процессор в начале функции «main»
Здесь мы выполняем шаг с заходом в процедуру, затем видим исходный код входной функции «PushButton», отладчик открывает «PushButton.c» для того, чтобы указать на следующую исполняемую функцию.
Шаг с заходом в процедуру, выполненный из «main»
Запуск примера на D1000
В итоге, мы можем возобновить исполнение программы, она будет работать в обычном режиме. Если теперь взглянуть на окно терминала Putty, можно увидеть журнал сообщений от D1000. Сообщения, содержащие именно ту строку, которую мы выше модифицировали в коде примера, выводятся по прерываниям часов реального времени.
Тестовый вывод программы, выполняемой на D1000
Об аппаратном обеспечении
Эталонная плата для проведения технических испытаний (CRB V2) содержит следующие компоненты:
- Микроконтроллер Intel Quark D1000.
- Акселерометр.
- Флэш-память SPI.
- Адаптер Bluetooth LE.
- Модуль последовательного порта для WiFi.
- Конвертер последовательного порта для USB и JTAG.
- Модуль электропитания.
- Цепь зарядки батареи.
Микроконтроллер Intel Quark D1000
У контроллера имеется 24 вывода GPIO, многие из которых многофункциональны (подробности о них смотрите в таблице). CRB V2 обеспечивает подключение этих выводов к контактным площадкам монтажной платы, которая очень напоминает Arduino, но не полностью совместима с этим стандартом. Стоит отметить, что несколько выводов, кроме того, подключены к периферийным устройствам, размещённым на плате. В некоторых случаях их нельзя использовать в роли многофункциональных выводов. Они отмечены в таблице и в описании аппаратных компонентов платы, которое приведено ниже. А именно, при описании выводов приведены их названия для микроконтроллера D1000, для Arduino и для платы CRB V2. Обратите внимание на то, что интерфейс SPI применяется для связи со всеми встроенными в плату периферийными устройствами с использованием следующих контактов:
- MST_M2SC (выход сигнала синхронизации передачи данных SPI, Arduino — D13, CRB v2 – XPB5).
- MST_M2SD (выход последовательной передачи данных (MOSI) SPI, Arduino – D11, CRB v2 – XPB3).
- MST_S2MD (вход последовательного приёма данных (MISO) SPI, Arduino – D12, CRB v2 – XPB4).
Подключение выводов Intel Quark D1000 к CRB v2
Плата CRB V2, кроме того, включает в себя некоторые другие компоненты, поведением которых нельзя управлять с помощью микроконтроллера D1000.
- FTDI FT2232H – микросхема конвертера последовательного порта для USB и JTAG. Она используется для обеспечения консольного (UART) подключения к D1000, для программирования и отладки с использованием интерфейса JTAG. Светодиоды D6 (жёлтый) и D7 (зелёный) подключены к FTDI FT2232H, они мигают, когда устройство принимает или отправляет данные.
- Контроллеры Linear Technologies LTC4414, Texas Instruments BQ24080, Maxim Integrated MAX8869 применяются для организации электропитания и зарядки батареи. Светодиоды D10 и D11 подключены к BQ24080 и служат для индикации состояния заряда батареи.
Схема платы Intel Quark D1000 CRB v2
Выводы
Теперь вы знаете, как работать с прошивками для Intel Quark D1000 в IDE Eclipse. Вы умеете их редактировать, записывать на устройство, тестировать и отлаживать код. Так же мы рассказали об эталонной плате для проведения технических испытаний (CRB V2), которая, помимо Quark D1000, включает в себя набор дополнительных компонентов. Здесь и здесь вы можете найти подробности об Intel Quark D1000, а вот тут – об ISSM.
Комментарии (8)
x893
13.05.2016 21:13Видимо для отчетности надо написать что-нибудь.
Про Keil что-то не видно писателей.
GarryC
16.05.2016 15:25Меня особенно порадовало представление данного камня как низкопотребляющего — лет десять назад это еще было бы правдоподобно, но в 2016 иметь такие параметры потребления — это просто неприлично.
den1s1
16.05.2016 21:33В прошлом году на одной из конференций про IoT видел выступление представителч Интел (русский парень), который в том числе презентовал эти кварки. Я задал вопрос, всерьез ли Интел планирует войти на рынке микроконтроллеров. Ответ был, что скорее не войти, а вернуться. Я не большой знаток истории электроники, но не уверен, что Интел на этом рынке вообще присутствовал.
Ну а документация на камень, конечно, ничего кроме снисходительной улыбки не вызывает.olartamonov
17.05.2016 10:35-1Ядро Intel 8051 до сих пор в дешёвых микроконтроллерах используется на каждом шагу (хотя лично я эту стюардессу уже давно закопал бы — и категорически рад, что в областях, которыми мы занимаемся, наконец начали доминировать Cortex-M).
Но D1000 действительно… странный. Кто-то из Intel может объяснить, почему в нём нет ШИМ? «Мы провели исследование и выяснили, что ШИМ не нужен»?
И почему он стоит таких конских денег? 36 КБ флэша, 8 КБ ОЗУ, жиденькая периферия — и больше $1 оптом? Да что там, больше $5 оптом? А за что и зачем?
Daffodil
Непонятно кому адресован этот перевод, не вижу этот микроконтроллер в продаже в России. STM32 продается везде, а quark d1000 нет ни у кого http://efind.ru/icsearch/?search=quark+d1000
SvetlanaGEm
Можно купить у Mouser и Arrow http://www.intel.ru/content/www/ru/ru/embedded/products/quark/sample-and-buy-page.html
olartamonov
То есть, если говорить прямым текстом, в разработке, претендующей на какую-то серийность, это использовать нельзя.
И это даже если не трогать вопроса об общем унынии D1000 — это простенький и дешёвенький микроконтроллер с крайне ограниченным набором периферии, единственным серьёзным отличием которого от конкурентов является то, что конкурентов используют все, а D1000 — никто.