Мой любимый инструмент (вместо осциллографа).

Я тут поддавшись общей панике всеобщему увлечению микроконтроллерами STM32 то же начал пытаться их программировать. Приобрел для изучения плату STM32L1 discovery kit. Сижу осваиваю, читаю мануалы, даташиты и примеры кода.

В принципе дело освоения нового для меня микроконтроллера вполне движется успешно. А написать я собственно хочу даже не о самом микроконтроллере, а об инструменте, который помогает мне в повседневной работе.

Так уж получилось, что уже давно не пользуюсь ни осциллографом ни логическим анализатором. Все это мне заменяет плата с FPGA Altera Cyclone III. Еще точнее – это плата Марсоход2.



Ее я и использую в качестве моего измерителя временных интервалов или логического анализатора. Мне кажется это весьма удобным, вот и хочу поделиться с сообществом своей методикой использования платы.

Итак, у меня есть плата Марсоход2. На ней стоит FPGA и с нее на гребеночки выведены 16 IO сигналов. Еще на плате стоит микросхема FTDI которая одновременно используется как USB-JTAG программатор и как канал последовательного порта.

Даже если Вы не знаете, как программировать FPGA это в принципе и не очень нужно.

Конечно, придется установить среду разработки Altera Quartus II Web Edition и даже сделать простейший проект, вот такой:



Частота генератора на плате Марсоход2 100Мгц. Эту частоту можно всячески делить умножать с помощью FPGA PLL. Я сделал у PLL четыре выхода 100МГц, 10МГц, 1МГц и 16МГц. Конечно нужно еще назначить для FPGA расположение пинов микросхемы для IO сигналов (тех, что выходат на гребеночку платы) и собственно сигнала CLK100MHZ. Это это не сложно и это пока все.

Дальше запускаем инструмент Altera SignalTap (входит в комплект Quartus II). Эта программа позволяет захватывать нужные сигналы из ПЛИС и отображать их в нужном виде.



Вот это уже и есть место для творчества. Здесь в SignalTap можно задавать какие IO сигналы нужно оцифровывать (4), с какой частотой их оцифровывать (1), сколько выборок оцифровывать (2), в какой момент начать и закончить оцифровку (3).

В данном примере скриншота я захватываю 16 тыс. выборок от двух сигналов: IO[9] и четвертый выход PLL 16МГц. Захват происходит с частотой 100МГц. Начинается оцифровка как только IO[9] поменяет свое состояние.

Теперь проект нужно откомпилировать квартусом и загрузить образ в ПЛИС. Загрузка образа, как и захват цифровых сигналов происходит через USB кабель, которым плата Марсоход2 подключена к ПК.

Это собственно был мой первый эксперимент с платой STM32L1.
Известно, что там стоит микропроцессор с внутренней частотой HSI 16МГц.
Мне хотелось посмотреть, какую частоту чисто теоретически можно получить на микроконтроллере программно. Какая частота получится на GPIO микроконтроллера, если я напишу вот такой код:

GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;
  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_DOWN;
  GPIO_InitStruct.GPIO_Speed = GPIO_Speed_40MHz;
  GPIO_Init(GPIOA, &GPIO_InitStruct);
  GPIO_LOW(GPIOA,GPIO_Pin_1);
  GPIO_LOW(GPIOA,GPIO_Pin_2);
  
    while(1)
  {
    GPIO_TOGGLE(GPIOA,GPIO_Pin_1);
  }


Ну вот с помощью Altera SignalTap мы теперь можем легко померить и увидеть всякие сигналы в живую. Кроме того, я не зря вывел в оцифровку еще и 16МГц сигнал с PLL. Примерно на такой частоте работает микроконтроллер. Значит можно будет визуально сравнить программную сгенерированный сигнал на GPIO с частотой микроконтроллера.

Соединяю мой FPGA анализатор с платой STM32:



Ну и смотрю с помощью SignalTap, что там на сигнале PA1 происходит. А происходит вот что:



Программно сгенерированная частота получится где-то в 14 раз ниже, чем тактовая микропроцессора.

Следующий эксперимент, который я проделал – это исследование реакции на прерывание. Хотелось бы посмотреть визуально как это происходит по времени.

Переделал проект для ПЛИС, чтобы оцифровывать не один, а два внешних сигнала IO[9] и IO[11]. Их я подключаю двумя проводами к плате STM32L1 к пинам PA1 и PA2 соответственно.

На этот раз программа для контроллера выглядит вот так:


// Enable GPIO clock
  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
  
  GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;
  GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;
  GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_DOWN;
  GPIO_InitStruct.GPIO_Speed = GPIO_Speed_40MHz;
  GPIO_Init(GPIOA, &GPIO_InitStruct);
  GPIO_LOW(GPIOA,GPIO_Pin_1);
  GPIO_LOW(GPIOA,GPIO_Pin_2);
  
  //enble timer clock
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6,ENABLE);

  //program timer
  TIM6->PSC = 1000 - 1; //want about 8KHz
  TIM6->ARR = 1;
  TIM6->DIER |= TIM_DIER_UIE;
  TIM6->CR1 |= TIM_CR1_CEN;
  NVIC_EnableIRQ(TIM6_IRQn);
  
  while(1)
  {
    //poll pin
    GPIO_TOGGLE(GPIOA,GPIO_Pin_1);
  }
}

//TIM6 interrupt handler
void TIM6_IRQHandler(void)
{
GPIO_HIGH(GPIOA,GPIO_Pin_2);
TIM6->SR &= ~TIM_SR_UIF; //reset flag UIF
GPIO_LOW(GPIOA,GPIO_Pin_2);
}


Таким образом, основной поток программы продолжает тоглить, устанавливать и сбрасывать PA1. Программа прерывается таймером с частотой 8КГц и обработчик таймера так же устанавливает и сбрасывает теперь уже другой пин PA2.

Теперь в Altera SignalTap я вижу действительно 8КГц на PA2 (он же IO[11] для платы Марсоход2):



Подробнее можно рассмотреть и само прерывание:



Можно попробовать оценить время реакции на прерывание как 10-15 тактов микроконтроллера. В принципе вполне прилично.

Вот собственно краткий рассказ о моем любимом инструменте: Altera SignalTap + плата Марсоход2 с FPGA Cyclone III.

Конечно, тут еще много можно было бы рассказать. Использование ПЛИС позволяет не только захватывать для анализа внешние сигналы, но и еще выдавать нужные воздействия для того же микроконтроллера. На ПЛИС вообще много чего можно сделать, тот же USB анализатор, или даже FM радиопередатчик.

Логику самого захвата можно сделать более интеллектуальной, от нескольких событий или их комбинаций.

В общем – незаменимый инструмент.
  • +7
  • 21 октября 2013, 14:10
  • privet

Комментарии (24)

RSS свернуть / развернуть
Тут, правда, надо сказать что счастье usb анализатора, не просто в захвате данных, а в анализаторе протоколов. С другой стороны, если Altera SignalTap умеет отдавать намеренное в каком либо текстовом файле. То его можно скормить программе того же Saleae.
0
PS Поспешил, SignalTap экспортирует данные, а вот кнопочки импорт в saleae, кроме своих же файлов, нет.
0
Учитывая что клон saleae спалить не так жалко, как марсоход, плюс она удобнее в работе: за идею пять, за забивание гвоздей микроскопом неуд )))
+3
  • avatar
  • N1X
  • 21 октября 2013, 18:09
Да, но плисина может захватить данные на частотах куда выше чем saleae.
0
а вот сигналтап накладывает серьезные ограничения.
0
например?
0
jtag, посредством которого общается сигналтап в принципе медленная штука, а памяти под буфер в плисине маловато
0
Это Altera USBBlaster медленная штука, потому, что USB11.
В плате Марсоход2 свой JTAG программатор MBFTDI, на микросхеме FT2232HL — это уже USB2 и тут побыстрее все работает.
Памяти в ПЛИС платы 414Кбит — мне хватает
0
нет. у jtag свои ограничения. usbee дает 24 мегасемпла (на счет размера памяти не уверен), мне по сути тоже хватает, не думаю что у вас сильно больше получится.
0
В плисине семейства Cyclone III (c cycloneII не работал) — 100 MSPS и выше, каналов столько, сколько ножки и память позволяют. Да и usbee, лично у меня, стабильно работает только на частотах <= 12 MSPS. Так что смысл в этом есть, особенно если потом сигналы (например с АЦП) гонять по прошивке и смотреть поэтапно их прохождение — замечательная вещь.
0
именно. смотреть внутри — вещь незаменимая. а вот внешние сигналы проверять вариант далеко не лучший
0
об чем спор? я говорю что им сигналы более высокочастотные посмотреть можно, вы с этим не согласны? — мотивируйте, или вы умеете разгонять до таких же скоростей usbee? никто не спорит что в своей нише, до 10 мспс, usbee (если он есть) — лучший вариант радиолюбителя, но когда начинаешь работать с оперативной памятью, ccd матрицами, жк экранами с параллельным интерфейсом, быстрыми ацп то выбор отладочных средств несколько сужается ;).
0
работая с жк экранами мне usbee обычно хватает ) с памятью обычно просто проблем нет, с матрицами не работал. в целом в общем больше и не нужно
0
стабильность упирается в качество usb порта (хотя казалось бы с чего) и кривость софта. saleae тут получше себя ведет
0
блин! как микроскопом гвозди забивать :)
0
хм… вот чего-то не понимаю я.
Вы так говорите, будто плата с ПЛИС это какой-то космический корабль, о котором можно только мечтать.
Да нет же.
Плата с ПЛИС — это обычное рядовое дело, не дорого и практично и удобно.
Может мои примеры и не замысловаты, они только для демонстрации принципа. Вот понадобится проанализировать сложную комбинацию сигналов — это можно с ПЛИС быстро и удобно сделать.
+3
да что непонятного?
марсоход:
третий циклон+срам(вроде как)+2232HL
салеае:
68013
сравним цену и сложность? а юзабилити у салеае таки получше будет. и да, под usbee вроде как сдк есть, так что можно и свои анализаторы писать.
0
уговорили, куплю )
0
Вопрос по плате, посмотрел её схему — не нашел там памяти для хранения конфигурации (прошивки) ПЛИС, она только с компом работает или все же может грузиться и работать автономно?
0
памяти для прошивки на плате нет.
Существует шилд, который можно установить на штырьковые разъемы и на шилде есть флешка для прошивок
0
К сожалениию да. Когда ещё на сайте марсохода шло обсуждение что надо на плате — все хотели память для конфигурации, но как всегда решила всё цена — память оказалась, непонятно почему, ценой как сама плис. Поэтому её вынесли на шилд…
0
цена EPCS4 — 90 рублей. можно использовать аналог — M25P40, ценник в два раза меньше.
0
Год назад они не смогли нати их по вменяемой цене в нужном количестве. А вот что можно подключить M25P40 я и незнал :) Знал что это возможно у XILINX и даже десяток их у меня есть…
0
Прекрасное использование подручных средств.
Но проигрывает обычному лог. анализатору практически во всём.
Нет анализа стандартных протоколов.
Нет защиты входов.
Очень маленький буфер данных.
Не самый удобный интерфейс чтобы смотреть сигналы.

Попробуйте поиграться даже с самыми дешевыми кетайцами и софтом Saleae/USBee, который умеет LIN, IIС и многое другое. Небо и земля по удобству.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.