Плату «CH341A Mini Programmer» можно купить на AliExpress буквально за пару долларов и
приспособить для программирования микросхем серий CY8C21xxx, CY8C24xxx, CY8C27xxx и CY8C29xxx.
Приложение для работы с этой платой можно взять здесь:
Download PSoC Programmer CH341A (v1.22) (zip-архив 224 кБ).
Основу программатора составляет плата «CH341A Mini Programmer», которую можно купить на AliExpress
за пару долларов. Плата имеет разные модификации (моя отмаркирована как «CH341A MinProgrammer»),
существуют также другие платы, выполненные на основе микросхемы CH341A (или CH341).

Эта плата – настоящий подарок гикам и ремонтникам, поскольку позволяет не только читать и переписывать содержимое EEPROM (памяти, используемой в телевизорах и прочей электронной технике), но и получить в свое распоряжение арсенал таких распространенных интерфейсов, как UART, SPI, I2C, EPP parallel и т.д. Энтузиасты приспособили эту плату и для программирования микроконтроллеров, среди которых PSoC – увы! – не значится.
Данный проект восполняет это упущение, позволяя работать с сериями CY8C21xxx, CY8C22xxx, CY8C23xxx,CY8C24xxx, CY8C27xxx, CY8C28xxx и CY8C29xxx. Такой широкий спектр заявлен чисто гипотетически, т.к. возможности проверить работу со всеми микросхемами у меня не было. Программа тестировалась на микросхемах CY8C24794, CY8C27443 и CY8C29466, так что я буду рад любым отзывам. Адрес электронной почты есть на головной странице сайта (antiradio'''narod.ru, тему начинайте словом ANTIRADIO – чтобы обойти спам-фильтр). Уже имеются положительные отзывы о программировании CY8C21234 (в режиме «Power-On Reset») и CY8C21534.
Вначале идут две схемы программаторов, не поддерживающие режим «Power-On Reset». Они самые простые – всего два резистора. Первая предназначена для программирования микросхем в панельке, вторая – в составе устройства. Первый программатор можно выполнить в виде «шилда» (дочерней платы), устанавливаемого на плату «CH341A Mini Programmer», второй – в виде кабеля, соединяющего «CH341A Mini Programmer» с целевым устройством. Назначение резисторов – «смягчить» возможные конфликты напряжений. Длина проводов (очень важно!) не должна превышать 10 см, иначе возможны сбои при обмене данными. Для микросхем с иным количеством выводов понадобятся другие панельки (номера контактов, особенно – «XRES», уточняйте по фирменной документацией).


Ниже раскрыта часть схемы «CH341A Mini Programmer», которая используется в нашем случае. Это – для тех, кто пожелает спаять программатор с нуля. Схема взята из Интернета и в железе не проверялась. Однако, она может оказаться полезной при сравнении со схемами других плат, где стоит чип CH341A – на предмет возможности их использования. Стабилизатор +3.3 В (чье напряжение выводится на ножку 6 разъема J1) условно не показан.

Для программирования микросхем в устройстве линии P1[0] и P1[1] у PSoC должны быть незадействованы (допустима очень слабая нагрузка, например – подключенный кварц). Кроме того, следует корректно выставить переключатель напряжений SA1 – если устройство имеет собственный источник питания, переключатель должен быть в выключенном положении! Подача напряжения +5В вместо +3.3В для PSoC не критична, но может оказаться недопустимой для других узлов (например – микросхем памяти). Следует помнить и об ограниченных токовых возможностях USB порта компьютера, равно как и о возможностях встроенного стабилизатора +3.3В платы «CH341A Mini Programmer».
8- и 16-выводные микросхемы PSoC, не имеющие вывода сброса (XRES), с помощью вышеприведенных схем запрограммировать нельзя. Для вхождения в режим программирования у них требуется манипулировать напряжением питания – нужен дополнительный узел.
Доработка схем не сложна. Узел управления напряжением выполнен на транзисторе Q1. Резисторы R3 и R5 гарантируют отсутствие напряжения в состоянии «выключено». Обратите внимание, что в режиме POR на микросхему подается +5В, поэтому если в устройстве имеются узлы, не рассчитанные на это напряжение – позаботьтесь об их отключении! Отключение части схемы может потребоваться и из-за того, что транзистор Q1 не рассчитан на большую нагрузку, а также – из-за затягивания фронтов конденсаторами большой емкости (если таковые имеются в цепи питании).
Режим POR обеспечивает только новая версия PSoCProgrammerCH341A (v1.19), ссылка на которую приведена в начале статьи. Кнопкой «Settings» надо открыть дополнительные параметры и выбрать режим «PowerOn Reset» – при этом сразу же определится подключенная микросхема. Радиокнопка выбора напряжения должна оставаться в положении «+5V». На микросхему будет подаваться чуть более низкое напряжение (порядка 4,5 В), что вполне допустимо. Переключателем S1 можно отключить режим POR и использовать обычное программирование как с использованием источника питания устройства, так и питания от платы «CH341A Mini Programmer». На схеме показаны панельки только для подключения 8- и 28-выводных микросхем (J2 и J3). Для микросхем с иным количеством выводов понадобятся другие панельки – нумерацию контактов уточняйте по фирменной документации (для программирования требуются ножки «Vcc», «Vss», «P1[0]», «P1[1]» и «XRES»).

При создании этой программы ставилась цель максимально повторить интерфейс ее предшественника – приложения «CyP», написанного Ajithalayam из Индии (которое работает с «простейшим Программатором микросхем PSoC»). Не скажу, что у него все сделано достаточно удобно, зато процесс перехода потребует минимума привыкания.
При старте программа обнаружит программатор и определит тип микросхемы PSoC, с которой будет работать. Потребуется только предварительно установить драйвер, который можно взять из прилагаемого архива. Запрос на установку драйвера возникнет при первом подключении платы «CH341A Mini Programmer» (обязательно проследите, чтобы перемычка стояла в положении 1-2). Признак установки драйвера – наличие файла CH341DLL.DLL в системной папке WINDOWS/system32/ (к слову, существует и другой драйвер, который без труда находится в Интернете, превращающий эту плату в мост «USB-UART». Для этого случая перемычка, соединяющие контакты 1 и 2, должна быть снята или переставлена в положение 2-3).
Если программируемое устройство подключалось «нагорячую» (либо на него подавалось питание от его собственного источника), тип микросхемы определится только при выполнении какой-либо из процедур. Чтобы заранее знать, с чем предстоит иметь дело, из контекстного меню панели «Device Silicon ID» (вызывается правой кнопкой мышки) следует выбрать команду «Check Again», либо воспользоваться кнопкой «ChkSum» (чтение контрольной суммы).
При обнаружении незнакомой микросхемы вместо ее вменяемого названия (панель «Device Silicon ID») высветится двоичный код-идентификатор. В этом случае все операции будут производиться по типу микросхемы CY8C27xxx – в предположении, что память имеет одну страницу и объем 16 кБ. Если это не так – работа будет возможна только с частью памяти. Пришлите мне двоичный код-идентификатор такой микросхемы (включая информацию о внутренней организации памяти) – и тогда я добавлю ее в программу.
После любой процедуры программируемое устройство переводится в состояние сброса (останова), а сигнальные линии программатора – в высокоимпедансное состояние. Чтобы стартовать устройство, требуется снять галочку «XRes» в окне «Programmer».
В общем случае (при полном цикле программирования) последовательность действий будет такая:
«Load» (загрузка файла) –> «Program» (программирование) –> «Verify» (проверка правильности) –> «Secure» (программирование битов защиты)
Последовательность действий при отладке кода:
«Reload» (перезагрузка файла после очередной компиляции) –> «Program» (программирование) –> снять галочку «XRes(Stop)» (запуск кода)
Команда «Verify» может быть заменена командой «ChkSum» (проверкой контрольной суммы, о ньюансах см. ниже).
Содержимое микросхемы читается кнопкой «Read». Если в процессе чтения (или верификации) встретится защищенный блок, операция прервется, а в окне статуса появится сообщение. То же произойдет и при сбое (редко, но случается), так что если вы уверены в отсутствии защиты, просто повторите операцию.
Все операции проводятся с буфером, который помимо загружаемого кода может содержать массив битов защиты. Массив
битов защиты содержится, как правило, в файлах формата *.hex (приспособленный фирмой Cypress «Intel Hex формат»).
Биты защиты могут быть загружены отдельно с помощью файлов *.txt. Краткая информация о поддерживаемых форматах приведена в конце
статьи. Команды «Load» и «Save» позволяют конвертировать файлы из одного формата в другой (с некоторыми оговорками).
Файлы *.hex и *.rom, создаваемые средой разработки PSoC Designer, содержат один и тот же исполняемый код, однако первые содержат образ ВСЕЙ программируемой памяти, включая неиспользуемый конечный участок (который забивается кодом 0x30 – командой «HALT»), а вторые – код в минимальном объеме. В связи с этим программирование с использованием файлов *.rom происходит быстрее. Однако здесь надо учитывать тот факт, что такое «неполное» программирование приводит к тому, что контрольные суммы памяти микросхемы и исходного образа не будут совпадать (соответствующее предупреждение есть в документе AN2026b – «In-System Serial Programming (ISSP™) Protocol»). Кроме того, чтение нулевых байтов из «недописанной» области может давать ненулевой результат.
Команда «Erase» стирает (устанавливает байты в 0) сразу всю память микросхемы (включая биты защиты), и особо не нужна, т.к. соответствующая процедура вызывается каждый раз при нажатии на кнопку «Program». Команда «Clear» заполняет буфер приложения нулями (в объеме последнего загруженного в него кода), а контекстным меню кнопки «Clear» буфер можно заполнить не нулями, а выбранным кодом.
Кнопка «Settings» вызывает дополнительные настройки программы. Их не особо много – способ входа в режим программирования и выбор напряжения. Программа не меняет никакие напряжения в схеме, а только сообщает внутреннему автомату PSoC текущее значение, чтобы тот выбрал оптимальный режим. В чем заключается этот «оптимальный режим» – из документации не ясно. Можно было бы предположить, что меняются длительности импульсов программирования/стирания (что в итоге должно увеличить «живучесть» микросхемы – гарантированное количество перепрограммирований), однако никаких изменений продолжительности процедур замечено не было. Возможно, меняется порог срабатывания защиты по снижению напряжения питания (чтобы автомат уверенно отработал ситуацию и не допустил, когда данные некорректно записались, а сообщения об ошибке не было), но это только предположение. В документации отмечается лишь влияние температуры на «живучесть».
При вызове настроек также отображается состояние линий, с помощью которых осуществляется программирование – P1[0], P1[1] и XRes.
Сделано это чисто ради контроля и возможности наблюдать, как запущенная в PSoC программа меняет состояние первых двух линий
(пустому квадратику соответствует уровень логического нуля). Теперь для написания учебных программ типа «поморгать светодиодом»
пайка становится не нужна, а отладка устройств, не содержащих элементов индикации, в некоторых случаях может упроститься.
Помните только, что опрос линий осуществляется 10 раз в секунду, а значит быстроменяющиеся сигналы будут отображаться некорректно.
В качестве тестовой программы, ежесекундно перебрасывающей состояние этих линий на противоположное, может использоваться вот этот код (zip-архив 44 кБ). Там же находится и папка с проектом – хороший вариант начать изучение PSoC. Линия P1[0] для разнообразия управляется аппаратно, P1[1] – программно. Код написан для CY8C27xxx, но будет запускаться и на CY8C29xxx.
Напоследок отмечу одну особенность, которая присуща и другим программаторам. Когда память PSoC защищена от чтения, то единственный способ сравнить прошивку с исходным образом – воспользоваться командой «ChkSum» (предварительно загрузив сравниваемый файл в приложение). Но сработает это только тогда, когда образ будет иметь ту же длину, что и объем памяти микросхемы. Это справедливо для файлов *.hex, а вот код, содержащийся в *.rom обычно короче (см. замечания про конечные участки, сделанные выше), и «ChkSum» покажет несовпадение. Несовпадение будет и в случае, когда исполняемая программа модифицирует память (например, пишет в нее данные или меняет константы).
Приложение «PSoC Programmer CH341A» работает в среде Windows (тестировалась Windows XP) и не требует инсталляции – достаточно просто запустить исполняемый файл. Ограничений на использование приложения не даю, равно как и никаких гарантий – все на ваш страх и риск.
Запись образа объемом 32 кБ у микросхемы CY8C29466 занимает около 9 секунд, чтение – около 4.
*.rom
Текстовый файл – перечисляются байты в 16-ричном формате, начиная с нулевого адреса (сами адреса не указываются). Префикс «0x» (как принято в языках программирования) – не ставится. Разделителем является пробел, в строке задаются 8 байтов. Всего идет столько байтов, сколько занимает код, т.е. может быть меньше, чем объем памяти микросхемы.
Программа «PSoC Programmer CH341A» понимает строки из любого количества байтов и такие разделители, как «запятая», «точка с запятой» и «табуляция». Символы, отличные от 16-ричных цифр, игнорируются (выводится предупреждение). При сохранении файлы приводятся к общепринятому виду.
*.hex
Формат «Intel Hex», немного дополненный фирмой Cypress в части способа описание битов защиты и контрольной суммы. Текстовый файл сложен для восприятия. Редактировать можно, но если не соблюсти некоторые правила, то не будет восприниматься (т.к. усиленный контроль целостности). Детально расписан в документе AN2026b – «In-System Serial Programming (ISSP™) Protocol».
Программа «PSoC Programmer CH341A» понимает строки из любого количества байтов. Если строка не начинается с символа «двоеточие» (как принято в файлах такого формата), то она воспринимается как комментарий. При сохранении файл приводится к общепринятому виду.
*.bin
Бинарный файл, данные идут с нулевого адреса. Никакие комментарии не позволены, т.к. все считается кодом. Редактируется только специальными редакторами.
*.txt
Текстовый файл битов защиты. Состоит из массива букв «U», «F», «R» или «W», разделенных пробелами (по 16 букв в строке). Каждая буква соответствует блоку памяти 64 байт и кодирует уровень защиты «Unprotected», «Factory Field», «Read protected» или «Write (Full) protected». Самая первая буква в массиве соответствует блоку с номером 0. Все, что находится справа после символа «точка с запятой», считается комментарием. Буква может быть как заглавной, так и строчной.
Программа «PSoC Programmer CH341A» понимает строки из любого количества букв, разделители могут отсутствовать, все посторонние символы игнорируются. Данные при сохранении приводятся к общепринятому виду. Файл flashsecurity.txt можно встретить в папке любого проекта PSoC Designer. На основе этого файла там генерируется объединенный файл *.hex.
antiradio.narod.ru/psoc
Дата создания документа: 25.09.2020. Последнее обновление: 30.10.2025.