Рейтинг@Mail.ru

Как загрузить программу в USB микроконтроллер CY7C68013

автор:
2 comments Электроника
Print Friendly, PDF & Email
В данной статье мы научимся основам работы с микроконтроллерами CY7C68013: как загружать их из конфигурационной памяти и с компьютера, а также поморгаем светодиодом.

Нам потребуется:

1 Описание контроллера и отладочной платы CY7C68013

Чипы CY7C68013 фирмы Cypress («Кипарис») – это семейство микроконтроллеров, которыми можно управлять программно по интерфейсу USB, а также они способны работать автономно, загружаясь из внутренней конфигурационной (16 кб) или внешней памяти. Поддерживается интерфейс USB 2.0. Все чипы имеют малое потребление тока (не более 85 мА) во всех режимах. Имеются встроенная поддержка UART и I2C. Вообще, данные микросхемы обладают огромным количеством возможностей, и для более подробного изучения необходимо читать документацию (а её на данные микросхемы и сопутствующие API реально много).

Для знакомства с микроконтроллером CY7C68013 имеется вот такая недорогая, но функциональная отладочная плата. Она подключается к компьютеру по USB. Её размеры – 55×42×10 мм, вес 14 г.

Составляющие платы с CY7C68013
Составляющие платы с CY7C68013

Что ещё интересного в данной плате:

  • имеет на борту выключатель питания SW1, кнопку сброса RST, кварцевый резонатор X1 на 24 МГц, линейный регулятор напряжения AMS1117, настроенный на 3.3 В;
  • 3 светодиода (PWR для индикации питания, управляемые D1 и D2 подключены к портам PA0 и PA1, соответственно);
  • 2 перемычки (J1 включает светодиоды D1 и D2, J2 для подключения ППЗУ AT24C128);
  • 2 гребёнки по 20 выводов – различные порты контроллера CY7C68013 (работают с уровнем 3,3 В, но толерантны к 5 В).

На нижней стороне платы радиоэлементы отсутствуют.

Данная плата имеет несколько ревизий, схема для ревизии "A" приведена на рисунке ниже и в приложении к статье.

Принципиальная схема платы с CY7C68013
Принципиальная схема платы с CY7C68013

2 Установка драйвера и утилит для работы с CY7C68013

Перед началом работы необходимо скачать утилиту Cypress USB Console. Она входит в состав обширного набора Cypress USB Suite и распространяется бесплатно изготовителем (версию CySuiteUSB_3_4_7_B204 можно скачать в приложении к статье).

Подключим плату к компьютеру с установленным джампером J2 (это не даст контроллеру загружаться из энергонезависимой конфигурационной памяти). Указываем операционной системе откуда брать драйвер. Он находится в директории Cypress Suite USB 3.4.7/Driver и называется cyusb.sys.

CY7C68013 в диспетчере устройств отображается как Cypress FX2LP No EEPROM Device
CY7C68013 в диспетчере устройств отображается как Cypress FX2LP No EEPROM Device
VID и PID CY7C68013
VID и PID CY7C68013

Вообще, устройства семейства FX2LP позволяют загружать исполняемый код (прошивку) четырьмя способами:

  1. из ППЗУ;
  2. через пользовательское приложение на ПК;
  3. через внешнее параллельное ПЗУ;
  4. через файл скрипта.

Мы рассмотрим только первые два способа.

3 Загрузка прошивки в CY7C68013 через USB в энергозависимую память (RAM)

Когда драйвер и набор утилит установлены, заходим в директорию Cypress Suite USB/CyConsole и запускаем CyConsole.exe. В окне в списке устройств должен появиться наш контроллер CY7C68013. В данном случае микросхема называется Cypress FX2LP No EEPROM Device.

Главное окно приложения CyConsole
Главное окно приложения CyConsole – Cypress USB Console

Для теста нам понадобятся две прошивки: LED.hex и LED.iic. Первая предназначена для загрузки в энергозависимую память (RAM, ОЗУ), вторая – для загрузки в постоянную память (EEPROM, ППЗУ). Прошивки можно скачать в приложении к статье внизу.

Как самому создавать прошивки для контроллеров CY7C68013 сейчас рассматривать не будем, т.к. это очень обширная тема, и с ней будем разбираться отдельно.

Для загрузки программ в память контроллера выбираем Options EZ-USB Interface. Откроется окно загрузчика. Нажимаем кнопку Download и выбираем файл в формате Intel HEX с расширением *.hex.

Запуск EZ-USB Interface
Запуск EZ-USB Interface

При успешной загрузке светодиоды D1 и D2 на плате начнут мигать с частотой примерно 1 раз в секунду.

Окно программы загрузки прошивки EZ-USB Interface
Окно программы загрузки прошивки EZ-USB Interface

Если теперь выключить контроллер (кнопкой выключения или подержать пару секунд кнопку сброса), то увидим, что при включении светодиоды не мигают (программа в ОЗУ сбрасывается при потере питания).

CY7C68013 мигает светодиодами
CY7C68013 мигает светодиодами

4 Загрузка прошивки в CY7C68013 через USB в энергонезависимую память (EEPROM)

Для загрузки программы в постоянную память, обесточим плату CY7C68013 и снимем перемычку J2. Это включит в работу ППЗУ AT24C128.

Подадим питание на плату. В этом же окне EZ-USB Interface теперь нажимаем кнопку Lg EEPROM. Выбираем файл с прошивкой с расширением *.iic. Если процесс программирования завершится успешно, светодиоды замигают.

Если теперь обесточить плату, а затем снова включить (джампер J2 всё ещё разомкнут, ППЗУ AT24C128 активно), светодиоды всё равно будут мигать, т.к. контроллер CY7C68013 загрузится из постоянной памяти (программа, записанная в ППЗУ, не сбрасывается при потере питания).

5 Восстановление VID и PID микроконтроллера CY7C68013 после неудачной прошивки

В ходе экспериментов случается, что после перепрограммирования ПЗУ микросхема перестаёт определяться как Cypress CY7C68013. В таком случае в диспетчере устройств она может быть видна как неизвестное устройство USB с идентификатором USB\UNKNOWN.

Неизвестное устройство в списке устройств
VID и PID для USB\Unknown

Для выхода из такой ситуации можно воспользоваться программатором, чтобы стереть прошивку, записанную в ПЗУ. Чтобы не отпаивать микросхему памяти с платы, имеется специальный тестовый зажим. С помощью такого зажима можно подключаться к запаянным микросхемам в корпусе SOIC8. Подходящий программатор мы обсуждали ранее. После стирания ППЗУ нулями устройство снова будет определяться как микросхема Cypress CY7C68013.

CY7C68013 с программатором CH341A
CY7C68013 с программатором CH341A

При перепрошивке питание на плату подавать не нужно. Питание поступает от программатора.

Перепрограммирование ППЗУ AT24C128 на плате с CY7C68013
Перепрограммирование ППЗУ AT24C128 на плате с CY7C68013

Есть и более простой способ. Устанавливаем перемычку J2 и подключаем плату к компьютеру; CY7C68013 загружается без ПЗУ. Теперь удаляем перемычку и с помощью CyConsole загружаем файл reset_vid_pid.iic, который можно скачать внизу в приложении к статье (сброс VID и PID микроконтроллера CY7C68013). В данном файле прописаны идентификаторы и версия по умолчанию для данной микросхемы. После перевключения питания микросхема должна определиться корректно.

6 Преобразование файлов *.HEX в *.IIC для микросхемы Cypress CY7C68013

Для конвертирования из формата прошивки для временной памяти в прошивку для ППЗУ в комплекте разработчика существует специальная консольная утилита, которая называется Hex2bix.exe. Она расположена по пути c:\Cypress\Cypress Suite USB 3.4.7\Firmware\bin\ и устанавливается вместе с CyConsole (скачать можно внизу статьи). Путь, естественно, может отличаться, если вы устанавливали в другую директорию.

Для использования запускаем консоль: Win + R, затем набираем cmd и «Enter». В консоли набираем:

cd c:\Cypress\Cypress Suite USB 3.4.7\Firmware\bin\

Теперь можно вводить команды для утилиты Hex2bix. Полный список команд приведён на иллюстрации ниже и доступен при вводе Hex2bix -help (или -? или -h) в окне консоли.

Справка по командам утилиты hex2bix
Справка по командам утилиты hex2bix

Например, для преобразования нашего файла led.hex в led.iic нужно ввести:

hex2bix -i -f 0xC2 -o led2.iic -p 0x8613 -v 0x04b4 led.hex

Файл led.hex должен лежать в одной директории с утилитой, иначе придётся прописывать полный путь к нему.

Здесь:

  • флаг -i указывает утилите, что выходной формат файла – *.iic;
  • флаг -f со значением 0xC2 задаёт значение стартового байта файла (см. примечание ниже);
  • флаг -o задаёт имя выходного файла;
  • -p задаёт PID;
  • -v задаёт VID;
  • последним идёт имя преобразуемого *.hex файла.
Преобразование файла из .HEX в .IIC с помощью hex2bix
Преобразование файла из .HEX в .IIC с помощью hex2bix

Первый байт в файле прошивки задаёт способ загрузки микросхемы Cypress: B0, B2 – для EZ-USB, B4, B6 – для EZ-USB FX, C0, C2 – для EZ-USB FX2. Значение 0xX0 копирует VID, PID, DID из ППЗУ во внутреннее ПЗУ. Значение 0xX2 берёт значение идентификаторов из ППЗУ.

В результате выполнения данной команды получим файл led2.iic прошивки для ППЗУ микросхемы Cypress.

Кстати, исходный код утилиты hex2bix открытый, и скачать его можно здесь.

7 Программное управление контроллером CY7C68013 с помощью CyAPI

Для программного управления контроллерами фирмы Cypress разработчики создали специальный APICyAPI.lib. Описание и примеры программ устанавливаются вместе с набором для разработчика Cypress USB Suite в директорию CyAPI. Программа должна быть написана на C++. Также имеется управляемая библиотека классов .NET CyUSB.dll, которая устанавливается в директорию CyUSB.NET. Разработку с использованием библиотеки CyUSB.dll можно вести на таких языках как Visual Basic .NET, C#, J#, C++.

Давайте напишем программу на VB.NET, которая использует CyUSB.dll (если вы пишете на других управляемых языках, то смотрите CyUSB.NET.pdf из состава Cypress USB Suite для деталей).

Создадим пустой проект в Visual Studio и добавим ссылку на библиотеку CyUSB.dll. Теперь импортируем пространство имён CyUSB. Нам станут доступны классы и члены пространства имён CyUSB:

Imports CyUSB

В первую очередь необходимо вызвать статический метод USBDeviceList(). Как параметр в данный метод нужно передать тип устройств, которые вас интересуют: USB, HID или MassStorage (или их объединение по ИЛИ). Он проведёт поиск доступных устройств Cypress и вернёт их список. Например:

Dim usbDevices As New USBDeviceList(CyConst.DEVICES_CYUSB Or CyConst.DEVICES_HID)

Когда получили список устройств, можно добавить обработчик для события подключения/отключения устройств:

AddHandler usbDevices.DeviceAttached, AddressOf DeviceAttachedHandler
AddHandler usbDevices.DeviceRemoved, AddressOf DeviceRemovedHandler

Private Sub DeviceAttachedHandler(sender As Object, e As USBEventArgs)
    Debug.WriteLine($"Device {e.Device.FriendlyName} attached")
    'делайте что-то своё
End Sub

Private Sub DeviceRemovedHandler(sender As Object, e As USBEventArgs)
    Debug.WriteLine($"Device {e.Device.FriendlyName} removed")
    'делайте что-то своё
End Sub

Далее обращаемся к нужному устройству по индексу, начиная с нуля. Каждое устройство в данном списке имеет тип CyUSBDevice.

Продолжение следует...

Last modified onСуббота, 18 Февраль 2023 13:21 Read 6762 times
Ключевые слова: :

Поблагодарить автора:

Поделиться

Print Friendly, PDF & Email

2 comments

  • Дмитрий
    Дмитрий Среда, 20 Сентябрь 2023 14:31 Ссылка на комментарий

    Спасибо! Я как раз начал экспериментировать с этой платой. Ваша статья очень помогла. Правда, пришлось повозиться с установкой драйвера (тот драйвер, что в составе CySuite 3.4.7, требует ручной правки, не имеет цифровой подписи и потому ставится на Win7 максимум, а на Win10 встал драйвер из FX3 SDK). Ваш LED.HEX загрузился и светодиоды на плате замигали. :-) Теперь буду пробовать компилировать свою программку - я уже долгое время работаю с C8051 от SiLabs, Keil uVision мне хорошо знаком.

  • aave1
    aave1 Среда, 20 Сентябрь 2023 18:36 Ссылка на комментарий

    Отлично, рад, что вы нашли что-то полезное в моей статье!) Удачи в освоении!

Leave a comment