Прошивка ez usb fx2lp cy7c68013a

Обновлено: 05.07.2024

В этом кратком руководстве представлена ​​простая программа "Hello World" для макетной платы CY7C68013A EZ-USB FX2LP USB2.0 с дополнительной платой RS232 для последовательной связи. Такие доски широко доступны по разным каналам. Плата, используемая здесь, была куплена на ebay, а плата RS232 была куплена в WaveShare. Автор использовал систему Debian GNU/Linux, но руководство должно работать и для других дистрибутивов Linux, *BSD или других Unices.

  • Компилятор SDCC версии 3.4.0 или выше для компиляции программ C для MCS-51.
  • cycfx2prog для записи программ на устройства.

Настройка оборудования

STM8L-DISCOVERY подключается к главному компьютеру через USB-кабель для питания и записи демо на плату. Подключаем плату RS232 к разъему PA0 для данных и к разъему питания для питания (VCC к +5В, GND к GND); затем последовательный кабель подключается к плате RS232. На другом конце последовательный кабель подключается к порту RS232 компьютера, на котором запущена терминальная программа, настроенная на скорость 1200 бод, без контроля четности, 8 бит, 1 стоповый бит и без управления потоком. Мы использовали преобразователь USB-последовательный порт и gtkterm.

Получить SDCC

В зависимости от вашей операционной системы может быть простой способ установить SDCC 3.5.0 или новее с помощью системы пакетов или аналогичной (например, apt-get install sdcc в Debian). Хотя SDCC 3.4.0 должно быть достаточно для этого руководства, вы можете попробовать более новую версию, если обнаружите какие-либо ошибки.

Двоичные файлы SDCC или архив с исходным кодом можно загрузить с его веб-сайта.

Получить cycfx2prog

В зависимости от вашей операционной системы может быть простой способ установить cycfx2prog с помощью системы пакетов или аналогичной (например, apt-get install sdcc в Debian).

Архив с исходным кодом можно загрузить с его веб-сайта.

Демонстрация

Мы представляем простую демонстрацию, которая постоянно выводит "Hello World!". Поскольку версии FX2LP с малым количеством выводов не имеют UART, нам необходимо эмулировать его программно. Вот код C:

SDCC — это автономная, а не размещенная реализация C, которая позволяет main возвращать void. В SDCC до SDCC 3.6.0 putchar() использовался для возврата void . Это не соответствует стандарту и было изменено на int в текущих версиях SDCC. Функция printf() из стандартной библиотеки использует для вывода putchar(). Так как putchar() зависит от устройства, нам нужно его указать. В этом случае мы хотим, чтобы он выводил данные, используя наш программный UART.

Демонстрацию можно скомпилировать, просто вызвав SDCC с помощью sdcc -mmcs51 --std-c99 serial.c, предполагая, что код C находится в serial.c. Параметр -mstm8 выбирает целевой порт (stm8). Будет создан файл .ihx с именем, соответствующим исходному файлу.

Поместите демонстрацию на доску

Предполагая, что плата подключена через USB, cycfx2prog prg:led.ihx run запишет демо на плату. Вы можете увидеть «Hello world», подключив последовательный кабель к разъему DB9 на плате RS232 и используя терминальную программу, настроенную на 1200 бод, без четности, 8 бит, 1 стоповый бит и без управления потоком.

Подробнее о cycfx2prog

cycfx2prog был написан Вольфгангом Визером. Это инструмент для программирования FX2 (т. е. для загрузки встроенного ПО 8051 в ОЗУ) и выполнения базовой связи с конечными точками в целях тестирования. cycfx2prog требует, чтобы входной файл был шестнадцатеричным файлом Intel .ihx.

Подробнее о SDCC

SDCC изначально был написан Сандипом Даттой для MCS-51 и имеет относительно консервативную архитектуру (см. Сандип Датта, "Анатомия компилятора", 2000). Он был расширен различными участниками и совсем недавно включал в себя некоторые передовые технологии, в частности, в распределении регистров (см. Филипп Клаус Краузе, «Оптимальное размещение регистров за полиномиальное время», 2013 г. и «Распределение регистров побайтно», 2015 г.). Однако серверная часть mcs51 не имеет всех модных функций и оптимизаций, которыми обладают некоторые более новые серверные части.

Из этого комментария к исходной странице блога, в котором описывается взлом доски клонов для работы с saleae:

Спасибо за сообщение, оно помогло мне опробовать программное обеспечение Saleae на моей плате разработки (та же самая плата LCSoft, как показано на рисунке). Я использовал Saleae 1.1.15, AT24C04, подключенный к разъемам SCL и SDA, и не отпаивая, просто оставив перемычку J1 включенной. Мне неудобно пользоваться программным обеспечением Saleae бесплатно, но это было забавным упражнением.

Я не думаю, что скорость I2C EEPROM является проблемой, посмотрев на фотографию внутренней части настоящего Saleae. Настоящая вещь имеет Microchip 24LC00 (как U1, маркированный M0AS), который поддерживает 100 кГц при 2,5 В+ и 400 кГц при 4,5 В+ (Saleae при 3,3 В). AT24C128 поддерживает 100 кГц при 1,8 В+, 400 кГц при 2,5 В+ и 1 МГц при 5 В+. Таким образом, AT24C128 поддерживает те же скорости или выше, что и настоящий.Не похоже, что они могут проверить отсутствие поддержки скорости в реальной машине, поскольку это минимум, и всегда возможно, что особенно хорошая партия подлинных EEPROM сможет работать на частоте 400 кГц при 3,3 В.

Я также подключил BusPirate и прослушивал трафик I2C при загрузке программного обеспечения Saleae, он обращался к 0xA0 или входил в бесконечный цикл, пытаясь получить доступ к 0xA0, когда 0xA0 был недоступен, и я думаю, что все это происходило в 100 кГц, но я не уверен, что BusPirate будет перехватывать трафик 400 кГц в режиме 100 кГц.

Историческое объяснение¶

Платы USBee и Saleae Logic/Logic16 в значительной степени являются клоном оценочной платы Cypress. Чип считывает данные из I2C EEPROM при загрузке, чтобы получить PID/VID/DID и версию, которые он затем использует для представления себя хосту. Первый байт — это байт управления/конфигурации для CY7C68013, определяющий, что делать с содержимым EEPROM, следующие два — это VID, затем PID, затем DID, затем последний байт — это байт конфигурации, который контролирует скорость USB и следует ли выйти из сброса или нет. Дополнительные сведения см. в техническом описании Cy7C68013.

Saleae использует Cypress PID/VID 0925:3881 (подозреваю, что DID 0x001b также важен)
USBee использует 08a9:0005 для ZX и :0009 для SX (DID 0x2384)

ЭСППЗУ на плате eval — AT24LC128. В EEPROM старший бит адреса подключен к перемычке, которая устанавливает его на «1», в результате чего память отображается как 0xa2 или 0xa0 в зависимости от перемычки. Cypress использует только первые 8 байт. Вы можете использовать их USB Suite вместе с образом прошивки vend_ax.hex, чтобы вы могли выполнить команду поставщика для чтения/записи EEPROM. Вы также можете просто использовать автобусного пирата, что я и сделал в конце концов. EEPROM, по-видимому, должен находиться по адресу I2C 0xa2, хотя часть Cypress также выглядит по адресу 0xa0. На самой EEPROM есть два или три адресных контакта для настройки адреса I2C.

Самый первый загруженный байт определяет, как используется EEPROM. 0xc0 = загрузить только VID/PID/DID, 0xc2 = загрузить прошивку из EEPROM.

Большие EEPROM используют два байта для адреса памяти для чтения/записи, а меньшие используют только один байт. Это важно позже. Форматы команд чтения/записи см. в технических описаниях памяти I2C.

Используя пиратку шины в режиме I2C, вы можете запрограммировать ее следующим образом:

Вы можете использовать это, чтобы прочитать то, что вы написали, чтобы убедиться, что оно было выполнено (I2C может быть ненадежным, следите за экраном состояния для NACK)
[0xa2 0x00 0x00 [ 0xa3 r:8]]

Как обойти меры по борьбе с контрафактной продукцией Saleae¶

Старые версии программного обеспечения Saleae не проверяют наличие поддельных плат. К сожалению у меня нет старых копий их софта, а в инете нет ничего кроме старых копий виндового софта. Используя пиратку шины в режиме сниффера I2C, вы можете видеть, что после загрузки прошивки Saleae (приложением Logic) прошивка более внимательно изучает последовательную EEPROM:

Как видите, он пытается получить доступ к меньшей EEPROM (однобайтный адрес памяти) по адресу 0xa0 и считывает 8 байтов, начиная со смещения 8 (в моем случае считываются все 0xff). Затем он записывает 0xa4 0x62 0x14 0x3d 0xe1 0x6b 0x88 0x1e и считывает записанные данные. На снимке выше запись не сработала, и приложение вышло из строя.

Прошивке Saleae требуется небольшая EEPROM по адресу 0xa0. Часть Cypress, по-видимому, требует большей EEPROM по адресу 0xa2. Я попытался разместить на плате часть памяти меньшего размера и запрограммировать ее PID/VID, но часть Cypress никогда не принимала ее в 0xa0. Я, должно быть, что-то напутал, так как очень сомнительно, что устройства Saleae имеют две EEPROM, или, возможно, на части Cypress есть какая-то опция связывания контактов, чтобы правильно считывать PID / VID с устройства с меньшей памятью в 0xa2 или 0xa0.

Что я сделал, так это припаял на плату EEPROM меньшего размера, поэтому их два. 24LC128 на 0xa2 и меньшую EEPROM с выводами A2/A1/A0, подключенными к перемычке, которая подтягивает их к «1». Это помещает меньшее устройство в 0xac или 0xad, в зависимости от того, имеет ли устройство рабочий контакт A0 или нет. Это кажется необходимым, так как часть Cypress просматривает 0xa0 и получает правильный ответ, но не может правильно прочитать PID/VID. Итак, что я делаю, так это вставляю перемычку, чтобы переместить меньшую EEPROM в сторону, подключаю плату eval к ​​компьютеру, и как только она перечисляет (считывает PID/VID из большей EEPROM в 0xa2), я вытягиваю перемычку, которая перемещает меньшую EEPROM в 0xa0. Теперь, когда прошивка Logic загружается, она видит маленькое устройство по адресу 0xa0, пытается прочитать память, если все в порядке, сообщает об успехе, а если нет, пишет хорошие данные, проверяет их и сообщает об успехе. Это что-то вроде собачьего завтрака, но пока работает достаточно хорошо.

Я подозреваю, что аппаратное обеспечение Saleae имеет высокий бит адреса A2 и подключено к контакту порта Cypress.Когда загружается прошивка Saleae, она переводит контакт порта в низкий уровень, изменяя адрес EEPROM, а затем выполняет проверку памяти, чтобы убедиться, что это официальная часть Saleae. Немного покопавшись, я уверен, что смогу заставить это работать, не заморачиваясь с перемычкой и двумя EEPROM, которые у меня сейчас есть.

История: использование инструмента Cypress для изменения PID/VID¶

Итак, хотя это и не так просто, как переключить несколько перемычек, устройство можно сделать похожим на USBee ZX без особых усилий. Я считаю, что драйвер USBee — это просто подписанная версия драйвера CyUSB, а это означает, что устройство распознается CyConsole (в отличие от драйвера Saleae, который, похоже, модифицирован таким образом, что устройство не отображается в CyConsole, отсюда и канитель установки CyUSB выше). Это означает, что вернуться к Saleae Logic так же просто, как выполнить шаги с 7 по 12, но запрограммировав наши исходные байты «C0 25 09 81 38 1B 00 00».

История: история CY7C68013A, купленного на ebay¶

Просто рассказывает о файлах поддержки, на которые он не дает ссылку, о том, что логический анализатор использует PB0-PB7 для 8 выводов анализатора и т. д., посмотрите файл .inf драйвера логики, чтобы получить Logic16 PID/ VID (хотя Logic16 имеет FPGA между вводом-выводом и микросхемой Cypress, а микросхема Cypress быстрее/больше) и т. д.

Некоторое время назад компания AnchorChips (теперь принадлежащая Cypress) выпустила инновационный и полезный продукт: усовершенствованный микроконтроллер на базе 8051 (8-разрядный ЦП), который имеет прямую аппаратную поддержку для запуска устройств USB 1.1. Этот обновленный продукт известен как EZ USB FX. Он может поддерживать все конечные точки USB (30 плюс управление).

Когда вышел USB 2.0, этот продукт был обновлен для поддержки гораздо более высоких скоростей (480 МБит/с) и получил название EZ USB FX2. FX2 не поддерживает столько конечных точек (шесть плюс управление), но аппаратно обрабатывает многобуферизованную высокоскоростную передачу. Прошивка устройства просто обрабатывает прерывания, заполняет буферы и приказывает аппаратному обеспечению выполнять свою работу.

Существует немало проектов, которые работают как с устройствами EZ-USB, так и с Linux (на стороне хоста). Эта веб-страница разработана как ресурс сообщества с (перекрестными) ссылками на связанные проекты, а также напрямую размещает некоторые усилия, ориентированные на Linux

С системной точки зрения устройство EZ-USB с его прошивкой сравнимо с системой Linux с реализацией API USB Gadget (стандартная часть Linux 2.5) и некоторым драйвером гаджета, использующим это. Система Linux, как правило, будет намного более мощной, поскольку она имеет как минимум 32-разрядный процессор и более богатую программную среду. Однако устройство EZ-USB обойдется в несколько раз дешевле.

Проекты EZ-USB, ориентированные на Linux

Устройства USB обычно должны работать со многими операционными системами. Их поддержка Linux основана на общей USB-инфраструктуре ядра и пользовательского режима, о которой вы можете прочитать в другом месте на этом сайте.

Загрузчик прошивки: fxload

Устройства без EEPROM дешевле, поэтому на многих устройствах их нет. Это означает, что компьютеры должны загружать прошивку на такие устройства, прежде чем они будут использоваться. Драйверы устройств ядра могут выполнять загрузку, но тогда прошивка просто блокирует память ядра. Кроме того, проще распространять обновленную прошивку, если для этого не нужно обновлять драйвер ядра. Многие продукты EZ-USB загружают прошивку из кода приложения.

  • Для сценариев конечного пользователя он легко подключается к утилитам горячего подключения. При подключении устройств EZ-USB к системе Linux запускаются сценарии для конкретных устройств, которые могут загрузить соответствующий шестнадцатеричный файл встроенного ПО. Устройства с внешней памятью используют двухэтапный режим загрузки.
  • Для обновления продукта на месте или для разработчиков вы можете использовать специализированный загрузчик второго этапа для записи загрузочных EEPROM. (Один подходящий загрузчик доступен на сайте Cypress. Кто-то мог бы с пользой написать бесплатную версию программного обеспечения.)

Для получения дополнительной информации см. конец страницы Linux-Hotplug о USB, где обсуждается загрузка встроенного ПО с помощью fxload. Он поддерживает все три версии чипов EZ-USB, включая высокоскоростной USB 2.0 на ядрах Linux 2.4.19 и 2.5.*.

Миди-проект EZ-USB

Целью проекта EZ-USB Midi является создание совместимой с USB-MIDI микропрограммы под лицензией GPLv2 (на языке C) для оригинального чипа EZ-USB (AN2131SC). Это было начато для того, чтобы USB-MIDI-адаптеры MidiSport1x1 и MidiSport2x2 работали с Linux. Эти устройства позволяют подключать MIDI-устройства (такие как контроллеры или синтезаторы) к Linux, используя USB вместо старых подключений звуковой карты. Свяжитесь с lars.doelle@on-line.de для получения дополнительной информации.

    доступен, который можно построить с помощью SDCC. Он общается с устройствами MidiSport.
  • Драйвер usbmidi для ядер Linux совместим с usb-midi. Он выполняет основную часть работы, взаимодействуя со стандартными MIDI-приложениями. (Входит в состав ядра Linux 2.5.)

Некоторые релевантные ссылки:

    Специфический протокол класса USB MIDI. Особенно описывает формат передачи и специфичные для класса дескрипторы USB. Для этого нет бесплатной загрузки, поэтому я включил некоторые биты в приложение к документу с прошивками. Найдите больше информации о миди, например. здесь.
  • И последнее, но не менее важное: Midiman также предоставляет информацию о своих продуктах Midisport 1x1 и Midisport 2x2.

Прошивка для тестирования USB

Мартин Диль предоставил прошивку EZ-USB, реализующую простые протоколы устройств, которые очень полезны при использовании с программным обеспечением usbtest с хостов Linux-USB, чтобы помочь проверить правильность работы хоста и выявить ошибки. Источник прошивки доступен.

Проект EZ-HID

usbstress-0.3

Ранее при разработке стека USB для Linux устройства EZ-USB были удобны для проверки правильности работы драйверов хост-контроллера USB ("HCD", особенно UHCI).

Последовательные драйверы USB

Поскольку микроконтроллеры 8051 легко обрабатывают ввод-вывод RS-232, неудивительно, что многие последовательные USB-адаптеры в основном содержат разъемы 8051 и RS-232 с прошивкой. При прямой поддержке ядром Linux эти устройства выглядят так же, как и любой другой тип последовательного порта. Некоторым из них необходимо загрузить прошивку, прежде чем их можно будет использовать. На момент написания статьи все эти прошивки статически связаны с соответствующим мини-драйвером.


Теплая подсказка: Уважаемый покупатель, наши самые дешевые транспортные услуги Экономическая логистика категории (SunYou Economic Air Mail, China Post Ordinary Small
Packet Plus) можно отследить только до того, как он прибудет в вашу страну. , пожалуйста, выберите
Стандартную логистику категории, если вы хотите получить полную информацию об отслеживании.

Возможности

1, с использованием чипа CY7C68013A-56: маломощная версия улучшенного 51-ядерного,
области программных данных 16 КБ, частота 48 МГц, 480 Мбит/с высокоскоростных стандартов протокола передачи, в соответствии с Спецификация USB2.0, обратно
совместимая с USB1.1.

2, прошивка, EEPROM: комплексное решение для внутрисистемного программирования с кабелем USB непосредственно для загрузки прошивки, на борту для обеспечения 16 КБ (24LC128) большой памяти программ (EEPROM), используется в качестве хранилища VID / PID и встроенного ПО USB,
пространство для программы, отвечающее потребностям CY7C68013A.

3, все контакты GPIO стандарта 2,54 мм позволяют
ученикам очень удобно расширять свой собственный дизайн.

4, с соответствующей прошивкой платы можно достичь с помощью основной
функции логического анализатора

5, формат PDF, предоставьте схему и сопутствующую информацию.

Пакет, включающий

1 основная плата xCY7C68013A


Теплая подсказка: Уважаемый покупатель, наши самые дешевые транспортные услуги Экономическая логистика категории (SunYou Economic Air Mail, China Post Ordinary Small
Packet Plus) можно отследить только до того, как он прибудет в вашу страну. , пожалуйста, выберите
Стандартную логистику категории, если вы хотите получить полную информацию об отслеживании.

Возможности

1, с использованием чипа CY7C68013A-56: маломощная версия улучшенного 51-ядерного,
области программных данных 16 КБ, частота 48 МГц, 480 Мбит/с высокоскоростных стандартов протокола передачи, в соответствии с Спецификация USB2.0, обратно
совместимая с USB1.1.

2, прошивка, EEPROM: комплексное решение для внутрисистемного программирования с кабелем USB непосредственно для загрузки прошивки, на борту для обеспечения 16 КБ (24LC128) большой памяти программ (EEPROM), используется в качестве хранилища VID / PID и встроенного ПО USB,
пространство для программы, отвечающее потребностям CY7C68013A.

3, все контакты GPIO стандарта 2,54 мм позволяют
ученикам очень удобно расширять свой собственный дизайн.

4, с соответствующей прошивкой платы можно достичь с помощью основной
функции логического анализатора

Читайте также: