Разработка программатора на основе технологии Boundary Scan

Заказчик получил программу, которая относительно быстро (менее, чем за 5 минут) «прошивает» все необходимые микросхемы, припаянные к плате, осуществляя их взаимную привязку друг к другу.

Заказчик

BVG Group

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



Ситуация

Заказчику требуется «прошить» ряд микросхем, расположенных на одной и той же плате. При этом микросхемы должны содержать информацию, зависящую друг от друга, что делает процесс предварительного «прошивания» на программаторе затруднительным, так как нужно чётко учитывать разнородные микросхемы, чтобы они были собраны в одну группу и не перемешивались. Таким образом самый приемлемый вариант – «прошивать» микросхемы уже после того, как они припаяны к плате.



Решение

Микросхемы связаны друг с другом следующим образом:

micro.jpg

Типовое решение – «прошить» в CPLD временную «прошивку», позволяющую получить доступ интерфейсам I2C (2 полноценных экземпляра) и SPI через линии внешней среды. Далее подключить устройство к некоему специализированному программатору, «прошить» все оконечные микросхемы, после чего заменить «прошивку» CPLD на рабочую. Однако этот путь имеет два лишних шага – «прошивание» временной «прошивки» и подключение к внешней среде с последующим переключением снова на программирование рабочей «прошивки» через JTAG.

Известно, что интерфейс JTAG подразумевает доступ к любой ножке CPLD через механизм Boundary Scan. Этот механизм описан в большом количестве статей в сети Интернет, а также (кратко) в документах на сайте Altera. Поэтому было принято решение обеспечивать работу протоколов, управляя ножками через Boundary Scan.

Для реализации были найдены описания устройства USB Blaster фирмы Altera. Как оказалось, подавляющее большинство описаний – неполноценные. Они позволяют сделать аналог устройства USB Blaster, который будет работоспособен, но не учитывают некоторых особенностей устройства. Лишь из некоторых описаний удалось частично выяснить, что, например, неиспользуемый (по всем документам) в режиме JTAG бит CS должен быть в единице. Светодиод обязательно должен загораться, так как без этого не откроются выходные каскады.

Типовые решения, реализованные с помощью USB Blaster, также в подавляющем большинстве не подходили для работы, так как использовали его в «медленном» режиме Bit Bang. Это не критично для однократного «прошивания» CPLD, но неприемлемо при использовании режима Boundary Scan для организации последовательных интерфейсов. Однако быстрый «байтовый» режим хорошо документирован, поэтому он был реализован самостоятельно.
«Прошивание» самой ПЛИС ведётся через механизм Jam Player, взятый с сайта фирмы Altera.



Результат

Заказчик получил программу, которая относительно быстро (менее, чем за 5 минут) «прошивает» все необходимые микросхемы, припаянные к плате, осуществляя их взаимную привязку друг к другу. При этом из аппаратных средств требуется только USB Blaster фирмы Altera (или аналог – Terasic Blaster фирмы Terasic). Всё остальное решается через использование механизма Boundary Scan, реализованного через шину JTAG.



Используемые технологии

Для работы с самой ПЛИС для решения данной задачи не использовалось никаких средств разработки. До конца программирования периферийных микросхем она остаётся «чистой», уровни на её выводах изменяются и анализируются через механизм Boundary Scan.

Нижний уровень для работы с USB Blaster сделан на основе библиотеки с сайта FTDI, так как сам USB Blaster основан на микросхеме этой фирмы. Функции для работы в «байтовом» режиме написаны самостоятельно. Библиотека для работы с JTAG была разработана ранее для проекта по созданию программно-аппаратного комплекса системы наведения при помощи спутниковой навигации Precision Navigation and Recognition System (PNRS).

Разборщик BSDL файлов найден в сети Интернет. Программный модуль, получающий доступ к ножкам ПЛИС на основе этого BSDL файла и порта JTAG, разработан самостоятельно.

Библиотеки для доступа к шинам SPI и I2C были разработаны ранее, в рамках проекта они просто адаптированы к новому физическому каналу. Аналогично взяты разработанные ранее библиотеки для «прошивки» EEPROM и MCU.

Для «прошивки» самой CPLD взят адаптированный ранее в рамках проекта PNRS механизм JAM Player фирмы Altera. Адаптация заключалась в том, что этот механизм распространяется в виде множества файлов на языке Си с запутанной структурой и использованием глобальных переменных. В результате удалось изолировать все функции и переменные в логичной иерархии С++ классе.