Давно с ними дела на низком уровне не имел, но ЕМНИМС у настоящих MMC и SD card в режиме совместимости с MMC немного отличается процедура инициализации. То есть, надо патчить софт.
Вид для печати
Плата от Павла с белой маской. Прозванивал все линии до microSD карты, сегодня еще раз попробую прозвонить. Насчет проверки bank0 (он вроде отвечает за четные), A13 и D0 на плис приходят, выбор банков вроде работает (проблема походу только с bank0), перекидывал этот сигнал на другой выход ПЛИС и менял адреса на RAM, ничего не меняется. Но прозвоню еще раз все сигналы на ПЛИС. Насчет тактирования SD читал, что может работать от внешнего такта, сегодня вечером попробую. Спасибо всем за информацию.
Их было несколько и вроде все белые. Но в ранней версии была ошибка с перехлестом spi_datain/spi_dataout и где-то здесь есть фото с патчем этой ошибки и термоскотчем.
Впрочем, надо с памятью разобраться в первую очередь. Но судя по всему, главная проблема-то сейчас уже решена, память он мапит и диапазоны адресов перехватывает. И сбрасывается корректно.
Вот тут и проблема, как с ней разобраться. Физически я уже переназначал выход bank0 на другую ногу ПЛИС перекомпилировал и прошивал и подавал этот сигнал на A18 RAM. Результаты теста такие же, четные банки не работают, ну и естественно верхние 256к не видно. В коде плис, запись текущих банков:
-- ram banks
bankout(0) <= bank(0) or not A(13);
bankout(1) <= bank(1) or not A(13);
bankout(2) <= bank(2) and A(13);
bankout(3) <= bank(3) and A(13);
bankout(4) <= bank(4) and A(13);
bankout(5) <= bank(5) and A(13);
A13 c компа приходит, прозвонил от Z80 до 12 ноги плис.
Запись в bank(0)-bank(5) происходит по спаду divideio.
Сам divideio формируется так:
divideio <='0' when iorq='0' and wr='0' and M1='1' and address = divide_control_port else '1';
т.е. банки должны или все работать или не работать вообще, но divramka показывает, что не работает только 0- банк.
Между двумя этими линиями нет кз ? Где-нибудь под микросхемой озу. Такое впечатление, что значение bank0 в каждом втором случае искажает значение bank1. А тест памяти, скорее всего, выполняется с маркировкой банка памяти номером банка и в половине случаев считанный номер не совпадает именно по причине искажения bank0.
Попробую прозвонить, спасибо. Но мало вероятно, что с плис, что с ram сигналы bank0, bank1 приходятся на не соседние ножки.
Врятли, физически я уже переназначал выход bank0 на другую ногу ПЛИС перекомпилировал и прошивал и подавал этот сигнал на A18 RAM. Результаты теста такие же, четные банки не работают, ну и естественно верхние 256к не видно.
Ок, про 0.8.9 не знаю, еще не пробовал ее шить, но в 0.8.8 если устройства детектятся, то он их называет по имени. Если есть разделы, пригодные для монтирования, он по ним дает развернутую инфу:
Вложение 75286
Скорее всего видится "что-то" (судя по исходнику 0.8.5 делается 50*255 попыток считывания чего-то, отличного от FF из порта SPI и если это случилось, то он думает, что карта есть и что-то пытается читать).
- - - Добавлено - - -
А чот мы мимо прошли - какая именно память стоит ? Может у нее нога А18 совсем не А18 ?
У меня макетный вариант собран с 128к-памятью и используются только 4 младших разряда выбора банка с плис, они поданы на A13-A16 у микросхемы ОЗУ. Может здесь есть возможность задействовать не всю память ? Подав bank0 вместо bank5 на озу, а ту ногу, которая вроде бы A18, завернуть в стабильный уровень (ноль, например) ? Это можно сделать, переназначив ноги bank* у плиски в прошивке
имя устройства sda: им тоже не присваивалось ?
а вот тут нет повода сомневаться - хотя бы потому, что корректно мапится пзу с esxdos вместо штатного и выводится текст стандартными процедурами из пзу48, т.е.Цитата:
на выводе ROMCS активность есть?
переключение между ними происходит нормально.
Прозвонил все цепи, обрывов - замыканий нет. Bank0 - 28 нога ОЗУ не с чем не звонится, кроме 38 ноги ПЛИС. Перепаял ОЗУ, ничего не поменялось. При подаче внешнего такта на ПЛИС (8 мгц) ничего не изменилось. При тесте Divramka на bank0 28 нога ОЗУ - постоянно лог "1", на bank1 - "шевеление" с периодичностью тестирования блоков. Продублировал выход Bank0 на другой свободный вывод плис - тоже постоянно в "1". Бред какой то.
julbu, Xilinx повторно прошивается, верифицируется, стирается?
Да, все ок. Стирается, пишется, проверяется.
Перепрошил версию 8.8 через загрузку tap файла, все прошилось отлично. Но ничего не изменилось. Вообще не понимаю в чем дело.
- - - Добавлено - - -
Заработало. Вход ПЛИС D0 был не рабочий. Переназначил на другой свободный вход и сделал перемычку на плате. Всем большое спасибо за участие и советы.
Магия. Сейчас объясню, в чем именно.
Я тоже сейчас запустил свою белую плату. После кучи пропаек был обнаружен дефект платы - не было D0 на ПЗУшке (что ? дежа вю ? тоже D0 ?). Кинул перемычку с разъема на 11-й вывод ПЗУ - оно стало мапиться и стартовать. Причем на второй пустой плате дефекта нет, там D0 не оборван. Значит либо это дефект экземпляра, либо я что-то испортил, но не приложу ума, где.
Штатная 28c64 в устройстве у меня прошивалась крайне плохо (один раз флешером удалось это сделать, но все равно она не заработала), поэтому взял 39sf020 и прошил туда версию 0.8.9. Все определяется, карту читает.
Однако ! BadApple.tap валится регулярно в случайном месте.
Взял снова макетный DivMMC, который на альтере. Засунул туда ПЗУ с 0.8.9 и эту же карту. BadApple валится.
Вернул обратно 0.8.8 и файлы на карту от нее же. BadApple не валится !
Вывод: остаюсь я на версии 0.8.8. Пока все новые плюшки не причесаны.
А, забыл. Поздравляю с победой )
Спасибо! На моей плате все норм по разводке. ПЛИС покупал на Али, но они внешне новые, выводы не паянные (как часто бывает). Пока завел на Sizif-128, на Ленине виснет на инициализации. Прошивка ПЛИС оригинальная. Valerium, читал у вас и на Ленине работало, что нибудь исправляли? Вообще EsxDos классная вещь!
У меня все работает на ленине. Я делал только одну правку в части сброса, когда отлаживал версию на альтере, тут я про это писал. Но вот я совсем не помню, исправленная ли версия у меня сейчас прошита в xilinx, это давно было, а плиску вчера не перешивал (неудобно было доставать старый комп с LPT). Проверю при случае.
С этой правкой не будет работать абсолютная замена пзу на readonly-страницу озу (вернее, работает, но после reset-а выключается, а не должна)
Ссылка на тот пост с правкой и моей версией происходящего: https://zx-pk.ru/threads/25361-divmm...=1#post1090421
Посоветуйте реально рабочую схему этого девайса, с прошивками и т.п.
Вариантов уже дюжина, и не ясно что работает, а что нет.
Видимо рабочие они все, но не на всем.
Есть ли такой вариант, к которому купил плату- и она работает на всем, неизвестно. Потому и плат много, что делал каждый со своими доработками.
Прошивка тоже одна и та же, пересобранная под разные cpld (у меня на ленинграде не хотела работать без мелкой корректировки сброса).
На фирменных спеках у заграничных товарищей были проблемы с формированием тактовых импульсов из CpuClk для работы SD, как выяснилось, легко решается установкой отдельного кварцевого генератора на 4 и более мгц, это работает стабильнее.
К какому аппарату подключать планируется ?
На фениксе да, кай без него по умолчанию, в приоритете КАЙ, Феня не обязательно.
При всем богатстве выбора варианта, который бы втыкался прямо в слот Кая, нету. Поэтому предлагаю его разработать, точнее переработать. Конструктивно - плата в слот с выносом на коннектор модуля SD, кнопки NMI и светодиода активности.
Без излишеств, то есть плиска (на мой взгляд 3128 самое то), озу hy628400 (5-вольтовое, шд 8 бит, 512 килобайт), выносной модуль SD/uSD -можно прям готовый ардуинский. Тактовую 3.5мгц на ттл5-плате можно легко брать с шины. Можно для разнообразия предусмотреть вариант генератора прямо на плате.
С ПЗУ вопрос, у меня ранее опробованные флеши 28c64 никак не хотели шиться из программы-флешера, загружаемой из тапки. Со всеми процедурами программного анлока (для микросхемы с буквой b) и прочими танцами. Поэтому я бы поставил более распространенное пзу, которое легко суется в программатор и потом в плату, лучше в 32-ногом корпусе (да, из-за 8 килобайт такую махину, но сейчас это проще). Вопрос только, в DIP или в PLCC.
Со стороны Кая, как я понимаю, ничего экзотического не надо, сигнал отключения внутреннего ROMа на шине есть.
По фениксу - вникать надо, чем там отключать бетадиск, возможно с шины это и не получится, тут уже нужна хирургия.
valerium, если схемку подкинешь, я отрисую в ДипТрейс и плату разведу.
По Фениксу думаю заморачиваться пока не стоит.
Почти готово.
Вложение 76185
Подсобрал свои наброски с 3128, кое-что поменял в паттернах - сделал паттерн с длинными падами под ОЗУ, подходит и для HY628400ALLT2-55 (узкие), и для K6X4008C1F-GF55 (широкие), и как раз в Дипе. Перепинил и пересобрал прошивку под эту схему.
Сейчас в схеме используется разъем под слот ZXBUS, надо будет его заменить на то, что актуально для Кая.
По CPLD - там же в архиве пример компоновки элементов (без трассировки), чтоб было понятно, почему так пестро расположил линии на CPLD - там масса удобных связей, если память расположить параллельно первому краю (1-25) CPLD. Собственно, можно перепинивать и перестраивать прошивку как угодно.
У CPLD куча неиспользованных ног, я бы к ним на плате подвел какие-нибудь пады, чтоб можно было как-то задействовать. Это если место на плате не будет поджимать.
Для карты памяти в схеме есть слот J2 (мой любимый, без защелки, карта в нем топится только наполовину; картинка microsd10pin.jpg там же в архиве, паттерн в компоненте актуальный) и хедер для подключения ардуиновского модуля "на вынос" (такого как на Micro-SD-Card_reader.jpg).
Два варианта тактирования - прямо с шины спека (обычно работает без вопросов, если спек на ТТЛ-микросхемах) и отдельный генератор. Можно заменить на монолитный генератор 4..16мгц.
Upd: забыл упомянуть, что в ПЗУ в этом случае записывается ESXDOS в самые верхние 8 килобайт. Ну или чтоб не задумываться, что куда должно попасть, можно просто задублировать 8К-блоки на всю емкость ПЗУ (64 раза для 39sf040, соответственно).
Программно перешиваться в плате данное ПЗУ не сможет, сигнал /ROMWR оставлен просто из преемственности, можно его не подключать к ПЗУ, а соотв. вход ПЗУ кинуть на единичку.
Еще момент: подтяжки на JTAG. Здесь их нет и у меня все, что шьется (3032, 3064, 7128SLC, 7064, 3256, 7512), как раз шьется без подтяжек. Проблемы были только с 7128SLC в плате Sizif128 как раз из-за подтяжек, те же микросхемы на макетке без подтяжек у меня шьются тем же бластером.
Однако это может быть особенностью моего бластера (или наличием подтяжек внутри него). Поэтому на плате бы лучше места для резисторов предусмотреть, а запаивать или нет - уже решать при сборке.
И открытый вопрос, куда их подтягивать для MAX3000, в даташите не находил, в других схемах было сделано по всякому (например, TCK, TMS к питанию, TDI к земле, TDO не подтягивать). Скажу честно - я этот вопрос бросил, когда у меня все работало полностью без них.
Если поставить 28C64 на плату под EPM3128 шиться будет?
У меня вроде бы не было проблем с их шитьем на оригинальной под Xilinx. Не хочется ставить огромный корпус в DIP, тем более на 32 ноги.
Логика в CPLD вся сохранена. Должна шиться.
Только у меня в плате на xilinx 28c64b не шилась ни в какую. На ленине. Не знаю, кто виноват. Поэтому забросил эту тему, тем более, что мне программатором это сделать быстрее и удобнее, чем сидеть ждать загрузку тапки с флэшером (которая далеко не всегда хорошо завершается).
Да и что 28c64, что большая ПЗУха в 32 ноги - в китае стоит примерно одинаково.
28C64 интересует в плане возможности внутрисхемного программирования и размеров SMD.
Я смотрю много что выкинуто из оригинальной схемы. Инвертер на клок, кнопка сброса, а также часть с ROMCS1,2.
Ну можно прямо внутри той же dip32 влепить паттерн под sop28 и паять ее, коли душе угодно.
Что касается выкинутого - это росло из макетки, на которой я собирал минимально достаточный вариант. Инверсия клока там нужна была разве что для того, чтоб сформировать его с выхода с большей нагрузочной способностью. На фирменных машинах с дохлыми кмоп-выходами на слоте клок весьма слабый и народ лепит всякие триггеры Шмитта, дополнительные одновибраторы и т п.
Никакой связи этого сигнала с тактами проца там нет. Гораздо круче работает там генератор на ттл-инверторах или просто близко к плис расположенный монолитный осциллятор. Частота - от 3,5 мгц и до 16 у меня работали без вопросов. Это влияет на скорость SPI у карты памяти и больше ни на что. Если карта потянет требуемую частоту, то оно работает.
Что касается блокировки сигналов выбора пзу, то для наших машин их два и не надо. Адаптировалось именно под наши клоны, а не под дваплюс/триплюс.
Прицепив несколько транзисторов по аналогичной схеме их можно сделать хоть десять.
Вот, накидал схемку предварительно.
Вот и проверим.
valerium, идеи банально просты. Большого – это не значит 1 Тб. Например, я не смог найти карты объемом 2-4 Гб, ибо их просто нет в продаже.