PSoC – О приятном и не очень

Делюсь личными впечатлениями. Возможно, этот раздел следует прочитать в первую очередь,
чтобы один раз плюнуть и больше никогда и не оборачиваться при слове «PSoC»!

Учтите, что все нижесказанное относится к первому поколению PSoC. В новых семействах
PSoC3 и PSoC5 (и более старших, если они уже появились) многие недостатки уже ликвидированы.

 

Вместо введения

Любой продукт вызывает определенные эмоции. Эти эмоции меняются в процессе знакомства и пользования, переходя в осадок после того, как продукт становится привычным. Цвет осадка может быть радостным – тогда мы расхваливаем продукт и советуем его всем кому ни поподя, цвет осадка может быть и черным, что соответствует полному отторжению продукта. Не миновала сия чаша и микросхемы PSoC. Если нарисовать мое знакомство с PSoC в виде эмоциональной диаграммы, то получится что-то наподобие вот этого (красным показаны положительные эмоции, синим – отрицательные):

Первое знакомство:      
Беглое изучение тех.документации:        
Первые пробы:            
Задачи посложнее:          
Подробное изучение Справочного Руководства:          
Применение новых знаний:          
Формирование четкого представления о возможностях:        
Применение на практике:      

Знакомство с PSoC у меня началось в 2003 году, когда был объявлен конкурс на лучшую разработку с использованием этих микроконтроллеров. Тогда всем желающим были разосланы отладочные платы, имеющие на борту, помимо чипа CY8C27443-24PVI, встроенный программатор с USB интерфейсом. Плата называлась Invention Board и была выполнена в виде здоровенной 28-ножечной «микросхемы». В комплекте шел компакт-диск со всем необходимым софтом и большой библиотекой технической документации. Глаза разбегались, хотелось быстрее начать работать с железом, чтобы поскорее создать что-нибудь пиликающе-моргающее.

Динамика, изображенная на диаграмме, свойственна в той или иной степени всем продуктам, будь то туалетная бумага или автомобиль. Качества, которые восхваляются рекламой, воспринимаются мозгом в первую очередь и заставляют надевать розовые очки. Лишь по прошествии некоторого времени всплывают отрицательные моменты, замалчиваемые рекламой или, что еще хуже – справочными руководствами и описаниями. Еще через какое-то время пользователь учится мириться, либо тем или иным способом обходить отрицательные качества продукта, и тогда чаша весов вновь склоняется в положительную сторону – пользователь знает, ЧТО может, и знает КАК может.

Как это психологически принято, я начну с перечисления отрицательных моментов, и если вы их вытерпите, то завершу разговор описанием положительных сторон.
Итак,


Минусы


1. Затраты времени на разработку могут оказаться больше, чем при использовании обычных микроконтроллеров, так как приходится заниматься проектированием внутренней структуры, которой присущи значительные ограничения.

2. Очень неприятный сюрприз – оказывается, что АЦП, которые можно построить внутри PSoC, требуют не только использования нескольких блоков, но и отнимают ресурсы процессора, т.к. не являются полностью аппаратными (программная поддержка встроена в соответствующие Модули). Вдобавок все они очень медленные (хотя выбор разрядности позволяет сделать некоторый компромисс между точностью и быстродействием).

3. АЦП последовательного приближения (модуль SAR6) хоть и обладает малым временем преобразования (20 мкс), но отсутствие узла выборки-хранения на входе нивелирует это преимущество. Наличие аппаратного акселератора не означает полностью автономную работу модуля – программная поддержка отнимает почти все ресурсы процессора. Да и разрядность у этого модуля всего лишь 6 бит (возможность строить АЦП большей разрядности оговорена в Техническом Руководстве по PSoC).

4. Мне почему-то казалось, что раз массив назван «аналоговым», то и работать он должен непрерывно. Но это оказалось справедливым только для 1/3 аналоговых блоков. На этих блоках (CTB) могут быть построены только усилители и компараторы. Другие блоки – SCB (из которых строятся фильтры, интегрирующие звенья, модуляторы и проч. узлы) – тактируются высокой частотой (неперекрывающимися фазами Ф1 и Ф2) и дискретизируют сигнал, что приводит к нежелательным эффектам. На выходе этих блоков присутствует пульсирующий сигнал, что надо учитывать при проектировании структуры (в особенности – следить за правильной фазировкой блоков при их соединении в цепочки).

5. Запись во FLASH требует указания текущей температуры кристалла. Это не только усложняет процедуру записи, но и требует размещения специального Модуля Пользователя – датчика температуры FlashTemp (а его точность без калибровки составляет всего лишь 20 С). Можно задаться фиксированным значением температуры, например 25 С, но тогда не будут гарантированы результат и количество циклов перезаписи при различных температурах эксплуатации. К тому же запись во FLASH приостанавливает основной поток команд.

6. В чипах с объемом памяти более 256 байт используется страничная организация, требующая дополнительных манипуляций с регистрами-указателями. Это не только удлиняет код и снижает быстродействие, но и способствует появлению ошибок при программировании.

7. Аккумуляторная архитектура центрального процессора означает шаманские танцы вокруг регистра «А». К счастью, в системе команд M8C есть много инструкций в обход аккумулятора.

8. Платный (и не очень хороший) компилятор Си. Для версии PSoC Designer 4.4 (и старше) появилась альтернатива – компилятор HI-TECH, предусматривающий работу в бесплатных режимах – неограниченном по времени использования («урезанном») и 45-дневном («оценочном»).

9. Нет программного симулятора (бог бы с ней, с аппаратной частью, дайте нам возможность «погонять» хотя бы процессорное ядро!). В этом вопросе Cypress предполагает дополнительное вложение денег в покупку аппаратных отладочных средств. Имеющийся симулятор работает с командной строки; а я так и не научился им пользоваться.

10. Не все возможности архитектуры PSoC реализованы в Модулях Пользователя. Для осуществления многих задумок может потребоваться прямая модификация управляющих регистров (из тела программы). Это предполагает хорошее знание возможностей PSoC, долгий поиск соответствующей информации в справочных руководствах, а также многочисленные пробы и ошибки.

11. Недостаточная гибкость в соединениях модулей между собой, как того хотелось бы. Это может привести даже в полное уныние. Когда я впервые увидел название «Счетчик» (т.е. модуль «Counter»), мне почему-то представился цифровой счетчик с многочисленными выходами (что-то наподобие 155ИЕ5), которыми я мог бы свободно распоряжаться. На самом деле даже 32-разрядный модуль Counter32 (все счетчики работают на уменьшение) имеет только два аппаратных выхода – сигнал перехода через нулевое значение и результат сравнения с некоторой константой. Значение счетчика считывается через специальные регистры, т.е. он фактически предназначен для подсчета событий.

12. Уже неприлично (по теперешним меркам) иметь 24 МГц тактовой частоты, 8-разрядное ядро и несколько тактов на исполнение инструкции.

Плюсы


1. Действительно, массив аналоговых и цифровых блоков позволяет многие задачи решать аппаратно (освобождаются ресурсы центрального процессора).

2. Количество внешних, особенно – активных, компонентов (так называемой «обвязки») фатально уменьшается, вплоть до почти «голой» микросхемы PSoC (справедливо для устройств малой и средней сложности).

3. Если вам понадобится иметь много каналов UART, независимых ШИМ-генераторов или, например, модулей ЦАП-АЦП – это не проблема. Только приемопередатчик I2C может быть единственным, поскольку это фиксированный аппаратный ресурс.

4. Есть АЦП интегрирующего типа – с их помощью можно не только ослаблять сетевые наводки 50/60Гц, но и применять эффективную обработку сигнала на аппаратном уровне. Их разрядность варьируется и достигает 14 бит.

5. Индивидуальная настройка и большое разнообразие режимов у линий ввода-вывода, а также их хорошая нагрузочная способность (25 мА на цифровых и 40 мА на аналоговых выходах). Есть способ напрямую управлять жидкокристаллическими индикаторами.

6. Возможность питания устройства от одного NiCd-аккумулятора 1,2В (для этого на кристалле предусмотрен специальный преобразователь напряжения, хоть и маломощный, но требующий только двух внешних компонентов – индуктивности и диода).

7. Хорошая система команд центрального процессора (некоторые почему-то считают ее х51-совместимой, хотя в сущности это не так), которая не сильно утомляет и способствует малому числу ошибок при программировании на ассемблере (есть, например, команды прямой пересылки память-память mov[адрес],[адрес] и операции вида add[адрес],константа, не затрагивающие аккумулятор).

8. Среда разработки PSoC Designer интуитивно понятна и дает наглядное представление о возможностях PSoC без изучения технической документации.

9. Наличие готового программного интерфейса (API) для взаимодействия с модулями. Нет необходимости манипулировать регистрами модулей (и лезть в справочное руководство, чтобы получить соответствующую информацию).

10. Документация по внутреннему устройству PSoC очень подробна, в ней можно найти ответы на все вопросы. Модули Пользователя также хорошо задокументированы, а в PSoC Designer есть мощная справочная система.

11. Большая библиотека наработок, официально поддерживаемая фирмой Cypress (описания и «исходники» проектов). Их можно использовать в готовом виде, а можно – как отправную точку при разработке собственных устройств.

12. Широкий выбор кристаллов – с разным числом аналоговых и цифровых блоков, количеством выводов, объемом RAM и FLASH, с различными уникальными возможностями (типа поддержки USB или емкостных датчиков).

antiradio.narod.ru/psoc
Дата создания документа: 28.04.2008. Последнее обновление: 08.04.2010.