Плату «CH341A Mini Programmer» можно купить на AliExpress буквально за пару долларов и
приспособить для программирования микросхем серий CY8C21xxx, CY8C24xxx, CY8C27xxx и CY8C29xxx.
Режим «Power-On Reset» в первых двух схемах не поддержан, так что работать с 8- и 16-выводными микросхемами не получится.
Приложение для работы с этими схемами, можно взять здесь:
Download PSoC Programmer CH341A (v1.18) (zip-архив 218 кБ).
Более продвинутая версия (реализован режим «Power-On Reset»):
Download PSoC Programmer CH341A (v1.20) (zip-архив 219 кБ).
Основу программатора составляет плата «CH341A Mini Programmer», которую можно купить на AliExpress за пару долларов. Плата имеет разные модификации (моя отмаркирована как «CH341A MinProgrammer»), существуют также другие платы, выполненные на основе микросхемы CH341A (или CH341).
Эта плата – настоящий подарок гикам и ремонтникам, поскольку позволяет не только читать и переписывать содержимое EEPROM (памяти, используемой в телевизорах и прочей электронной технике), но и получить в свое распоряжение арсенал таких распространенных интерфейсов, как UART, SPI, I2C, EPP parallel и т.д. Энтузиасты приспособили эту плату и для программирования микроконтроллеров, среди которых PSoC – увы! – не значится.
Данный проект восполняет это упущение, давая возможность работать с чипами серий CY8C21xxx, CY8C24xxx, CY8C27xxx и CY8C29xxx. Две первые серии сюда вписаны чисто гипотетически, т.к. возможности проверить работу с ними у меня не было. Программа тестировалась только на микросхемах 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 должны быть не задействованы (допустима очень слабая нагрузка, например – подключенный кварц). Кроме того, следует корректно выставить переключатель напряжений – если устройство имеет собственный источник питания, переключатель должен быть в выключенном положении! Подача напряжения +5В вместо +3.3В для PSoC не критична, но может оказаться недопустимой для прочих узлов, подключенных к этой цепи. Следует помнить и об ограниченных токовых возможностях USB порта компьютера, равно как и о возможностях встроенного стабилизатора +3.3В платы «CH341A Mini Programmer».
8-выводные и 16-выводные микросхемы PSoC, не имеющие вывода сброса (XRES), с помощью вышеприведенных схем запрограммировать нельзя. Для вхождения в режим программирования здесь требуются манипулировать напряжением питания – нужен дополнительный узел.
Доработанные схемы показаны на рисунке ниже. Узел управления напряжением выполнен на транзисторе Q1. Резисторы R3 и R5 гарантируют отсутствие напряжения в состоянии «выключено». При программировании в составе устройства цепи питания микросхемы должны отключаться от остальных цепей. Допустимо оставлять только блокировочные конденсаторы малой емкости. Работа с конденсаторами большой емкости не проверялась и, скорее всего, невозможна. Отделение цепей питания необходимо не только для того, чтобы снизить нагрузку на программатор, но и для того, чтобы избежать подачи повышенного напряжения на узлы, которые на это не рассчитаны (например – трехвольтовая память).
Для режима POR следует использовать новую версию программы PSoCProgrammerCH341A, ссылка на которую приведена в начале статьи (v1.19). Кнопкой «Settings» откройте дополнительные параметры и выберите режим «PowerOn Reset» – при этом сразу же определится подключенная микросхема. Радиокнопка выбора напряжения должна оставаться в положении «+5 V». На микросхему будет подаваться чуть более низкое напряжение (порядка 4,5 В), что вполне допустимо. На схеме показана панелька только для подключения 8-выводных микросхем (J2). Для микросхем с иным количеством выводов понадобятся другие панельки – нумерацию контактов уточняйте по фирменной документации (для программирования требуются ножки, обозначаемые как «Vcc», «Vss», «P1[0]», «P1[1]» и «XRES»).
При создании этой программы ставилась цель максимально повторить интерфейс ее предшественника – приложения «CyP», написанного Ajithalayam из Индии (которое работает с «простейшим Программатором микросхем PSoC»). Не скажу, что у него все сделано достаточно удобно, зато процесс перехода потребует минимум привыкания.
После старта программа сама определит оборудование, подключенное в USB порту компьютера, а также тип микросхемы PSoC, с которой будет работать. Потребуется только предварительно установить драйвер, который можно взять из прилагаемого архива. Запрос на установку драйвера возникнет при первом подключении платы «CH341A Mini Programmer» (к слову, существует и другой драйвер, который без труда находится в Интернете и превращает эту плату в адаптер USB-UART. Перемычка, соединяющие контакты 1 и 2 на плате, для этого случая должна быть снята или переставлена в положение 2-3). Признак установки драйвера – наличие файла CH341DLL.DLL в системной папке WINDOWS/system32/
Если программируемое устройство подключалось «нагорячую» (либо имеет собственный источник питания, который выключался), тип микросхемы определится только при выполнении какой-либо из процедур. Чтобы заранее знать, с чем предстоит иметь дело, следует воспользоваться кнопкой «ChkSum» панели «Target Device» или контекстным меню «Check Again» панели «Device Silicon ID». Если обнаружится незнакомая микросхема, то в окне «Device Silicon ID» вместо вменяемого названия микросхемы высветится ее двоичный код-идентификатор. В этом случае все операции будут производиться по типу CY8C27xxx – для одного банка памяти объемом 16 кб . После любой процедуры программируемое устройство переводится в состояние сброса (останова), а сигнальные линии программатора – в высокоимпедансное состояние. Чтобы стартовать устройство, требуется снять галочку «XRes» в окне «Programmer».
В общем случае последовательность действий будет такая:
«Load» (загрузка файла) –> «Program» (программирование) –> «ChkSum» (быстрая проверка правильности)
–> «Secure» (программирование битов защиты).
Команда «ChkSum» может быть заменена (или дополнена) командой «Verify» (сверкой содержимого), а при частых загрузках одного и того же файла, неизбежных при отладке кода, вместо команды «Load» удобнее использовать «Reload».
Содержимое микросхемы читается кнопкой «Read». Если в процессе чтения (или верификации) встретится защищенный блок, операция прервется, а в окне статуса появится сообщение. То же произойдет и при сбое (редко, но случается), так что если вы уверены в отсутствии защиты, просто повторите операцию.
Все операция проводятся с буфером, который помимо загружаемого кода может содержать массив битов защиты. Массив битов защиты содержится, как правило, в файлах формата *.hex (приспособленный фирмой Cypress «Intel Hex формат»). Биты защиты могут быть загружены и с помощью файлов *.txt. Краткая информация о поддерживаемых форматах приведена в конце статьи. Команды «Load» и «Save» позволяют конвертировать файлы из одного формата в другой (с некоторыми оговорками).
Файлы *.hex и *.rom, создаваемые средой разработки PSoC Designer, содержат один и тот же исполняемый код, однако первые содержат образ ВСЕЙ программируемой памяти, включая неиспользуемый конечный участок (который забивается кодом 0x30 – командой «HALT»), а вторые – код в минимальном объеме, предполагая, что оставшаяся часть памяти заполнится нулями при стирании. В связи с этим программирование с использованием файлов *.rom происходит быстрее.
Команда «Erase» стирает сразу всю память, включая биты защиты, и особо не нужна, т.к. соответствующая процедура вызывается каждый раз при нажатии на кнопку «Program». Аналогично – команда «Clear» заполняет буфер нулями (в объеме последнего загруженного в него кода). С помощью контекстного меню кнопки «Clear» можно заполнить буфер не нулями, а выбранным кодом.
Кнопка «Settings» вызывает дополнительные настройки программы. Их не особо много – способ входа в режим программирования и выбор напряжения. Программа не меняет никакие напряжения в схеме, а только сообщает внутреннему автомату PSoC текущее значение, чтобы тот выбрал оптимальный режим. В чем заключается этот «оптимальный режим» – из документации не ясно. Можно было бы предположить, что меняются длительности импульсов программирования/стирания (что в итоге должно увеличить «живучесть» микросхемы – гарантированное количество перепрограммирований), однако никаких изменений продолжительности процедур замечено не было. Возможно, меняется порог срабатывания защиты по снижению напряжения питания (чтобы автомат уверенно отработал ситуацию и не допустил, когда данные некорректно записались, а сообщения об ошибке не было), но это только предположение. В документации отмечается лишь влияние температуры на «живучесть».
При вызове настроек также отображается состояние линий, с помощью которых осуществляется программирование – P1[0], P1[1] и XRes. Сделано это чисто ради контроля и возможности наблюдать, как запущенная в PSoC программа меняет состояние первых двух линий (пустому квадратику соответствует уровень логического нуля). Теперь для написания учебных программ типа «поморгать светодиодом» пайка становится не нужна, а отладка устройств, не содержащих элементов индикации, в некоторых случаях может упроститься. Помните только, что опрос линий осуществляется 10 раз в секунду, а значит быстроменяющиеся сигналы будут отображаться некорректно.
В качестве тестовой программы, ежесекундно перебрасывающей состояние этих линий на противоположное, может использоваться вот этот код (zip-архив 44 кБ). Там же находится и папка с проектом – хороший вариант начать изучение PSoC. Линия P1[0] для разнообразия управляется аппаратно, P1[1] – программно. Код написан для CY8C27xxx, но будет запускаться и на CY8C29xxx.
Напоследок отмечу одну особенность, которая присуща и другим программаторам. Когда память PSoC защищена от чтения, то единственный способ сравнить два образа – воспользоваться командой «ChkSum». Но при этом в буфер для сравнения могут быть загружены файлы как *.rom, так и *.hex, которые отличаются конечным участком (см. выше). Поэтому при одинаковом исполняемом коде контрольные суммы могут различаться! Аналогичная ситуация возникнет и тогда, когда исполняемая программа модифицирует память (например, пишет в нее данные).
Приложение «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. Последнее обновление: 08.08.2023.