PDA

Просмотр полной версии : Контроллер SD (эмуляция HDD)



Tronix
13.02.2014, 12:36
Недавно заинтересовался PIC контроллерами. Подкупает цена (дешевые) и более-менее понятный для меня ассемблер. Так же недавно узнал о такой приятной фичи в некоторых, под названием Parallel Slave Port (PSP). Фактически, 8-ми разрядный порт выделяется для ввода-вывода, присутствуют так же контролируемые аппаратно DR (data read), DW (data write) и CS (chip select). Задержки здесь минимальны (ибо аппаратно) и составляют наносекунды. В теории, из этого следует, что можно изготовить адаптер SD-карты из двух микросхем - непосредственно самого PIC и дешифратора адреса порта ввода-вывода. Порт сделать, скажем 0x300h, дешифратор сделать на одной РТ4. Ах да, ну и еще одна микросхема - SD карта.

С SD-картой общаться по SPI, без файловой системы, блоками по 512 байт. Так, как порт ввода-вывода один, то придумать последовательный протокол обмена. Например, сначала посылаем в порт команду "чтение сектора", затем логический адрес блока SD-карты. После этого в цикле читаем из порта 512 байт. Контроллер после получения команды "чтение" читает в собственную память по SPI 512 байтный блок с SD карты.

Со стороны PC (компьютера) на начальном этапе общение происходит просто в отдельной программе, затем все обернуть в дополнительный ROM BIOS с обработкой int 13h прерывания. На адаптер добавляются EEPROM, дешифратор для него и буффер (3 микросхемы).

В конечном итоге аддаптер должен состоять из 5 микросхем и 1 SD-карты.

Tronix
13.02.2014, 17:28
Предварительная схема подключения PIC к ISA шине:

http://habrastorage.org/files/3d9/fa9/00a/3d9fa900a9db4b8da79ba3881a3f7117.png

Tronix
20.02.2014, 18:33
Приблизительный внешний вид:
http://beta.hstor.org/files/143/4aa/fee/1434aafeeb114912ade65a56c2475ac3.jpg

---------- Post added at 18:33 ---------- Previous post was at 18:31 ----------

Наверно такой дешифратор:

http://beta.hstor.org/files/b50/508/c32/b50508c32f554feeb794e40fcd5b0ae8.png

Все таки два порта лучше чем один.

dosikus
20.02.2014, 23:54
Подкупает цена (дешевые)
Это мягко говоря неправда :biggrin:


С SD-картой общаться по SPI, без файловой системы,
И это так же . Фатфс от чана чем не устроила ? Си не владеем ?

пЫк 18F452 , старо и уныло ...

Tronix
21.02.2014, 19:44
Это мягко говоря неправда :biggrin:
Ну а с чем сравнивать? С атмегами или STM? Дык ибо "старо и уныло" щаз много где по скидке идет.


И это так же . Фатфс от чана чем не устроила ? Си не владеем ?

пЫк 18F452 , старо и уныло ...

Что такое фатфс от чана? Си владеем немножка...

dosikus
21.02.2014, 23:29
Ну а с чем сравнивать? С атмегами или STM? Дык ибо "старо и уныло" щаз много где по скидке идет.

Ну с атмегами и сравнивать нефиг - ибо в топку .
С STM32 - это отдельная песня .
Сравни хотя бы с пЫк 24
http://trt.ru/Stock.php?Manf=3
Тот же PSP, ДМА на борту и куча плюшек одна из которых ремап периферии на портах.



Что такое фатфс от чана? Си владеем немножка...

Оригинал http://elm-chan.org/fsw/ff/00index_e.html
Портирована уже куда только можно, примеров как грязи .
Есть и урезанная Petit .

Сразу спрошу - пиккит2 или 3 имеешь ?
Не только прогер но и дебаггер , однако.

Tronix
22.02.2014, 08:31
Оригинал http://elm-chan.org/fsw/ff/00index_e.html
Портирована уже куда только можно, примеров как грязи .
Есть и урезанная Petit .

Сразу спрошу - пиккит2 или 3 имеешь ?
Не только прогер но и дебаггер , однако.

Не имеею, к сожалению..

Tronix
05.03.2014, 11:09
Все с дешифратором адреса воюю. Наверное к схеме, указанной выше, придется добавить еще логику "ИЛИ", потому как на сигнал /WD контролера мне нужно обрабатывать и порт данных и порт команд, то есть сигнал /DW или /CW. А сигнал /CW у меня пойдет на внешнее прерывание INT1. Тем самым я смогу отслеживать - запись была в порт данных или в порт управления

Tronix
07.03.2014, 16:11
Вот такая петрушка вырисовывается:
http://habrastorage.org/files/2fa/a58/ec3/2faa58ec3f95491584776d64ceff09d6.JPG

Распаял пока только дешифратор адреса. Словил переплюсовку, ибо ориентировался на схему IDE от DrPass, где перепутаны местами +5V и GND. Благо было воткнуто только 3 микросхемы - две ИД7 и одна ЛИ1. Они кстати выжили, что странно. Поиск тоже живой пока :) Сегодня все-таки планирую завершить подключение PIC к шине данных, попробую поморгать светодиодом через порт...

Tronix
07.03.2014, 21:38
Подключил на шину, на пик включил PSP, пока без обработки прерывания. Помигал светодиодом. Ничего не взорвалось, светодиод мигает, поиск стартует и не виснет. Уже что-то. Ну, теперь буду с прошивкой PIC мудрить. SD карту пока не запаивал, нет разъема. Это тогда потом, щаз буду писать прошивку что бы просто общаться с контроллером.

Quest
07.03.2014, 23:47
Так а в ide контроллере вроде реализован уже разъем для sd карты ? Или я что-то не так понимаю?

DrPass
08.03.2014, 00:14
В IDE реализована Compact Flash. Благодаря тому, что в протоколе CF реализована поддержка команд ATA, она там может работать без лишних ухищрений. У SD протокол обмена иной, и без микроконтроллера не обойтись.

Quest
08.03.2014, 00:16
Понятно...

Tronix
08.03.2014, 08:20
и без микроконтроллера не обойтись.

Теоретически, можно и обойтись. Но городить придется свой порт ввода-вывода (много корпусов) или одна вв55 (тоже фактически контроллер). Короче мне такое точно пока не по зубам. Я с этой платой то замучился, там с обратной стороны треш и угар, и это я еще РФ5 не распаивал, ибо у меня МГТФ закончился. Не надо было так плотно микросхемы расставлять, да и плату нужно было побольше размером брать....

А здесь, например, вообще SD к LPT порту цепляют "проводками": http://www.vintage-computer.com/vcforum/showthread.php?41090-MS-DOS-driver-for-an-SD-card-connected-via-a-parallel-port

dosikus
08.03.2014, 10:04
Как и писал выше - пЫк 18F452, выбран не совсем удачно.
Да и перепрыгнуть китайцев все равно не удастся ...
http://www.ebay.com/itm/Mini-Secure-Digital-2-5-44-Pin-IDE-Male-to-SD-SDHC-MMC-Card-Adapter-Converter-/310640686475?pt=LH_DefaultDomain_0&hash=item4853a0b58b
http://www.ebay.com/itm/Secure-Digital-SD-SDHC-MMC-to-IDE-3-5-40-Pin-Female-Adapter-Converter-New-/271380134033?pt=AU_CablesConnectors&hash=item3f2f843891

HardWareMan
08.03.2014, 12:50
Я покупал ближе:
http://www.aliexpress.com/snapshot/224673866.html
И вот такой покупал: http://zx.pk.ru/showpost.php?p=322000&postcount=1
Нормально работают без затей. Это если нужна настоящая эмуляция HDD.
А если нужен кастомный вариант контроллера я бы выбрал контроллер всего на одной микросхеме: CPLD. :3

Tronix
08.03.2014, 18:36
Это все хорошо, но:
а) Для поиска нет контроллера IDE. Точнее есть прототип, но нет рабочей прошивки. Смогу я ее адаптировать с XT-IDE или нет - под вопросом.
б) эти переходники судя по отзывам не работают адекватно с младшими режимами IDE - PIO. Могут только какое-то там DMA, а значит они не годятся для XT и Поиска в частности.
в) альтернатива (то есть контроллер, который я пилю в этой теме) это же не плохо. Альтернатива - это всегда хорошо, когда есть из чего выбрать, разве нет?

HardWareMan
08.03.2014, 19:40
б) эти переходники судя по отзывам не работают адекватно с младшими режимами IDE - PIO. Могут только какое-то там DMA, а значит они не годятся для XT и Поиска в частности.

Забавно, но в 286м ноуте и 600Мгц селероне под DOS оба указанных мной переходников проходят все тесты разных режимов PIO. Ну и работают тоже.

Tronix
09.03.2014, 16:06
Есть контакт! Сегодня исправил дешифратор (попутал нумерацию ног ИД7), допаял блокировочные кондеры на логику, ибо без них глючила схема. Написал прошивку для PIC, которая заполняет в нем массив от 0 до 256 и прочитал эти значения через порт на Поиске!

Tronix
09.03.2014, 23:56
Пообщался наконец то с контроллером в обе стороны. Пока робко, но уже обрабатывает порт команд (на запись) и порт данных (чтение/запись). Пока глюкает иногда, наверно переполняются у меня индексы массивов, но будем отлаживать.

Радует, что аппаратная часть вроде работает, хотя я сомневался насчет быстродействия 155 и 555 серии. А так же переживал, что я не придерживаюсь диаграмм чтения/записи PSP, а именно сигнал CS/ у меня выдается несколько позже, чем сигналы /RD или /WR. Или одновременно. Хотя по даташиту нужно бы сначала подавать /CS, а затем уже /RD или /WR.

Вообще, PIC открывает много интересных возможностей, например UART - можно использовать для отладки, выводить на терминал отладочную инфу. Или еще круче - Ethernet с помощью enc28c60. Какого, поднять FTP или HTTP сервер на Поиске и выставить его в инет? Но, пока долгий и мучительный дебаг...

Tronix
10.03.2014, 14:53
Все! Есть полноценное общение с контроллером. Сначала думал, что не укладываюсь по времени обработки в 4 такта ISA или 180us, даже распаял и начал контролировать сигнал READY (занижать на время IO прерывания), но оказалось все банальнее - просто забыл про volatile и поэтому у меня в переменных творился сумрак.

Сделал небольшой тест - передаю 512 байт в контроллер, потом читаю 512 байт из контроллера и сравниваю с эталоном. 255 прогонов - ни одной ошибки \w/
Все нафиг, нет больше сил ждать, выпаиваю из кардридера SD слот и подключаю SD карточку :)

Tronix
11.03.2014, 08:28
Небольшой фейл с SD: во-первых не нашел преобразователя 5V - 3.3V. Выпаял какой-то смд-шный 1117 из роутера, подключил, но он походу на 5V. Короче вместо 3.3V у меня 4.1V выдает. Плюс не нашел у себя 3 сопротивлений 2,2kOm, впаял вместо них 3,3kOm. Определяется таким макаром только древнющая карта на 16Mb, остальные флешки не определяются. Не читается никакая. Что ж, из говна и палок не вышло, поеду в четверг в магаз за преобразователем и резюками...

dosikus
11.03.2014, 12:28
Короче вместо 3.3V у меня 4.1V выдает.
Он походу ADJ . Пуллапы у карты не забудь...

Tronix
13.03.2014, 11:11
Наверное зря я PIC через сопротивления цеплял к шине данных. Идеологически правильнее было бы через АП6... Еще думаю насчет ПЗУ. От РТ4 решил отказаться, вместо нее будет еще одна ИД7. ПЗУ наверно таки воткну на шину данных через АП6.

Еще наверно было бы неплохо нарисовать схему... Вопрос в чем лучше рисовать с учетом того, что с PCad и прочими OrCad я ни разу не работал? Нет ли чего попроще для "нуба"? Протеус не нравится. То есть нравится, что проводки сами "прилипают" к ногам микросхем и прочим соединителям, но внешний вид схемы не нравится. Как-то не по госту что-ли :) Мне конечно по госту не надо, ибо не курсовик, но все-таки хочется определенной "строгости" чтоли....

Tronix
13.03.2014, 18:53
Гонял сегодня в магаз, купил нормальный 5V -> 3.3V преобразователь AMS1117 и с десяток 2,2kOm сопротивлений (чтоб были). Перепаял и заработало. На картинке считанный MBR (Master Boot Record) с SD-карточки на 4Gb через мой убердевайс :v2_eek: Остается распаять на плате ПЗУ и можно начинать писать прошивку для обработки int 13h. Короче, работает o_O

Quest
13.03.2014, 19:14
Надо присвоить теперь название устройству, например "В510" :)

DrPass
13.03.2014, 22:05
Надо присвоить теперь название устройству, например "В510" :)

Как минимум, "Троникс-драйв" :)

Tronix
16.03.2014, 17:10
Значит, дораспаял ПЗУ-шку и дешифратор на ИД7 для нее (по схеме IDE от DrPass). Пока вставил флеш 29F010, ибо устаю каждый раз стирать УФ 2764. В конечном итоге там должна быть 2764 (8 кб).

http://habrastorage.org/files/632/921/9d5/6329219d58f443bfa2a37e0d7d6c0cce.JPG

Все-таки очень маленькая макетка, нужно было больше размером брать - адресными и дата линиями перекрыл всю плату. Опять кончился МГТФ, возьму в следующий раз наверно метров 100 сразу. Щаз еще A13-A16 на землю повешу чем-нибудь и попробую завести...

Tronix
16.03.2014, 21:39
Полет нормальный, только пустил все-таки ПЗУ через АП6. Без нее чет начал PIC глючить. Ваще по хорошему и PIC надо пустить через АП6, но места уже на плате тотально нет. МГТФ нет. Ладно, пока оставляю так, ибо работает без ошибок. Время программной части...

---------- Post added at 21:39 ---------- Previous post was at 20:35 ----------

Ы, тестил на Поиске 128KB - все нормально, решил на Поиске 512KB попробовать - не пишет в регистр управления. Наверно нужно убрать либо резисторы на шине данных, либо таки пустить PIC через АП6... Будем пробовать, но уже завтра...

Tronix
17.03.2014, 13:09
Попробовал пустить PIC через АП6, то есть стало две АП6 - одна для ПЗУ, вторая для PIC. Начался ваще ад какой-то - PIC перезагружается постоянно, Поиск глючит, не всегда загружается. Видимо нельзя две 555АП6 вешать на шину данных, наверно входное сопротивление большое или что-то типа того. Снял АП6, которая за ПЗУ. Сразу полегчало. Проверил на Поиск 128, Поиск 512 - все ОК. Ну и ладно, оставляю тогда АП6 только для PIC. Хочется уже наконец покончить с аппаратной частью и перейти к кодингу. Щаз еще погоняю слегонца и надеюсь завершить паять.

DrPass
17.03.2014, 13:53
Видимо нельзя две 555АП6 вешать на шину данных, наверно входное сопротивление большое или что-то типа того.

Не то, чтобы нельзя, просто надо было настроить дешифратор адреса таким образом, чтобы когда идет обращение к одной из них, вторая переходила в высокоомное состояние.

Tronix
17.03.2014, 15:32
Да вроде так и делал, OE/ у обоих АП6 у меня контролировалось дешифраторами... Ну да фиг с ним, прогнал тесты на обоих Поисках (128, 512kb) - все ок. Дешифратор для ПЗУ переделал на 0xE20000 (0xE40000), чтоб SD-HDD BIOS стартовал после FDD биос. Считаю, что с аппаратной частью покончено.

Теперь нужно думать над софтовой частью. Вопрос, который меня занимает это как сделать геометрию диска CHS.. Позволять юзеру вбивать кол-во цилиндров, секторов и головок, потом сохранять эту инфу во флеш микроконтроллера... Что делать при первоначальном запуске - установить какой-то стандартный тип, например ST-25? Думаю пока...

Tronix
17.03.2014, 22:23
Попытался набросать текущую схему. Заранее прошу прощения за псевдо-пейнт, пианист играет как умеет. А умеет он хреново.

Quest
18.03.2014, 00:11
А зачем вводить кол-во цилиндров, секторов и головок, если речь идет о SD карточке ?

Tronix
18.03.2014, 08:28
А зачем вводить кол-во цилиндров, секторов и головок, если речь идет о SD карточке ?

Для эмуляции HDD. Прерывания int 13h работают с цилиндрами головками и дорожками. В системе он будет видится как обычный жесткий диск.

Quest
18.03.2014, 11:15
Для эмуляции HDD. Прерывания int 13h работают с цилиндрами головками и дорожками. В системе он будет видится как обычный жесткий диск.

Да это понятно, но зачем юзеру-то вводить эти данные ?

Tronix
18.03.2014, 12:14
Да это понятно, но зачем юзеру-то вводить эти данные ?

А откуда их брать? Просто современные SD карточки - 4 гб и выше. DOS такой объем вряд-ли потянет, я имею ввиду DOS v3.3. Я щаз не помню, но там вроде что-то порядка 200Mb максимально.

Quest
18.03.2014, 12:26
Ну а в ПЗУ как-то хранить эти данные можно? Сделать использование максимально допустимого объема, пусть те-же 200мб. Ну и если установлена карта с не правильным разделом, то форматировать её автоматически или сообщать пользователю. Я это к тому, что-б сократить количество настроек до минимума.

artyr_n
18.03.2014, 18:27
Ну и если установлена карта с не правильным разделом, то форматировать её автоматически или сообщать пользователю
Вставлю свои пять копеек. Может на SDшке делать директории C D E F G
и представлять поиску как устройства C: D: E: F: G:.

Quest
18.03.2014, 19:21
Вставлю свои пять копеек. Может на SDшке делать директории C D E F G
и представлять поиску как устройства C: D: E: F: G:.

Если не ошибаюсь, то C и D - не получится использовать, это ГМД, как A и B.

artyr_n
18.03.2014, 19:33
у ХТ A: B: это дисководы
остальные буквы С: первый винт
Остальные буквы винты или разделы первого винта и сетевые диски.

Tronix
18.03.2014, 19:56
Вообще я не хочу завязываться на файловую систему. То есть контроллер не будет знать о файловой системе вообще ничего. Для него это только сектора, в которые он может писать и может из них читать. А файловой системой занимается сама ОС, то есть применительно к Поиску - это DOS. DOS будет создавать загрузочный сектор, таблицу разделов и саму файловую систему своими стандартными утилитами - FDISK, FORMAT и тд. В теории, потом если такую SD-флешку вставить в обычный комп в картридер, то комп без всяких проблем должен увидеть раздел как он видится на Поиске. Можно копировать файлы туда-сюда без всяких "образов" дисков и тд. Просто взял, скопировал на компе файл на флешку, вставил флешку в контроллер SD Поиска и вот он уже в Поиске на диске C: Никаких лишних телодвижений.

Плюс, если повторять схему для XT или AT, или даже для 386/486 в ISA-8 варианте, то теоретически такой подход дает возможность работать не только с DOS, но и любым другим ОС (linux, OS/2) с любой файловой системой, которые могут работать с диском через int 13h.

Несколько дисков пока делать не хочу, так как особого смысла не вижу. В теоретические 200 мб должно влезть все игрухи и софт для Поиска. Я 20 мб хард то до конца не забил, а тут 200 мб. Пока имхо достаточно. Плюс SD можно менять, благо они стоят щаз копейки и можно купить хоть 10 SD карт по гигу, и просто их менять в адаптере.

Quest
18.03.2014, 20:49
Плюс SD можно менять, благо они стоят щаз копейки и можно купить хоть 10 SD карт по гигу, и просто их менять в адаптере.

Т.е. можно будет их менять на лету ? А если она будет загрузочной ?

Tronix
18.03.2014, 21:31
Т.е. можно будет их менять на лету ? А если она будет загрузочной ?

Нет, на лету нельзя. Только путем включение/выключения. По обрывкам воспоминаний в DOS 3.3 вообще максимальный размер HDD - 32Mb. В DOS 5.0 и выше - 2Gb. Таким образом если юзать DOS 5.0 - можно получить жесткий объемом в 2Гб. Чем можно забить полностью 2Гб на XT или Поиске - я не представляю, то есть такого объема должно хватить с большим запасом на долгие года :) Вообще, все это может быть не правдой, потому как я уже старенький и память меня может подводить. Скоро я буду перечитывать маны и тогда все будет становиться на свои места.

Quest
18.03.2014, 21:51
... потому как я уже старенький...

Это до какой-же степени ? ;)

Tronix
20.03.2014, 22:41
Сбил меня с ритма немного IDE-контроллер, еще бы - 1,2Gb мой фуджик на Поиске! Да если б я такое в детстве увидел, я бы дар речи точно потерял. Но и об SD не забыл, правда работы навалилось не вовремя. Пока просто продумываю некоторые моменты протокола обмена контроллер-биос, чту доку. Если все-таки удастся завершить проект, то на эту плату можно еще без труда прикрутить любую Real Time Clock по SPI, чтоб часики и дата нормальная была, ну вроде бонуса. Но это в самом конце.

Tronix
09.04.2014, 21:18
Значит более-менее разобрался с геометрией CHS. Теперь мне контроллер возвращает общее число секторов на SD, а так же ее геометрию в CHS. В принципе, только для информационных целей, так как все преобразования будут делаться "на лету" на PIC. PIC будет понимать CHS, а внутри своей прошивки уже конвертировать в линейный адрес.

И хоть я поставил флешку-ПЗУ, но все равно задолбался прошивать/вставлять/вынимать/включать/выключать и тд. Много времени тратиться на ерунду. Решил сделать на основе эмулятора PCem эмулятор моего контроллера, что бы отладка ROM-bios побыстрее происходила. Ну и соответственно начал тот самый ROM-bios писать. Пока в процессе...

Tronix
10.04.2014, 08:47
Кстати стоит вопрос о том, как отслеживать - прочитался уже сектор или еще нет? Сейчас после подачи команды "читать сектор" я тупо жду несколько миллисекунд, перед тем как читать данные из порта. Но возможно, жду гораздо больше чем нужно.
Так как регистра статуса нет, наверно нужно дергать прерывание INTRQ. Будем думать...

Quest
17.06.2014, 13:15
Получилось устройство?

Tronix
17.06.2014, 13:18
Получилось устройство?

С переменным успехом. До ума так и не доведено пока. Основную проблему изложил здесь: http://kazus.ru/forums/showthread.php?t=108099 . С тех пор не занимался им, щаз лето, природа, дача, работа... Особо не до него. Но надеюсь, что все-таки добью его до конца....