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

User Tag List

Страница 5 из 12 ПерваяПервая 123456789 ... ПоследняяПоследняя
Показано с 41 по 50 из 113

Тема: SD-карты и контроллеры, реализации FAT

  1. #41
    Moderator
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,577
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    106
    Поблагодарили
    92 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от PVV Посмотреть сообщение
    Ура, это значит, что сам интерфейс работает! 40..95 -это cmd0, 77..95 -это cmd55 и 69..95 -это acmd41, и на этом у меня инициализация заканчивается (для всех реальных карт, с которыми я работал этого было достаточно, и в b2m этого тоже достаточно) . Именно это туда и посылается, и каждая посылка возможна только при условии получения правильного ответа, иначе дальше 40..95 ничего бы больше не посылалось.
    В таком случае, что именно ожидает получить Ваш эмулятор в качестве инициализации? ну или чего ему еще не хватает? исходник работающего примера я то вижу, просто это не так быстро все поддержать, и там же SDHC уже накручено сверху...
    Я действительно вижу вхождение исходного когда в ветки эмуляции команд CMD0,CMD55,ACMD41, но дальше все вхождения только в SPI_IDLE, как будто после ACMD41 из внешнего кода команды больше не поступают. При этом оно там чего-то ожидает, потом я нажимаю DIR... и ничего, SPI_IDLE без конца. Где-то рассогласуется автомат передающий биты, и в уме сложить чего там во входящем потоке битов недостает - я не осилю. По логике, если считаны 3 команды, то должны читаться и остальные, в худшем случае при неизвестных командах автомат выдаст ошибку (как и было когда я отлаживал SDHC расширяя алгоритм инициализации новыми командами), но он же после третьей команды просто перестает заходить в это ветвление команд как если бы они перестали со входа поступать или "уплыл" CLC.
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

  2. #42
    Activist
    Регистрация
    20.11.2017
    Адрес
    г. Ростов-на-Дону
    Сообщений
    351
    Спасибо Благодарностей отдано 
    30
    Спасибо Благодарностей получено 
    85
    Поблагодарили
    50 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    скорее всего нужны cmd08 и cmd16 ?
    на картинке схема подключения SD n8vem, которая работает в Протеусе...

    добавил отладочный вывод и переданных на карту байт и принятых от карты
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	SD_n8vem.jpg 
Просмотров:	286 
Размер:	54.0 Кб 
ID:	63728  
    Последний раз редактировалось PVV; 14.03.2018 в 22:29.

  3. #43
    Moderator
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,577
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    106
    Поблагодарили
    92 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от PVV Посмотреть сообщение
    скорее всего нужны cmd08 и cmd16 ?
    на картинке схема подключения SD n8vem, которая работает в Протеусе...

    добавил отладочный вывод и переданных на карту байт и принятых от карты
    выдает такое:

    Скрытый текст



    [свернуть]

    После этого DIR в ответ получает только бесконечный 01010101
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

  4. #44
    Master
    Регистрация
    24.05.2005
    Адрес
    г. Запорожье, Украина
    Сообщений
    992
    Спасибо Благодарностей отдано 
    571
    Спасибо Благодарностей получено 
    364
    Поблагодарили
    239 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    я когдато писал на VHDL чтение карты в SPI режиме - вот фрагмент инициализации

    Код:
    --INITIALISATION start
    			when SD_INIT =>
    				sd_stage <= CS_HI_80_PULSES;
    				counter <= 127;						--128 pulses while CS is high, CMD must be high too
    			when CS_HI_80_PULSES =>
    				counter <= counter - 1;							
    				if counter = 0 then
    					sd_stage <= SEND_CMD_00;						
    					SD_CS_n <= '0';
    				end if;
    			when SEND_CMD_00 =>
    				sd_stage <= SEND_CMD;						
    				next_stage <= SEND_CMD_08;			
    				command <= X"FF400000000095";									
    				recv_bits <= 8;						-- responce 8 bits
    			when SEND_CMD_08 =>
    				next_stage <= SEND_CMD_55;
    				sd_stage <= SEND_CMD;
    				command <= X"FF48000001AA87";							
    				recv_bits <= 40;					-- responce 40 bits
    			when SEND_CMD_55 =>
    				sd_ver_2 <= not responce(34);
    				sd_stage <= SEND_CMD;						
    				next_stage <= SEND_ACMD_41;				
    				command <= X"FF7700000000FF";						
    				recv_bits <= 8;
    			when SEND_ACMD_41 =>
    				sd_stage <= SEND_CMD;						
    				next_stage <= PROCESSING_INIT_1;				
    				command <= X"FF69" & '0' & sd_ver_2 & "000000" & X"000000FF";																	
    				recv_bits <= 8;	
    			when PROCESSING_INIT_1 =>						
    				if responce(0) = '0' then
    					if	sd_ver_2 = '0' then
    						sd_stage <= READY;
    						sdhc <= '0';
    					else
    						sd_stage <= SEND_CMD_59;
    					end if;
    				else
    					sd_stage <= SEND_CMD_55;
    				end if;
    			when SEND_CMD_59 =>
    				sd_stage <= SEND_CMD;						
    				next_stage <= PROCESSING_INIT_2;				
    				command <= X"FF7B00000000FF";						
    				recv_bits <= 8;	
    			when PROCESSING_INIT_2 =>
    				if responce (6 downto 0) = "0000000" then
    					sd_stage <= SEND_CMD_16;
    				else
    					sd_stage <= SEND_CMD_59;
    				end if;
    			when SEND_CMD_16 =>
    				sd_stage <= SEND_CMD;						
    				next_stage <= PROCESSING_INIT_3;
    				command <= X"FF5000000200FF";						
    				recv_bits <= 8;							
    			when PROCESSING_INIT_3 =>
    				if responce (6 downto 0) = "0000000" then
    --					if	sd_ver_2 = '0' then
    --						sd_stage <= READY;
    --						sdhc <= '0';
    --					else
    						sd_stage <= SEND_CMD;
    						next_stage <= PROCESSING_INIT_4;
    						command <= X"FF7A00000000FF";						
    						recv_bits <= 40;							
    --					end if;
    				else
    					sd_stage <= SEND_CMD_16;
    				end if;
    			when PROCESSING_INIT_4 =>
    				sdhc <= responce(30);
    				sd_stage <= READY;				
    --INITIALISATION end
    вдруг пригодится ) - писал по даташиту на сд карты и даже работало )

  5. #45
    Activist
    Регистрация
    20.11.2017
    Адрес
    г. Ростов-на-Дону
    Сообщений
    351
    Спасибо Благодарностей отдано 
    30
    Спасибо Благодарностей получено 
    85
    Поблагодарили
    50 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    кто сможет ответить на такой вопрос -
    карта получила командную последовательность ACMD41, ответила 0х00, те все ОК, но чтение из карты продолжается, что в таком случае должно приходить из карты? 0xFF или что-то другое, например 0х01 (IDLE) ?

    За код инициализации спасибо, просто на данный момент sdOS поддерживает только карты V1, и шаг в сторону - ничего не видит. Вот я и хочу сделать поддержку всех типов карт, но изначально запустить на одном типе, и в опытах выше идет 'пристрелка' к этому одному типу.

  6. #46
    Moderator
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,577
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    106
    Поблагодарили
    92 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В первоначальном варианте последовательность инициализации работоспособная, хотя и не для всех карт (только для SDC v1.0):
    CMD0, CMD55, ACMD41
    На CMD1 я бы переделывать не советовал, т.к. эта команда, введенная во времена древнючих MMC-карт и оставленная для совместимости у SDC v1.0, для новых карт (SDC v2.0, SDHC) считается obsolete (устаревшей, не поддерживаемой) и ХЗ какие из новых ее поддерживают (не исключаю что некоторые и понимают ее).

    Сам я, знакомясь с даташитом на SD (на сайте SD-ассоциации) и готовыми реализациями в Инете (много исходников на С встречается) пришел в итоге к такой последовательности инициализации (поддержку MMC я не стал делать, только SD всех версий): CMD0, CMD8, CMD59, CMD55, ACMD41, CMD58, CMD9. Опционально еще CMD16 (установить размер блока с параметром для размера в 512байт). Плюс там есть анализы ответов карты и ветвления в зависимости от них, также не забываем что для разных типов карт (определяется по CMD8) надо подавать разный параметр при вызове ACMD41, и что CMD0 и CMD8 имеют разные CRC и это критично, а для прочих команд CRC большинство карт не проверяют и можно использовать 095h или другие. Что в итоге получилось, выкладывал тут (работает и на реале с большинством карт, и в эмуляторе).

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

    Цитата Сообщение от PVV Посмотреть сообщение
    кто сможет ответить на такой вопрос -
    карта получила командную последовательность ACMD41, ответила 0х00, те все ОК, но чтение из карты продолжается, что в таком случае должно приходить из карты? 0xFF или что-то другое, например 0х01 (IDLE) ?
    после того как карта на ACMD41 ответила "00", туда надо слать следующие команды. Если туда вместо этого начать слать коды не являющиеся командами, или кучу FF (т.е. например читая в цикле карту ничего туда не отправляя), то карта переходит в IDLE и начинает отвечать 0х01. И вывести ее из IDLE можно только опять прогнав всю последовательность инициализации. Такое у меня остаточное знание, т.е. "но это не точно"{как теперь любят добавлять к ответам }

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

    К сожалению, пока не могу проверить sdOS на реале, т.к. схема подключения SD у меня спаяна только на Орионе-ПРО, а в нем у меня нет ROM-диска и соответственно нет Ordos вместо которой можно было бы поставить sdOS. (На ПРО без ROM-диска Ордос запускаеться откуда-то из потрохов ROM-BIOS, по простому ее не заменить). Ближайший вариант это когда sdOS будет в виде приложения Ordos (т.е. с 16-байтным заголовком и посадочным адресом ниже Ордос чтобы ордос могла ее загрузить) - тогда смогу попробовать и на ПРО: дополнительные Ордос программы объемом до 8кб я научился автоматизированно запихивать прямо в "пустоты" 64к-шного ROM-BIOS Ориона-ПРО и обходиться без всяких дополнительных ROM-дисков.
    Последний раз редактировалось Error404; 19.01.2018 в 13:24.
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

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

  8. #47
    Activist
    Регистрация
    20.11.2017
    Адрес
    г. Ростов-на-Дону
    Сообщений
    351
    Спасибо Благодарностей отдано 
    30
    Спасибо Благодарностей получено 
    85
    Поблагодарили
    50 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    вот собранный ROMдиск с sdOS (в самом низу) для работы в b2m и бинарник с Ордос заголовком под интерфейс n8vem.

    PS: теперь в b2m можно загружать RKO файлы через SD

    архив здесь
    Последний раз редактировалось PVV; 30.03.2018 в 09:21.

  9. #48
    Master
    Регистрация
    24.05.2005
    Адрес
    г. Запорожье, Украина
    Сообщений
    992
    Спасибо Благодарностей отдано 
    571
    Спасибо Благодарностей получено 
    364
    Поблагодарили
    239 сообщений
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ещё появились карты SDXC, там тоже видимо ветвление появится.
    вообще чтобы сделать инит для вер.1 карт - нужно эти самые карты иметь - что сейчас наверное большая редкость.

    p.s. вот тут на 12 странице алгоритм инита карт - https://drive.google.com/file/d/17ZL...ew?usp=sharing
    Последний раз редактировалось shurik-ua; 19.01.2018 в 20:29.

  10. #49
    Activist
    Регистрация
    20.11.2017
    Адрес
    г. Ростов-на-Дону
    Сообщений
    351
    Спасибо Благодарностей отдано 
    30
    Спасибо Благодарностей получено 
    85
    Поблагодарили
    50 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Добавил возможность обмена RKO файлами с SD на RAMдиск Ориона и обратно.
    В этой версии поддерживаются SDHC карты, но с одним первичным разделом отформатированным в FAT16.
    дополнительные команды:
    L ИМЯфайла.РАСШИРЕНИЕфайла - прочитать данные файла формата RKO с SD в RAM диск Orion
    (пример: L TEST$.RKO - читает файл TEST$.RKO в память начиная
    с адреса 0х0000 и до адреса его длины, создает в RAM диске файл TEST$
    с именем, стартовым адресом и размером взятыми из хеадера RKO файла на карте.

    S ИМЯфайлаНаRAMдиске,ИМЯфайла НаSD.РАСШИРЕНИЕ, - записать файл из RAM диска
    на SD в формате RKO (пример: S TEST$,TEST1$.BIN -читает файл TEST$ из RAM диска в память
    начиная с адреса 0х0000 и до адреса его длины, после записывает его на SD карту в
    существующий файл с таким же именем TEST1$.BIN, размер не изменяется, формат RKO!).

    в архиве ROMдиск с версиями SDOS для всех трех возможных вариантов SD интерфейсов и пример конфига для эмулятора b2m.

    emu.zip
    исходники здесь - http://www.nedopc.org/forum/viewtopi...rt=240#p143547

  11. #50
    Moderator
    Регистрация
    14.08.2006
    Адрес
    Владимир
    Сообщений
    4,577
    Спасибо Благодарностей отдано 
    61
    Спасибо Благодарностей получено 
    106
    Поблагодарили
    92 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от PVV Посмотреть сообщение
    Добавил возможность обмена RKO файлами с SD на RAMдиск Ориона и обратно.
    В этой версии поддерживаются SDHC карты, но с одним первичным разделом отформатированным в FAT16.
    дополнительные команды:
    L ИМЯфайла.РАСШИРЕНИЕфайла - прочитать данные файла формата RKO с SD в RAM диск Orion
    (пример: L TEST$.RKO - читает файл TEST$.RKO в память начиная
    с адреса 0х0000 и до адреса его длины, создает в RAM диске файл TEST$
    с именем, стартовым адресом и размером взятыми из хеадера RKO файла на карте.

    S ИМЯфайлаНаRAMдиске,ИМЯфайла НаSD.РАСШИРЕНИЕ, - записать файл из RAM диска
    на SD в формате RKO (пример: S TEST$,TEST1$.BIN -читает файл TEST$ из RAM диска в память
    начиная с адреса 0х0000 и до адреса его длины, после записывает его на SD карту в
    существующий файл с таким же именем TEST1$.BIN, размер не изменяется, формат RKO!).

    в архиве ROMдиск с версиями SDOS для всех трех возможных вариантов SD интерфейсов и пример конфига для эмулятора b2m.

    emu.zip
    исходники здесь - http://www.nedopc.org/forum/viewtopi...rt=240#p143547
    Привет!

    Опубликуй пожалуйста финальную версию схемы твоего контроллера на ИР24. А то уже не нахожу ее в темах. Если вдруг схема будет в элементах по ГОСТ (не знаю как у кого, а я до крайности плохо читаю импортные овалы), то сразу +146 в карму.
    Последний раз редактировалось Error404; 10.03.2018 в 11:30.
    Лучше сделать и жалеть, чем не сделать и жалеть.

    Некоторые из моих поделок тут: https://github.com/serge-404

Страница 5 из 12 ПерваяПервая 123456789 ... ПоследняяПоследняя

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

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

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

Похожие темы

  1. Altair8800 идеи, решения и реализации
    от L Juriy в разделе Зарубежные компьютеры
    Ответов: 13
    Последнее: 14.09.2017, 11:56
  2. помогите загрузить c FAT ZX-EVO
    от mbojenov в разделе ZXEvo
    Ответов: 11
    Последнее: 11.08.2012, 16:29
  3. Ответов: 218
    Последнее: 12.04.2011, 18:55
  4. Нужен софт под FAT
    от KingOfEvil в разделе Софт
    Ответов: 5
    Последнее: 06.06.2007, 00:19

Ваши права

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