Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/andrejchoo/uart_spiflash_programmer_on_fpga
UART programmer SPI FLASH 25-series on FPGA or CPLD
https://github.com/andrejchoo/uart_spiflash_programmer_on_fpga
fpga programmer spi-flash verilog
Last synced: 3 days ago
JSON representation
UART programmer SPI FLASH 25-series on FPGA or CPLD
- Host: GitHub
- URL: https://github.com/andrejchoo/uart_spiflash_programmer_on_fpga
- Owner: AndrejChoo
- License: gpl-3.0
- Created: 2023-10-11T15:17:17.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2025-01-02T14:36:36.000Z (about 1 month ago)
- Last Synced: 2025-01-02T14:38:55.795Z (about 1 month ago)
- Topics: fpga, programmer, spi-flash, verilog
- Language: Verilog
- Homepage:
- Size: 88.9 KB
- Stars: 2
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# UART_SpiFlash_Programmer_on_FPGA
UART programmer SPI FLASH 25-series on FPGAПредставленный проект состоит из двух компонентов: программа для ПК и проект на Verilog, которые превращают практически любую отладочную плату с FPGA в USB программатор SPI флешек. Есть только одно ограничение - на плате должен быть USB-UART конвертер (или можно подключить внешний).
Зачем это нужно? Для удобства. Например: Вы разрабатываете некое устройство на FPGA, у которого данные хранятся на флешке. При отладке приходится часто перезаписывать флешку. Для этого нужно цеплять программатор или доставать флешку из панельки. А так, просто залил прошивку программатора - и готово, можно прошивать не отключая кабеля. По моему очень удобно.
Сама прошивка представляет из себя несколько конечных автоматов: UART RX, UART TX, SPI и главный автомат, который синхронизирует их работу. В качестве буфера памяти используется встроенная в FPGA блочная память, сконфигурированная как DUAL PORT RAM на 1Кб.Скорость работы программатора достаточно высокая, при скорости UART 921600 бод запись одного мегабайта занимает около 28 секунд. Можно попробовать более высокую скорость UART (2000000, например), если таковую поддерживает USB-UART переходник.
Проект состоит из четырёх файлов: uart_rx.v, uart_tx.v, spi.v и топ модуль uart_prog.v. В первых трёх файлах можно настроить скорость работы каждого модуля и указать входную частоту. В главном модуле uart_prog.v находятся два конечных автомата: первый собирает входящий пакет, записывает его в RAM и даёт команду на обработку пакета; второй автомат более сложный, он обрабатывает принятый пакет, управляет периферическими автоматами (UART_TX, SPI) и организует алгоритмы работы со SPI Flash памятью. В этом автомате используются несколько подпрограм (многократно повторяющихся процедур) и организован простейший стек для сохранения адреса возврата (регистр "ret").
Работа проверена на FPGA Altera Cyclone IV и на Gowin TangNano9k (в последней использовался встроенный USB-UART и прошивалась встроенная SPI Flash, для этого необходимо в настройках проекта указать, что пины Dual purpose MSPI используются в качестве General IO).
При переносе проекта на другие FPGA необходимо учитывать полярность тактирования встроенной памяти: у Altera она отрицательная (по спаду), у Gowin, Linux положительная (по фронту).
Программа для ПК используется из другого моего проекта [UART_Prog](https://github.com/AndrejChoo/uart_prog), можно брать оттуда. Программа написана на C# для Windows x64 и переписана на Qt для Windows и Linux x64 и Aarch64.
![soft](https://github.com/AndrejChoo/uart_prog/blob/main/software/soft.png)
В данном коде реализована работа только со SPI Flash 25-й серии, элементы на остальных вкладках (24ххб 93Схх) просто игнорируются прошивкой FPGA. В дальнейшем планирую добавить поддержку программирования этих EEPROM, возможно отдельными проектами, чтобы их объём не превышал разумные пределы.
Из нереализованных функций пока только запись SREG1,2, эта функция работает некорректно, всё остальное (запись, чтение, стирание, чтение ID, чтение SREG работает нормально).