Просмотр полной версии : Реализация интерфейса для SD-карты на ПЛИС
andykarpov
27.02.2015, 17:04
Не видел еще ни одной нативной реализации интерфейса SD-карты на ПЛИС. В основном, насколько я видел, используется либо отдельный микрокотроллер (как в speccy2010), либо реализация на уровне байт-кода эмулируемой машины (по типу sdbios от b2m).
В виду того, что прийдется реализовывать не только низкоуровневые чтение/запись, но и реализацию файловой системы, идея как-то не внушает оптимизма по объему работы.
Но вдруг появилась еще одна зацепка: а что если взять core от какого-нибудь Atmega8 и на базе него использовать уже готовую реализацию (например от vinxru для семейства РК86/Апогей/Микроша/Специалист/итп) ?
Нужен всего-то 1кб RAM-блоков и еще какое-то количество памяти под регистры.
Вот ссылка на доку, которая нашлась: http://moutou.pagesperso-orange.fr/ER2/CoreAtMega8_en.pdf
Как вы считаете, насколько идея может быть реальная ?
или может я плохо искал и в природе уже есть реализация SD + FatFS на ПЛИС? :)
Очень интересна эта тема, правда не процесс, а результат :)
Вариант b2mа компактный и в целом замечательный, но хотелось бы иметь доступ к решению с поддержкой SDHC (ну совсем невыгодно в 2015 покупать карты на 2 Гб), fat32 и фрагментированных файлов
---------- Post added at 20:40 ---------- Previous post was at 20:10 ----------
Нужен всего-то 1кб RAM-блоков и еще какое-то количество памяти под регистры.
Имхо тут важнее будет (для бюджетных ПЛИСин), сколько займет сама программа поддержки sd. PetitFS (старой версии) svofski уложил в примерно 18 Кб (на С 6502)
---------- Post added at 21:16 ---------- Previous post was at 20:40 ----------
примерно 18 Кб (на С 6502)
Сейчас посмотрел, что авторская оценка размера кода PetitFS - 2-4 Кб. Как я понимаю, это с нормальным C. И у svofski плюс еще эмуляция ВГ93. Какое сейчас есть стабильное, компактное и поддержанное нормальным компилятором ядро более-менее современного процессора?
Раз (http://opencores.org/project,sdcard_mass_storage_controller).
Два (https://github.com/rkrajnc/minimig-de1). Здесь амижную дискету обслуживает как называемый "хост", представляющий собой кору ВНЕЗАПНО z80 в фпга с кодом.
andykarpov
28.02.2015, 12:06
Раз (http://opencores.org/project,sdcard_mass_storage_controller).
Два (https://github.com/rkrajnc/minimig-de1). Здесь амижную дискету обслуживает как называемый "хост", представляющий собой кору ВНЕЗАПНО z80 в фпга с кодом.
sd_mass_storage_controller я видел на opencores, реализация очень непростая, к тому же сам контроллер на выходе имеет интерфейс к wishbone bus, тут вообще непонятно, как к нему подступиться. Примеров использования нет. Реализации Fat16/Fat32 нет.
По поводу minimig-de1 - вот это уже интереснее, спасибо!
Интересно, хватит ли у бюджетной fpga ресурсов, чтобы затянуть в нее несколько z80, и один из них пустить на реализацию "хоста" для SD-карточки ? :)
HardWareMan начинал делать что-то, вроде даже безо всяких процессоров, но насколько продвинулся - я не знаю. Самое сложное, конечно, поддержка файловой системы, но интерфейс можно ограничить лишь чтением/записью секторов, всё равно многие компьютеры имеют свой формат файловой системы. Нужно лишь сделать автоматический поиск нужного раздела, на котором будет "своя" файловая система. Но тут останется открытым вопрос перекачки файлов с одного раздела на другой, с другой файловой системой. Тут, наверное, проще будет на винде/линуксе/осикс сделать прогу, которая качает файлы туда-сюда.
1. wishbone это милейшая из всех удобнейших шин.
2. Что называть "бюджетной" фпга? Кора з80 на ер2с8 весит около 2к5 ЛЕ, прога для зетника - килобайта 2 чтоли, лезет в 4 внутренних памяти.
ILoveSpeccy
28.02.2015, 20:46
Имхо тут важнее будет (для бюджетных ПЛИСин), сколько займет сама программа поддержки sd. PetitFS (старой версии) svofski уложил в примерно 18 Кб (на С 6502)
Я как-то делал загрузчик с SD-карты. В качестве процессова использовал MIPS-I (Plasma с OpenCores). Писал на си, компилировал GCC4.6.8
В итоге получился бинарник размером около 4200 байт. Урезать до 4Кб так и не получилось :)
Использовал PetitFatFS от Чана. Поддерживалось только чтение FAT12/FAT16/FAT32 с SD/SDHC картами.
---------- Post added at 18:46 ---------- Previous post was at 18:36 ----------
И у svofski плюс еще эмуляция ВГ93.
Если я не ошибаюсь, то софтпроцессор в проекте вектора только отсылает содержимое секторов в буфер, а сама ВГ93 реализована на верилоге и данные из буфера хавает.
В чановском фате полно быдлокода. Инфа 100%.
ILoveSpeccy
28.02.2015, 22:44
В чановском фате полно быдлокода. Инфа 100%.
Альтернативы есть?
Есть. Оптимизировать ручками. Что я и делал, если чо.
Я как-то делал загрузчик с SD-карты. В качестве процессова использовал MIPS-I (Plasma с OpenCores). Писал на си, компилировал GCC4.6.8
В итоге получился бинарник размером около 4200 байт. Урезать до 4Кб так и не получилось
Использовал PetitFatFS от Чана. Поддерживалось только чтение FAT12/FAT16/FAT32 с SD/SDHC картами.
Есть ли планы когда-нибудь открыть исходники этой штуки? Это только загрузчик, без рудиментарного оса, как у b2mа? Насколько я понимаю, нечто подобное (sd loader или что-то в этом роде) сделал HardWareMan для специалиста, только код там исполняется на 580ВМ80
ILoveSpeccy
01.03.2015, 12:53
Есть ли планы когда-нибудь открыть исходники этой штуки? Это только загрузчик, без рудиментарного оса, как у b2mа? Насколько я понимаю, нечто подобное (sd loader или что-то в этом роде) сделал HardWareMan для специалиста, только код там исполняется на 580ВМ80
Да без проблем! Вечером пороюсь в ноуте, где-то сырки лежали...
Загрузчик очень простой и делает одну простую вещь.... Во внутренней памяти FPGA лежит сам загрузчик, и при первом старте он загружает с SD-карточки программу в SRAM/SDRAM и передаёт ей управление.
Основная идея была такой... На "большой" плате Aeon'a есть и SRAM, и SDRAM. Если какая либо конфа работает с SDRAM например, то можно использовать SRAM для фирмвари, которая будет обслуживать конфу... Эмулить дисковёрт и прочее. А так как SRAM там 1Мб, то для творчества предела нет.
Кстати, эта корка "Plasma" очень шустрая + вменяемый компилятор GCC и newlib.... Чего ещё для счастья надо???
Так что очень советую.
У меня для DE1 есть готовый проект SoC с этой коркой и немного периферии к ней... SPI, UART, timer, random generator, VGA, PS/2, контроллеры SDRAM/SRAM и немного другой мелочёвки. Всё самописное, кроме самого проца.
Если есть интерес, могу выложить проект на github...
У меня для DE1 есть готовый проект SoC с этой коркой и немного периферии к ней... SPI, UART, timer, random generator, VGA, PS/2, контроллеры SDRAM/SRAM и немного другой мелочёвки. Всё самописное, кроме самого проца.
Если есть интерес, могу выложить проект на github...
Да, было бы очень интересно посмотреть
andykarpov
18.03.2015, 12:20
Нашел интересный проект: https://github.com/robinsonb5/ZPUFlex
Это типа урезанная копия ZPU softcore.
Автор на своей странице выложил массу примеров, включая OSD + доступ к SD карточке. Вот например реализация загрузчика ROM с SD карты: http://retroramblings.net/?page_id=684
Есть полноценный gcc toolchain, прошивки можно писать на C.
Собрать toolchain у меня не получилось под linux'ом, оно на каком-то этапе обращалось к несуществующим бинарникам cygwin'а.
Скомпилированный toolchain уже готовый не знает ничего про флаги оптимизации zpu-elf-gcc для ZPUFlex.
В общем тут сложности, конечно. Может под cygwin будет работать ?
Пробовал готовые примеры, работают :)
По количеству LE - получается где-то 2500, ну и плюс altram для начального загрузчика и прошивка самого softcore.
Если выкинуть все лишнее (OSD, шрифты, vga-контроллер, и тп) - думаю можно поместиться в 1000 LE где-то.
Теоретически, если запилить один из его примеров (например вот этот: https://github.com/robinsonb5/ZPUDemos/tree/master/SDBootstrap), можно сделать универсальный загрузчик. На SD карте будет некий конфиг MANIFEST.MST, в котором будут описаны какие именно файлы в какую область памяти записывать.
---------- Post added at 11:20 ---------- Previous post was at 11:10 ----------
А вот тут чувак пилит нативную реализацию чтения fat32 карточки на vhdl: https://github.com/wsoltys/mist-cores/tree/master/misc/sdcard/src
Пока у него, насколько я понял, получилось только список файлов прочитать.
В проекте pdp2011 эмулируется 3 разных контроллера (pdp-шных). Там в каждом из них почти copy/paste-ом минимальный функционал который пишет\читает блоки на sd карту (никаких файловых систем и никаких sdhc).
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot