Важная информация

User Tag List

Страница 1 из 20 12345 ... ПоследняяПоследняя
Показано с 1 по 10 из 194

Тема: Контроллер псевдодиска на SD-карте для ДВК

  1. #1
    Veteran
    Регистрация
    02.03.2015
    Адрес
    г. Караганда, Казахстан
    Сообщений
    1,629
    Благодарностей: 507
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Контроллер псевдодиска на SD-карте для ДВК

    Пока Ярослав сочиняет свой вариант контроллера псевдодиска на 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. Дайте, плз, двухбуквенное имя устройства.
    Кто мешает тебе выдумать порох непромокаемый? (К.Прутков, мысль № 133)

  2. Эти 3 пользователя(ей) поблагодарили AFZ за это полезное сообщение:
    hobot (23.09.2017), perestoronin (18.11.2018), SuperMax (25.09.2017)

  3. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  4. #2
    Guru
    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,699
    Благодарностей: 2830
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    DMA полезно для загрузки, потому что можно добавить контроллеру команду "прочитать блок 0 устройства 0 по адресу 0" и/или ( для более продвинутых извращений ) "переслать сервисный код в ОЗУ с адреса 020000", тогда после засылки с пульта в регистр контроллера такой команды - можно будет начать загрузку командой G или запустить сервисный код командой 20000G.

    - - - Добавлено - - -

    При реализации прерываний и DMA - можно легко сделать разновидность контроллера HD. В таком случае подходит имя устройства HD.


    Когда процессор контроллера занят - не надо отдавать в МПИ никаких битов. Достаточно, чтобы перед уходом в офлайн процессор контроллера активировал аппаратную "заглушку", которая при активации SYNC сличает адрес на шине с адресом CSR и при совпадении - замыкает линию DIN на линию RPLY, а при сбросе SYNC - сбрасывается в исходное состояние. Данные на шину выставлять не надо, тогда CPU считает с шины нули - и это будет признаком "BUSY". На запись отвечать не обязательно - никто не пишет в CSR, когда там нет флага разрешения записи ( READY ). Когда контроллер в онлайне - он сам эмулирует CSR и всегда держит там признак "READY" ( бит 0200 ). Перед каждым "сеансом" работы с контроллером драйвер должен дождаться появления бита READY в CSR.
    Последний раз редактировалось Patron; 24.09.2017 в 03:36.

  5. Этот пользователь поблагодарил Patron за это полезное сообщение:
    hobot (23.09.2017)

  6. #3
    Moderator Аватар для MM
    Регистрация
    20.04.2013
    Адрес
    г. Павловский Посад
    Сообщений
    2,540
    Благодарностей: 1027
    Mentioned
    11 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от AFZ Посмотреть сообщение
    2. Как лучше оформить начальный загрузчик?
    Посмотрите повнимательней 055 ПЗУ - там вроде как есть загрузка с лентопротяга пользователя (Адр)L.
    Можно пойти простым путем - при установке какого-то бита появляется текст ПЗУ ма МПИ - например, на 173000 ( или др. адресе ), и пользователь может его запустить на исполнение.
    *
    Цитата Сообщение от AFZ Посмотреть сообщение
    1. Дайте мне, пожалуйста, блок адресов в пространстве ввода-вывода для моего контроллера.
    Как насчет 177000 - 177022 ?
    *
    Цитата Сообщение от AFZ Посмотреть сообщение
    3. Принимаю советы по организации регистров устройства.
    См. DW: , но с резиновым объемом.
    *
    DMA - значит - заведомый гемор, или под многозадачник.
    *
    Цитата Сообщение от AFZ Посмотреть сообщение
    5. Дайте, плз, двухбуквенное имя устройства.
    AF:
    *
    Я бы посоветовал взять за основу готовый КМД ДВК, и просто сменить адрес ВП1-095/096, ну и текст прошивки. Так же отказаться от ВП1-128 - сменить её на мелкоту или ВП1-033.
    Коллекционирование радиодеталей : http://collectingrd.kxk.ru/

  7. #4
    Оператор ДВК Аватар для hobot
    Регистрация
    30.08.2011
    Адрес
    Зеленоград
    Сообщений
    5,208
    Благодарностей: 1206
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от AFZ Посмотреть сообщение
    5. Дайте, плз, двухбуквенное имя устройства.
    AZ, AZ.SYS, AZX.SYS и т.д. и т.п. )
    Архив программ для УК-НЦ, ДВК и БК.

    Ищу игру "СТРАНА МОНСТРОВ" [monstr.sav] для ДВК.

  8. Этот пользователь поблагодарил hobot за это полезное сообщение:
    SuperMax (25.09.2017)

  9. #5
    Guru
    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    2,088
    Благодарностей: 276
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А если что то типа STM32F407VET6?

  10. Этот пользователь поблагодарил Hunta за это полезное сообщение:
    perestoronin (18.11.2018)

  11. #6
    Veteran
    Регистрация
    02.03.2015
    Адрес
    г. Караганда, Казахстан
    Сообщений
    1,629
    Благодарностей: 507
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    При реализации прерываний и DMA - можно легко сделать разновидность контроллера HD. В таком случае подходит имя устройства HD.
    Я бы тоже хотел воспользоваться HD - давно утверждены состав и назначение битов регистров, есть готовый драйвер... Но HD работает мгновенно - ему дали команду, и на следующий такт виртуального процессора данные появились в памяти. В реале такое не выйдет. Если добавить в HD возможность ожидания - пусть в эмуляторе она и не будет использоваться, поскольку данные появились мгновенно, но, если они не появились... Впрочем, скорее всего, не выйдет. HD ведь не предусматривает отключения всех регистров на время ожидания? И прерываний у него нет.

    Цитата Сообщение от Patron Посмотреть сообщение
    Когда процессор контроллера занят - не надо отдавать в МПИ никаких битов. Достаточно, чтобы перед уходом в офлайн процессор контроллера активировал аппаратную "заглушку"
    То есть, вариант (2). Именно так я и представляю себе конструкцию на ЛА19, нескольких инверторах, мощной 8-ножке и, может быть, паре-тройке простых ЛЭ - детально я ее не продумывал. Причем отдать один бит в МПИ почти ничего не стоит - та самая 8-ножка содержит два ЛЭ, один отдаст СИП, второй свободен, цена вопроса - лишняя пара проводков на макетке или дорожек на боевой плате. Ладно, буду думать...

    Цитата Сообщение от MM Посмотреть сообщение
    Посмотрите повнимательней 055 ПЗУ - там вроде как есть загрузка с лентопротяга пользователя (Адр)L
    Все хуже. Попробовал в эмуляторе 134-ю, она вообще на букву L не реагирует, так, что перфоленточный загрузчик отменяется.

    Цитата Сообщение от MM Посмотреть сообщение
    при установке какого-то бита появляется текст ПЗУ ма МПИ - например, на 173000 ( или др. адресе ), и пользователь может его запустить на исполнение.
    173000/165000 отпадают однозначно - кроме ДВК есть еще и Э-60 (М6, М8), а кое у кого и 11/83-84, конфликтовать с их ПЗУ загрузчиков не хочется. К тому же в МПСиС был опубликован замечательный прием, позволяющий разместить ПЗУ загрузчика на одном адресе. Адрес внутри ПЗУ перебирается отдельным аппаратным счетчиком, после каждого считывания к нему прибавляется единица, адресация внутри пословная. Первой командой в ПЗУ располагают команду MOV -(R7),R0, затем адрес загрузки, затем MOV -(R7),(R0)+, затем первую команду загружаемой программы, затем снова MOV -(R7),(R0)+, следующую команду программы и т.д. В конце ставят каким-то образом переход на загрузчик, например MOV -(R7),R0, <адрес перехода>, JMP @R0. Команда MOV -(R7),<регистр или косвенно-регистровый адрес>, первым делом скорректирует адрес следующей команды, схемы ЦП прибавят к немк двойку, а автодекремент ее отнимет, в результате адрес останется тем же. А адресный счетчик ПЗУ подставит на этот адрес следующее слово данных (нечетное обращение, считая с нуля) или следующую команду (четное обращение). Цена вопроса - дополнительный аппаратный счетчик и двойной расход объема ПЗУ. В нашем же случае - несколько лишних строк кода, а ПЗУ у нас большое. Хотя бесплатные кейловские 32К я занял уже на 45%. Впрочем, "таблетки от жадности" никто не отменял...

    Цитата Сообщение от MM Посмотреть сообщение
    DMA - значит - заведомый гемор, или под многозадачник.
    Да не то, чтобы так. В моем варианте реализации DMA - это лишние 6 шинных драйверов для A16-21, второй комплект шинных драйверов для управляющих сигналов (СИА, СИП, ВВОД, ВЫВОД и т.д.). Если делать без ДМА, то на прием с МПИ хватит 1/6-й простого 1533ЛН1, на передачу - половины 155ЛА18 или похожей мощной восьминожки с другой логической функцией. А для ДМА их придется ставить двусторонними, или ставить второй комплект с обратной функцией. Да, увеличивается количество рассыпухи, причем заметно.

    Цитата Сообщение от MM Посмотреть сообщение
    См. DW: , но с резиновым объемом.
    Для точной эмуляции, боюсь, опять понадобится много рассыпухи. А неточная смысла не имеет. Впрочем, погляжу.

    Цитата Сообщение от MM Посмотреть сообщение
    Я бы посоветовал взять за основу готовый КМД ДВК, и просто сменить адрес ВП1-095/096
    Зачем? Я планирую, по-простому, эмулировать несколько абонентов МПИ на ножках GPIO контроллера. Обычной синхронной зацикленной программой. Ожидаю пассивного СИА. Жду фронт СИА: снял себе в переменную состояние ДА15-00, проверил СИА. Неактивен? Назад, на метку "Жду фронт СИА". Иначе по МПИ только что передан адрес. Сравниваю его со своими. Не мой? назад на ожидание пассивного СИА. Иначе разбираюсь, что мне там предлагают сделать... 72-МГц процессор сделает все это не напрягаясь, ЦП и не заподозрит, что там не аппаратные регистры, а программная эмуляция. Таким образом, без ДМА, всего оборудования будет: БИС микроконтроллера, 4 шинных драйвера для К ДА00-15 Н, пара 1533ЛН1 для приема управляюших сигналов МПИ и одна-две мощных восьминожки для передачи К СИП Н, К ТПР Н, может еще что понадобится... Ну, и заглушка "Думаю, прошу не мешать", которую мы обсуждаем с Патроном. И никаких ВП1-ххх, ВМ1 и прочих.

    - - - Добавлено - - -

    Цитата Сообщение от Hunta Посмотреть сообщение
    А если что то типа STM32F407VET6?
    Можно и такое, есть у меня такая платка. Единственный недостаток, если дело дойдет до мелкой серии, на Али они вдвое дороже. 103VET6 попадаются по $23 за десяток, а 407VET6 не менее $43 за тот же десяток. Впрочем, эта разница, думаю, потеряется на фоне цены платы - все-таки, "половинка" ДВК/Э-60 - более 3 кв. дм!

    А так - замечательный МК. На борту и SDIO, и USB OTG, и 100-Мбит Ethernet, и еще много чего, включая 168 МГц и 192К оперативки.
    Кто мешает тебе выдумать порох непромокаемый? (К.Прутков, мысль № 133)

  12. #7
    Guru
    Регистрация
    30.11.2015
    Адрес
    г. Самара
    Сообщений
    2,088
    Благодарностей: 276
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    AFZ, просто именно такой вариант мне уже почти дошёл (оно и отладочный модуль уже пришли в Ёбург, значит к концу недели будут у меня)

  13. #8
    Guru
    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,699
    Благодарностей: 2830
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от AFZ Посмотреть сообщение
    Но HD работает мгновенно - ему дали команду, и на следующий такт виртуального процессора данные появились в памяти.
    Ну, вот прямо сейчас я уже сделал 3-ю версию контроллера HD, где в CSR добавлен бит разрешения прерываний 0100, при установке которого контроллер начинает выполнять команды чтения и записи с задержкой 100 мкс, во время которой бит READY сброшен и после которой происходит прерывание по вектору 0164.

    Сейчас напишу для этого контроллера драйвер, проверяющий бит READY в CSR перед каждым обращением к любому регистру - и всего делов. Главная особенность использования прерываний контроллером HD - они возникают только в двух случаях: 1) после начала выполнения команды чтения; 2) после начала выполнения команды записи. Все остальные команды выполняются "мгновенно", т.е. пока драйвер идёт ждать появления бита READY в CSR - контроллер уже готов сообщить в регистре данных размер подключенного образа или принять в регистре данных значения номера устройства, номера блока, адреса буфера или счётчика слов.

  14. #9
    Guru Аватар для MiX
    Регистрация
    13.12.2013
    Адрес
    г. Санкт-Петербург
    Сообщений
    2,804
    Благодарностей: 926
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Patron Посмотреть сообщение
    Ну, вот прямо сейчас я уже сделал 3-ю версию контроллера HD
    А как будет реагировать контроллер если "карту SD"* вытащить и вставить другую?

    *В эмуляторе это будет образ HD.

  15. #10
    Guru
    Регистрация
    11.09.2009
    Адрес
    Москва
    Сообщений
    4,699
    Благодарностей: 2830
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от MiX Посмотреть сообщение
    А как будет реагировать контроллер если "карту SD"* вытащить и вставить другую?
    *В эмуляторе это будет образ HD.
    Образ HD - это файл на карте SD, смонтированный в виртуальный привод. Вытащить карту SD при работающем контроллере, это как вытащить флешку из гнезда USB, с которой в эмуляторе смонтирован образ - тогда до размонтирования образа - все обращения чтения и записи будут давать аппаратную ошибку, которую эмулятор контроллера HD возвращает драйверу в старшем бите CSR.

    - - - Добавлено - - -

    Цитата Сообщение от AFZ Посмотреть сообщение
    Причем отдать один бит в МПИ почти ничего не стоит - та самая 8-ножка содержит два ЛЭ, один отдаст СИП, второй свободен, цена вопроса - лишняя пара проводков на макетке или дорожек на боевой плате.
    Нет смысла отдавать биты в "режиме заглушки", потому что при работе контроллера с регистрами - в CSR всегда есть какой-то установленный бит и только при "режиме заглушки" все биты сброшены - это позволяет детектировать режим заглушки одной командой TST (R1). Когда надо проверять какой-то бит - команда становится длиннее на одно слово ( маску этого бита ). Зачем такие усложнения платы и кода, когда без них гораздо лучше.

Страница 1 из 20 12345 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 2 (пользователей: 0 , гостей: 2)

Похожие темы

  1. Ответов: 101
    Последнее: 02.05.2019, 13:33
  2. Ответов: 307
    Последнее: 23.11.2017, 12:25
  3. Контроллер IDE PATA для QBUS (Э-60, ДВК)
    от Жека:) в разделе Новодел
    Ответов: 4
    Последнее: 04.05.2012, 13:40

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •