Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

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: 29 days ago
JSON representation

UART programmer SPI FLASH 25-series on FPGA or CPLD

Awesome Lists containing this project

README

        

# UART_SpiFlash_Programmer_on_FPGA
UART programmer SPI FLASH 25-series on FPGA or CPLD

Представленный проект состоит из двух компонентов: программа для ПК и проект на Verilog? которые превращают практически любую отладочную плату с FPGA (или даже CPLD с достаточным количеством LUT: необходимо не менее 186 макроячеек LUT4 без всяких специфических периферических модулей) в USB программатор SPI флешек. Есть только одно ограничение: на плате должен быть разведён сигнад RTS# от USB-UART (или подключен "внешний" USB-UART конвертер), он управляет ножкой CS флешки.
Зачем это нужно? Для удобства. Например: Вы разрабатываете некое устройство на FPGA, у которого данные хранятся на флешке. При отладке приходится часто перезаписывать флешку. Для этого нужно цеплять программатор или доставать флешку из панельки. А так, просто залил прошивку программатора - и готово, можно прошивать не отключая кабеля. По моему очень удобно.
Сама прошивка представляет из себя несколько конечных автомата: UART RX, UART TX, SPI и главный автомат, который синхронизирует их работу. В итоге получается UART-SPI мост, который при получении байта по UART отправляет его в SPI и возвращает обратно в UART считанный одновременно с записью байт из SPI. Всю остальную работу выполняет программа на компьютере.

Скорость работы программатора конечно не соизмерима с каким-нибудь CH341 или ему подобным, но и не совсем низкая для UART программатора - чтение одного мегабайта занимает 1 минута 33 секунды, запись - 3 минуты 21 секунды. Такая скорость обустовлена тем, что программатор работает побайтно (не побитный bit banging, не и не пакетный обмен). Для сравнения, другой мой программатор на Atmega работает с соизмеримой скоростью, хотя и обменивается пакетами переменной длины.

Проект состоит из четырёх файлов: uart_rx.v, uart_tx.v, spi.v и топ модуль uart_prog.v. В первых трёх файлах можно настроить скорость работы каждого модуля и указать входную частоту. Мои конечные автоматы имеют линейную структуру и очень громоздкие (кроме UART RX, его я скопировал из чужого проекта), поэтому их можно оптимизировать для уменьшения количества занимаемых ресурсов ПЛИС.

Софтовая часть написана на C#, естественно под Windows, имеет вполне удобный и интуитивно понятный графический интерфейс. В программе не используются какие-либо специфические для C# события, поэтому код несложно переписать на что-нибудь кроссплатформенное, например Qt. Исходники прилагаются. Из поддерживаемых устройств я добавил "на пробу" флешки Winbond объёмом от 512КБ до 8МБ. Учитывая, что большинство флешек 25 серии в однибитном режиме программируются одинаково, то можно работать с микросхемами других производителей такого же объёма. При желании можно добавить поддержку других моделей в коде (не стал выносить внешний файл с базой флешек, так как программу писал "на скорую руку" да и ради развлечения.

Работу проекта я проверял на Alteta Cyclone EP1C3144. Это довольно древняя ПЛИС-ина, думаю, что на более новых ПЛИС-ах проблем также не возникнет.