Skip to content

vdremine/slavefifo

Repository files navigation

slavefifo

Назначение

slavefifo - прошивка для Cypress FX3, реализующая синхронный Slave FIFO интерфейс поверх GPIF II и USB vendor-specific устройства с четырьмя bulk endpoint-ами.

Прошивка поднимает FX3 как USB-устройство с четырьмя bulk endpoint-ами:

  • 0x01 - USB OUT #1
  • 0x02 - USB OUT #2
  • 0x81 - USB IN #1
  • 0x82 - USB IN #2

На стороне FX3 это собрано в четыре независимых тракта обмена между USB и PIB/GPIF:

Канал Направление USB endpoint UIB socket PIB socket
U2P1 Host -> FX3 -> external logic 0x01 CY_U3P_UIB_SOCKET_PROD_1 CY_U3P_PIB_SOCKET_2
U2P2 Host -> FX3 -> external logic 0x02 CY_U3P_UIB_SOCKET_PROD_2 CY_U3P_PIB_SOCKET_3
P2U1 external logic -> FX3 -> Host 0x81 CY_U3P_UIB_SOCKET_CONS_1 CY_U3P_PIB_SOCKET_0
P2U2 external logic -> FX3 -> Host 0x82 CY_U3P_UIB_SOCKET_CONS_2 CY_U3P_PIB_SOCKET_1

Практическая реализация этих четырёх трактов находится в следующих местах:

  • cyfxslfifosync.h - определения endpoint-ов и socket-ов.
  • cyfxslfifosync.c - создание четырёх manual DMA channels и запуск обмена.
  • cyfxslfifousbdscr.c - USB descriptors с четырьмя endpoint-ами.
  • cyfxgpif_syncsf.h - сгенерированная GPIF II state machine конфигурация.

CyFxSlFifoApplnStart() в cyfxslfifosync.c:

  • сначала включаются четыре USB endpoint-а;
  • затем создаются четыре CY_U3P_DMA_TYPE_MANUAL канала;
  • потом каждый канал привязывается к своей паре USB socket <-> PIB socket;
  • после этого для всех четырёх каналов запускается бесконечный transfer через CyU3PDmaChannelSetXfer(..., 0).

GPIF II и Designer

В репозитории лежат не только исходники прошивки, но и исходники GPIF-проекта:

Важный момент: файл cyfxgpif_syncsf.h не пишется руками. Это generated header, который получается из GPIF II Designer проекта sync_slave_fifo_2bit.cyfx.

Нормальный цикл изменения GPIF-логики такой:

  1. Открыть GPIF Designer проект sync_slave_fifo_2bit.cydsn/sync_slave_fifo_2bit.cyfx.
  2. Изменить state machine, threads, timing или pin mapping.
  3. Сгенерировать новый GPIF header.
  4. Обновить cyfxgpif_syncsf.h в корне firmware-проекта.
  5. Пересобрать прошивку.

Как собирается образ

Основной путь: через Eclipse / FX3 SDK

Это основной и рекомендуемый сценарий для данного проекта.

  1. Прошивка редактируется в исходниках этого репозитория.
  2. Проект открывается в Cypress FX3 SDK Eclipse environment.
  3. Eclipse собирает SlaveFifoSync.elf.
  4. Post-build вызывает elf2img.exe, тот конвертирует ELF в SlaveFifoSync.img.
  5. На выходе получается bootable image SlaveFifoSync.img.
post-build:
	-@echo 'Generate boot-loadable binary image'
	-elf2img.exe -i SlaveFifoSync.elf -o SlaveFifoSync.img -v

Альтернативный путь: через makefile SDK

В корне лежит makefile, который может собирать firmware через стандартную структуру FX3 SDK при корректно заданном FX3FWROOT.

Как прошивается устройство

Обычно для этого используют стандартные инструменты FX3 SDK, например Cypress Control Center / Programmer utility, в зависимости от того, как у вас устроен стенд:

  • загрузка в RAM для отладки;
  • запись в SPI flash для постоянной загрузки.

Структура репозитория

Редактируются руками:

  • cyfxslfifosync.c
  • cyfxslfifosync.h
  • cyfxslfifousbdscr.c
  • README.md
  • GPIF Designer project в sync_slave_fifo_2bit.cydsn

Generated / служебные файлы:

  • cyfxgpif_syncsf.h - generated из .cyfx
  • Debug/* - build output Eclipse
  • readme.txt - исходный vendor readme

Итог

  • FX3 firmware проект;
  • с практической 4-канальной схемой USB <-> PIB;
  • с отдельным GPIF II Designer источником;
  • с Eclipse build pipeline;
  • и с последующей прошивкой устройства через готовый .img.

Подобный синхронный Slave FIFO / USB <-> GPIF используется во многих практических системах, где нужен стабильный потоковый обмен между внешней логикой и USB-host: FPGA-узлы, измерительные стенды, регистраторы, специализированные контроллеры и прикладные GUI-комплексы.

See more GuiRNG: https://github.com/vdremine/GuiRNG.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors