spectral1989 0 5 сентября, 2012 Опубликовано 5 сентября, 2012 (изменено) · Жалоба Здравствуйте! Имеется в наличии отладочная плата от терра электроники на stm32f103, пробую запустить SDIO + SD card + USB. Cкачал с сайта СТ либу usb mass storage device на stm32f10x, поправил под свою плату, запустил, но все работает не совсем так, как хотелось бы. Инициализация карты проходит. В системе появляется съемный диск, размер 0 байт, файловая система RAW, хотя я ее форматировал через FatFs в fat32, размер сектора = 512. При попытке открыть предлагает отформатировать, нажимаю да - появляется окошко, там указан размер карты 3,75гб, стало быть до карты проц достучаться может. Пробую форматировать - вылезает ошибка, не удается завершить форматирование. В чем может быть проблема? Пробовал уменьшать частоту тактирования карты: увеличил делитель с 1 до 0хА - не помогает. И еще вопрос, я скачал библиотеку FatFs и прикрутил к ней низкоуровневые функции stm32f10x - заработало, читает и пишет, создает файлы и форматирует. Теперь, чтобы при соединении через USB с компьютером я мог работать на нем с SD картой мне нужно сделать примерно так: SD карта -> интерфейс обмена данными(SDIO в моем случае) -> драйвер файловой системы(FatFs в моем случае) -> драйвер USB mass storage device -> ПК я правильно понимаю ситуацию? Изменено 5 сентября, 2012 пользователем spectral1989 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexashka 0 5 сентября, 2012 Опубликовано 5 сентября, 2012 · Жалоба проверьте питание на карте памяти -должно быть 3.3В. драйвер USB MSD работает с картой напрямую, безо всяких файловых систем. Еще у них там в проекте 2 штуки LUN, второй если не ошибаюсь -внешняя флешь память, которой нет на вашей плате. Вроде все заработало, когда вычистил все ссылки на эту память, сделал один LUN и подал питание на карточку (там транзистор по питанию не открывался) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spectral1989 0 6 сентября, 2012 Опубликовано 6 сентября, 2012 · Жалоба С транзистором я разобрался еще когда FatFs ковырял. Ок, попробую почистить LUN. Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spectral1989 0 6 сентября, 2012 Опубликовано 6 сентября, 2012 (изменено) · Жалоба Проверил на всякий случай питание, все ок! 3,3В Сделал один LUN, почистил ссылки, теперь появляется только один съемный диск. Но он по прежнему не доступен для работы:( вот кстати еще такая деталь: карта почему-то не инициализируется на значении SDIO_INIT_CLK_DIV = 0xB2, виснет на функции CmdResp3Error, а конкретно тут: while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CMDREND | SDIO_FLAG_CTIMEOUT))) { status = SDIO->STA; } если увеличить делитель SDIO_INIT_CLK_DIV до 0xF2 - инициализация проходит. хотя в соседнем проекте с FatFs на значении по умолчанию не возникает никаких проблем. Файл с низкоуровневыми функциями(инициализация, чтение) один и тот же. проект Keil http://disk.tom.ru/h7r3l2k карта 4гб нашел спорный момент. почему-то в функции MAL_GetStatus в файле mass_mal.c каждый раз вызывалась инициализация карты. зачем? поправил ее так: uint16_t MAL_GetStatus (uint8_t lun) { uint32_t DeviceSizeMul = 0,NumberOfBlocks = 0;; if (lun == 0) { SD_GetCardInfo(&mSDCardInfo); DeviceSizeMul = (mSDCardInfo.SD_csd.DeviceSizeMul + 2); if(mSDCardInfo.CardType == SDIO_HIGH_CAPACITY_SD_CARD) { Mass_Block_Count[0] = (mSDCardInfo.SD_csd.DeviceSize + 1) * 1024; } else { NumberOfBlocks = ((1 << (mSDCardInfo.SD_csd.RdBlockLen)) / 512); Mass_Block_Count[0] = ((mSDCardInfo.SD_csd.DeviceSize + 1) * (1 << DeviceSizeMul) << (NumberOfBlocks/2)); } Mass_Block_Size[0] = 512; Mass_Memory_Size[0] = Mass_Block_Count[0] * Mass_Block_Size[0]; // STM_EVAL_LEDOn(LED2); return MAL_OK; } // STM_EVAL_LEDOn(LED2); return MAL_FAIL; } но легче не стало скачал WinHex. Он определяет, что файловая система Fat32, но стартовый сектор почему-то уехал на 1 сектор. Из-за чего это может быть? Скрин прилагается: http://disk.tom.ru/fkzggq1 Изменено 6 сентября, 2012 пользователем spectral1989 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexashka 0 6 сентября, 2012 Опубликовано 6 сентября, 2012 · Жалоба вот кстати еще такая деталь: карта почему-то не инициализируется на значении SDIO_INIT_CLK_DIV = 0xB2, виснет на функции CmdResp3Error, а конкретно тут: while (!(status & (SDIO_FLAG_CCRCFAIL | SDIO_FLAG_CMDREND | SDIO_FLAG_CTIMEOUT))) { status = SDIO->STA; } если увеличить делитель SDIO_INIT_CLK_DIV до 0xF2 - инициализация проходит. хотя в соседнем проекте с FatFs на значении по умолчанию не возникает никаких проблем. Файл с низкоуровневыми функциями(инициализация, чтение) один и тот же. А изза какого флага виснет? Кстати вспомнил, я еще увеличивал SD_DATATIMEOUT до 0x007FFFFF (в файле stm32_eval_sdio_sd.c) правда это вроде проявилось только при мультиблоковой записи, но все равно. А какая ревизия платы? Зеленая, красная? снизу платы напаяны резисторы подтяжки SDIO? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spectral1989 0 6 сентября, 2012 Опубликовано 6 сентября, 2012 (изменено) · Жалоба флаг CMDREND - command responce recieved(CRC check passed) не появляется, FLAG_CTIMEOUT почему-то тоже. на момент, когда останавливаешь выполнение программы status = 0x800 - CMDACT command transfer in progress. причем такой нюанс, запускаешь в отладчике на автовыполнение - он виснет на этом условии, но если остановить и вручную прошагать условие - программа выполняется дальше, пока опять до этого места не дойдет. Покупал недавно, плата красная, на обратной стороне три резистора под разъемом microSD, не знаю подтяжки это или нет. мультиблоковую запись не трогал пока, POLLING mode стоит. без дма даже. а не могли бы вы выложить свой проект? понаставил брэйкпоинтов в низкоуровневой функции чтения внутри условий проверки на ошибки и нашел еще косяк: флаг SD_RX_OVERRUN появляется, когда комп к карте обращается. Изменено 6 сентября, 2012 пользователем spectral1989 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spectral1989 0 6 сентября, 2012 Опубликовано 6 сентября, 2012 · Жалоба включил hardware flow control и заработало:) ПК думал около минуты перед тем, как определить флешку, видимо контроллер захлебывался от количества запросов. буду пробовать мультиблочную запись/чтение! спасибо за помощь! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexashka 0 6 сентября, 2012 Опубликовано 6 сентября, 2012 · Жалоба включил hardware flow control и заработало :) ПК думал около минуты перед тем, как определить флешку, видимо контроллер захлебывался от количества запросов. буду пробовать мультиблочную запись/чтение! спасибо за помощь! если флешка чистая то открывается через 3-4сек. Вообще я проект правил по минимуму, стараясь не трогать то что не знаю. Проект у меня иаровский, для STM3210-EVAL, могу скинуть если еще актуально) Мультиблок в массстораже? Расскажите потом какая скорость получилась. Я так и не придумал как сделать мультиблок в нем, слишком там сложно все закручено. ЗЫ. Да незачто, Вы все сами сделали) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spectral1989 0 7 сентября, 2012 Опубликовано 7 сентября, 2012 · Жалоба 3-4с время открытия? а какого объема карту подключаете? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spectral1989 0 7 сентября, 2012 Опубликовано 7 сентября, 2012 (изменено) · Жалоба Заметил такой глюк: беру архив около 100мб, копирую на SD карту, проверяю контрольные суммы - сходится. Копирую архив с карты на ПК, проверяю контрольные суммы - опять сходится. Делаю безопасное извлечение, вытаскиваю шнур USB, вставляю - карта определяется корректно(правильный размер, есть файл, который я создал с помощью FatFs), но этого архива нет. В чем проблема может быть? Alexashka, пожалуйста скиньте все таки свой проект:) з.ы. мультиблок с ходу не заработал, я его пока отложил Изменено 7 сентября, 2012 пользователем spectral1989 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexashka 0 7 сентября, 2012 Опубликовано 7 сентября, 2012 · Жалоба Заметил такой глюк: беру архив около 100мб, копирую на SD карту, проверяю контрольные суммы - сходится. Копирую архив с карты на ПК, проверяю контрольные суммы - опять сходится. Делаю безопасное извлечение, вытаскиваю шнур USB, вставляю - карта определяется корректно(правильный размер, есть файл, который я создал с помощью FatFs), но этого архива нет. В чем проблема может быть? Alexashka, пожалуйста скиньте все таки свой проект:) з.ы. мультиблок с ходу не заработал, я его пока отложил Хм...интересный эффект, как будто данные о созданном файле были занесены в кэш но не прописались в ФАТ таблицу на диске. Попробуйте проделать тоже самое с картой вставив ее в какойнить картридер -может карта глючная. У меня есть карточка (недавно купленная) с которой я не могу удалить файлы, и не могу отформатировать ее. Т.е файлы удаляются, потом вытащишь-вставишь -а они тут как тут, все на месте Я писал много раз уже, но мелкие файлы, пропадания не замечено. Надо будет попробовать записать большой. Карты у меня на 1,2,4,8 ГБ. Проблем не было никаких. Которая за 4 сек открывается это 4ГБ, класс 10, Трансценд вроде бы. Сейчас ничего не могу скинуть, проект на работе, так что -до понедельника :) Есть еще на 2Гб, помню она дольше открывается и пишется, раза в 2 точно если не в 3. Заметил еще такую вещь -если на карте есть мультимедийные файлы то открывание диска затягивается на очень длительное время... ЗЫ. Кстати, а сколько у Вас пишется по времени 100МБ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 8 сентября, 2012 Опубликовано 8 сентября, 2012 · Жалоба Есть еще на 2Гб, помню она дольше открывается и пишется, раза в 2 точно если не в 3. Попробуте форматнуть ее прямо в устройстве, командой f_mkfs - у меня это увеличило скорость записи почти на порядок! Правда немного другой процессор. Обсуждалось тут: http://electronix.ru/forum/index.php?showtopic=105763 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spectral1989 0 10 сентября, 2012 Опубликовано 10 сентября, 2012 (изменено) · Жалоба купил несколько новых карт: 2, 4, 8гб разного класса. теперь все определяются быстро, но глюк, когда записываешь что-нибудь на флешку с ПК, вытаскиваешь-вставляешь - файлы пропадают остался. в чем может быть проблема? Изменено 10 сентября, 2012 пользователем spectral1989 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
spectral1989 0 10 сентября, 2012 Опубликовано 10 сентября, 2012 · Жалоба собрал заново проект, все заработало. видимо накосячил где-то, когда второй ЛУН убирал. спасибо всем помогавшим и сочувствующим:) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alexashka 0 10 сентября, 2012 Опубликовано 10 сентября, 2012 · Жалоба Попробуте форматнуть ее прямо в устройстве, командой f_mkfs - у меня это увеличило скорость записи почти на порядок! Правда немного другой процессор. Обсуждалось тут: http://electronix.ru/forum/index.php?showtopic=105763 Похоже у Вас не работает как положено мультиблоковая запись. Если используете драйвер SDIO от ST, то гляньте там между записью блоков в команде CMD25 имеется задержка, у меня тоже скорость была очень низкая, пока я эту задержку не покоцал. Там зачемто сделано ожидание перед опросом состояния записи -возможно чтобы не прерывать процессы в контроллере карты. Вообщем я ее уменьшил в несколько раз и скорость записи теперь достаточно стабильна и пропорциональна только классу карты Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться