Xeon 0 30 октября, 2013 Опубликовано 30 октября, 2013 · Жалоба Всем привет! На выше упомянутом проце запустил SD и FatFS, с 1Гиговой флешкой всё работает норм, а вот с 2Гиговой чет не хочет... может кто то встречался с такой ситуацией? Флешка точно работает и отформатирована как надо. При вызове disk_initialize возвращается всё время STA_NOINIT. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xeon 0 31 октября, 2013 Опубликовано 31 октября, 2013 · Жалоба Находил несколько схожих тем http://electronix.ru/forum/lofiversion/index.php/t98209.html http://electronix.ru/forum/lofiversion/index.php/t65532.html Но окончательного решения проблемы там так и не появилось... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 31 октября, 2013 Опубликовано 31 октября, 2013 · Жалоба Всем привет! На выше упомянутом проце запустил SD и FatFS, с 1Гиговой флешкой всё работает норм, а вот с 2Гиговой чет не хочет... может кто то встречался с такой ситуацией? Флешка точно работает и отформатирована как надо. При вызове disk_initialize возвращается всё время STA_NOINIT. Надо разбираться с драйвером сдэшки, а точнее со стандартами флешки. FatFS тут точно не причём :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xor.kruger 0 31 октября, 2013 Опубликовано 31 октября, 2013 · Жалоба haker_fox абсолютно прав. 99 % что отличаются ревизии SD карт. Вставьте карты в картридер ПК считайте с них двоих служебную информацию и сравните. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 31 октября, 2013 Опубликовано 31 октября, 2013 · Жалоба Что-то кажется мне, что всё дело в буковках HC на второй карте ;-) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xeon 0 31 октября, 2013 Опубликовано 31 октября, 2013 · Жалоба Буклвак HC не нашёл) буду сравнивать служебную инфу, если что найду отпишусь Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 50 31 октября, 2013 Опубликовано 31 октября, 2013 (изменено) · Жалоба Буклвак HC не нашёл) буду сравнивать служебную инфу, если что найду отпишусь с 1Гиговой флешкой всё работает норм, а вот с 2Гиговой чет не хочет... Скорее всего карта 2го типа, 1й тип - самые старинные флешки, работают с упрощенной инициализацией, как ММС. 2й тип требует дополнительной ACMD, а НС еще и CMD8. Посмотрите в эту сторону... Возможно еще то, что флешки бывают "медленные", в смысле их контроллер. Раз такое бывало, проверил так - пробовал инициализацию 3 раза через секунду, так некоторые со 2го, а одна даже только с 3го раза запускалась. Изменено 31 октября, 2013 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xeon 0 1 ноября, 2013 Опубликовано 1 ноября, 2013 · Жалоба Пробовал увеличить время между попытками инициализации, не помогло. Буду копать в сторону 2-го типа флешки... Интересно, а FatFS со вторым типам флешки вообще не работает или надо где настраивать...т Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 50 1 ноября, 2013 Опубликовано 1 ноября, 2013 · Жалоба Пробовал увеличить время между попытками инициализации, не помогло. Буду копать в сторону 2-го типа флешки... Интересно, а FatFS со вторым типам флешки вообще не работает или надо где настраивать...т FatFS все равно какой тип флешки. Это решается на уровне disk initialize в этой процедуре флешка инициализируется на низком уровне, в дальнейшем файловую систему интересуют только функции чтения, записи и состояния диска. Когда я только начал освоение флешек и фатфс, то чановская функция инициализации мне не понравилась (трудна в понимании и использует таймера, я писал для аврки, а там таймеры на вес золота :rolleyes: ) плюс небыло поддержки НС карт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xeon 0 2 ноября, 2013 Опубликовано 2 ноября, 2013 · Жалоба FatFS все равно какой тип флешки. Это решается на уровне disk initialize в этой процедуре флешка инициализируется на низком уровне, в дальнейшем файловую систему интересуют только функции чтения, записи и состояния диска. Когда я только начал освоение флешек и фатфс, то чановская функция инициализации мне не понравилась (трудна в понимании и использует таймера, я писал для аврки, а там таймеры на вес золота :rolleyes: ) плюс небыло поддержки НС карт. А можете скинуть исходники с инициализацией? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 50 2 ноября, 2013 Опубликовано 2 ноября, 2013 (изменено) · Жалоба А можете скинуть исходники с инициализацией? Вот пример инициализации с поддержкой всех типов карт(MMC SD SD2.0 SDHC) Использую в своем микроПЛК уже 2 года, люди вставляют разные карточки и вроде как не жалуются sdmmc.txt Изменено 2 ноября, 2013 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xeon 0 2 ноября, 2013 Опубликовано 2 ноября, 2013 · Жалоба Большое спасибо!) Буду изучать) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xeon 0 2 ноября, 2013 Опубликовано 2 ноября, 2013 · Жалоба Посмотрел Ваши исходники и то что использую (исходники Martin THOMAS для инициализации), команды отсылаются в одинаковом порядке. Начал снова дебажить, в функции MCI_disk_initialize() инициализация самой флешки проходит нормально (в выше написанной функции дергаются MCI_CardInit() и MCI_Check_CID, и они возвращают true), а вот дальше при вызове MCI_Set_Address() уже начинаются косяки. Вот как выглядит сама функция: DWORD MCI_Set_Address(void) { volatile DWORD i; // mthomas - volatile DWORD retryCount; DWORD respStatus; DWORD respValue[4]; DWORD CmdArgument; /* If it's a SD card, SET_RELATIVE_ADDR is to get the address from the card and use this value in RCA, if it's a MMC, set default RCA addr. 0x00010000. */ #if 1 // mthomas: if (MCI_CardType & MMC_CARD) { /* If it's unknown or MMC_CARD, fix the RCA address */ CmdArgument = 0x00010000; } else { CmdArgument = 0; } #else // NXP original: if ( MCI_CardType == SD_CARD ) { CmdArgument = 0; } else /* If it's unknown or MMC_CARD, fix the RCA address */ { CmdArgument = 0x00010000; } #endif retryCount = 0x20; /* reset retry counter */ while (retryCount > 0) { /* Send CMD3 command repeatedly until the response is back correctly */ MCI_SendCmd( SET_RELATIVE_ADDR, CmdArgument, EXPECT_SHORT_RESP, 0); respStatus = MCI_GetCmdResp( SET_RELATIVE_ADDR, EXPECT_SHORT_RESP, (DWORD *)&respValue[0]); /* bit 0 and bit 2 must be zero, or it's timeout or CRC error */ /* It should go to IDEN state and bit 8 should be 1 */ if ( !(respStatus & MCI_CMD_TIMEOUT) && ((respValue[0] & (0x0F << 8)) == 0x0500)) { CardRCA = respValue[0] & 0xFFFF0000; /* Save the RCA value from SD card */ return ( TRUE ); /* response is back and correct. */ } for (i = 0; i < 0x20; i++) { ; } retryCount--; } return ( FALSE ); } когда пытаемся прочитать ответ respStatus = MCI_GetCmdResp( SET_RELATIVE_ADDR, EXPECT_SHORT_RESP, (DWORD *)&respValue[0]); MCI_GetCmdResp возвращает -1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 50 2 ноября, 2013 Опубликовано 2 ноября, 2013 · Жалоба Посмотрел Ваши исходники и то что использую (исходники Martin THOMAS для инициализации), команды отсылаются в одинаковом порядке. Начал снова дебажить, в функции MCI_disk_initialize() MCI_GetCmdResp возвращает -1 Карта подключена по SPI или в режиме SD(4битном)? Просто команды инициализации разные. То, что в файле исходников работало в режиме SPI на аврках и стмах, думаю на лпсишках тоже должно работать. Может что еще недосмотрели? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xeon 0 2 ноября, 2013 Опубликовано 2 ноября, 2013 · Жалоба Использую режим SD (MCI)... буду смотреть) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться