Пока Ярослав сочиняет свой вариант контроллера псевдодиска на SD-картах для УКНЦ, я неспешно размышляю на ту же тему для ДВК. С PSoC я не знаком и пока в моих ближайших планах не предусмотрено изучения входящей в него ПЛИС. Но вот с STM32 я, худо-бедно, разобрался и сейчас планирую попробовать реализовать подобный контроллер на вот такой китайской пробной плате.
Сразу скажу, устройство планируется в стиле DW. В PIO-Mode как-то передаем ему блок параметров (и, может быть, данных), затем даем команду GO, после чего устройство отключается от МПИ и занимается своими делами. По окончании этих дел планируется прерывание (если разрешено).
100-ногий STM32F103VET6, стоящий на той платке имеет на борту полноценный контроллер SDIO, к которому напрямую можно прицепить ту самую (микро)SD-карточку. 72-МГц процессора вполне хватает, чтобы вести обмен с МПИ/Q-Bus через GPIO в синхронном программном режиме, единственное, чего не хватает - это возможности просигналить "Думаю, прошу не мешать" (дальше буду писать ДПнМ).
Пока общаемся по МПИ, все выходит ровно, а как полезешь к флешке, а это процедура долгая, возможность поймать фронт СИА теряется и все, если ЦП полезет в это время к контроллеру, будет Trap to 4.
Я вижу несколько решений этой проблемы, но все они что-то усложняют.
(1) Можно просто объявить это фичей. Мол, от выдачи команды GO и до прерывания регистры контроллера недоступны, будет Trap to 4. Это усложнит программирование со стороны ЦП, зато склепать такой агрегат из готовой китайской платы с микроконтроллером, и нескольких шинных драйверов, сможет даже неспециалист в электронике - лишь бы паять умел!
(2) Можно сделать узел ДПнМ на рассыпухе. К оборудованию для (1) добавляются одна 531ЛА19, пара 1533ЛН1, какой-то 1533-й регистр, может, одна-две ЛА3, одна "силовая" 8-ножка, вроде 155ЛА18 или ЛЕ2 (чтобы отдать в МПИ СИП и бит Д15, тот самый, ДПнМ) и, вроде-бы, все.
(3) Поставить второй STM32F103VET6 (вторую китайскую платку), который возьмет на себя синхронную работу с МПИ на время занятости первого, заодно туда можно будет засунуть что-то еще, те же компорты, допустим, их там целых 5 штук.
(4) Сваять этот узел на ПЛИС.
Сразу скажу, что вариантом (4) я заниматься не буду, не знаю я ПЛИС и изучать их пока не собираюсь. Вариант (3), как говорит молодежь, жутчайший оверкилл. Лично мне импонирует первый вариант, хотя и со вторым я справлюсь без вопросов.
Почему, спросите, 100-ногий F103VET6 ? Все просто: 100 ног нужно для того, чтобы гарантировано нашелся полностью свободный 16-разрядный порт GPIO с Full 5V-tolerance для подключения к ДА15-00 МПИ, чтобы не манипулировать битами, собирая принятое с МПИ из разных GPIO. Среди 64-ногих такого я не нашел. Ну, а именно F103VET6 - потому, что и платка с ним тогда оказалась на Али самой дешевой из платок со 100-ногими STM32, $11 с копейками (сейчас и еще дешевле), и сам чип F103VET6 в партиях по 10 шт обходится в $2 с копейками, на Али куча предложений. Ну, и параметры очень приличные - 64К оперативки, 512К флеши для программы, 72 МГц...
Теперь об изготовлении. Разработку и отладку можно провести "на соплях", используя готовую китайскую плату и какую-то самодельную макетку, которая воткнется в МПИ. Если кто-то, как и я, соберется что-то макетировать, ее можно напечатать лазерным утюгом или сделать из удлиннителя от 15ИЭ-00-013. У меня для этого есть готовая макетка из старых запасов. А вот боевой вариант, по-любому, надо будет напечатать. И, по моим прикидкам, вариант (1) легко разведется на двусторонней плате без металлизации отверстий, то есть ее можно будет сделать лазерным утюгом. Все остальные потребуют, как минимум, металлизации отверстий, а, значит, плата будет заказная. И, учитывая, что она большая ("половинка" ДВК), цена у нее будет - ой!
Немного о возможных вариантах. Из сотни ног чипа штук 40 точно останутся свободными, на них можно будет сваять что-то еще. Допустим, подключить тот же IDE-винчестер, о котором мечтает Хунта. Желающие трудностей могут попробовать заменить F103VET6 на F107VCT6, там на борту, правда, нет контроллера SDIO, зато есть USB OTG и Ethernet. А у F407VET6 есть всё вместе, да еще и 168 МГц, и 192К оперативки, и всего в 2-3 раза дороже, чем 103-107, программируй - не хочу. Вот я и не хочу пока всем этим заниматься - дай Бог, завести псевдодиск на микро-SD.
А теперь, прошу помощи клуба. Раз это диск, то с него должна быть возможность загрузиться. Чтобы не связываться еще и с ПЗУ загрузчика, проще всего воспользоваться командой загрузки с перфоленты. На Э-60 и на ДВК с ВМ1 где считывание абсолютного загрузчика делается командой 177550L, все просто. Набрал вместо 177550 адрес регистра состояния своего устройства, и вперед! А вот с ВМ2 и ВМ3 такое возможно только с альтернативными системными прошивками - 279 и 377 соответственно - у родных прошивок 055 и 134 абсолютный загрузчик считывается по простому нажатию буковки "L" и смена регистра состояния не предусмотрена. Так вот, спрашивается: что делать? Положить регистры устройства по адресам 177550-177556? Можно, но тогда, во-первых, их будет всего 4, и, во-вторых, перфолентами на ДВК с таким контроллером уже не воспользуешься. Положить их в другое место? тогда без замены системного ПЗУ не воспользуешься загрузчиком с перфоленты. Можно еще поизощряться с командами типа mov -(R7),(R0)+ и загрузить что угодно из флеши контроллера, используя всего один адрес в пространстве ввода-вывода, как это было предложено где-то в МПСиС...
В общем, собственно вопросы
1. Дайте мне, пожалуйста, блок адресов в пространстве ввода-вывода для моего контроллера.
2. Как лучше оформить начальный загрузчик?
3. Принимаю советы по организации регистров устройства.
4. Есть мысль попробовать сделать обмен данными через DMA. Стоит ли связываться?
5. Дайте, плз, двухбуквенное имя устройства.
----------------------------------------------------
upd: Контроллер разработан
Ссылки:
Основная страничка поддержки проекта [инструкции, техническое описание, обновления фирмвари]
Контроллер псевдодиска на MicroSD
Контроллер псевдодиска на MicroSD: сборка и наладка конструктора контроллера v1.01
Контроллер псевдодиска на MicroSD: подключение сетевой карты
Канал оперативной поддержки всего что связано с контроллерами серии AZ
Разработка версии для УКНЦ
УКНЦ + AZ - вариант контроллера псевдодисков на микро-SD для УКНЦ.
Контроллер псевдодиска на MicroSD на шину МПИ: особенности версии для УКНЦ
Разработка версии для БК-0010/11/11M
AZ для БК-0011М
Основная страничка проекта для БК-0010/11/11M
AZ для БК-0010 БК-0010.01 БК-0011 БК-0011М, расширенная версия AZ
Контроллер AZ BK: Процедура обновления firmware (прошивки) контроллера
Контроллер AZ BK: Обновления прошивки
Приобрести контроллер можно на Барахолке
Версия контроллера для ДВК
Версия контроллера для УКНЦ
Версия контроллера для QBUS PDP-11
upd 2020: появилась поддержка сети
Контроллер псевдодиска на MicroSD ДВК / УКНЦ: подключение сетевой карты
upd 2022: заработали часы RTC, ест возможность установки часов с NTP сервера
Контроллер псевдодиска на MicroSD ДВК / УКНЦ: NTP RTC часы