18.11.2015, 11:45
|
|
Временная регистрация
Регистрация: 13.07.2008
Сообщений: 62
Сказал спасибо: 4
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
STM32+SDIO+SDHC16Gb
Доброго времени суток.
Пытаюсь запустить STM32F103 на работу с картами SDHC большого объема через SDIO. Требуется просто чтение и запись блоков без ФС.
На просторах инета ходит много реализаций библиотеки, переделанной из примера от STM. Но что древние, что самые новые допилы имеют одну и ту же болячку - а именно не работают с картами выше 4Gb, выглядит это так:
Инициализация проходит без ошибок, как и с младшими картами по объему, но при чтении блока или нескольких блоков читаются не корректные данные. Например, при чтении блока с номером 0 получаем то что в файле rd_block0_sdhc16gb.txt (где скрыто там везде нули), оно похоже на MBR, но увы это не MBR. Такая же непонятность происходит и с 8 и с 16 и с 32Gb картами, c картами 4Gb и ниже всё работает нормально, при том, что 4Gb тоже является SDHC.
Может кто сталкивался ?
Вот ссылки на два тестовых проекта на разных либах под CoIDEv2
https://yadi.sk/d/nvmGmTT8kWCae
https://yadi.sk/d/-HUNdeggkXfsF
или во вложении
Кристалл stm32F103 c sdio. Главное что бы дебагер был и флешка на sdio, остальное не важно. Запустить в дебаге, затем остановить и посмотреть массив data_rd.
Последний раз редактировалось black27512; 18.11.2015 в 12:06.
|
|
|
|
18.11.2015, 12:41
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: STM32+SDIO+SDHC16Gb
Как-то не было таких проблем. Работаю с 8Gb картами уже давно. И через SPI и через SDIO.
|
|
|
|
18.11.2015, 13:25
|
|
Временная регистрация
Регистрация: 13.07.2008
Сообщений: 62
Сказал спасибо: 4
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: STM32+SDIO+SDHC16Gb
А есть РАБОТАЮЩИЙ пример кода ?
|
|
|
|
18.11.2015, 13:33
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: STM32+SDIO+SDHC16Gb
Конечно есть. Домой доберусь, выложу.
|
|
|
|
19.11.2015, 01:17
|
|
Временная регистрация
Регистрация: 13.07.2008
Сообщений: 62
Сказал спасибо: 4
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: STM32+SDIO+SDHC16Gb
Примерно разобрался почему такой глюк возникает, но причину, вернее раскуривать механизм как это устроено лень, да и не нужно, т.к. всё равно предполагается работа просто с массивом флеш-памяти, а не с ФС. Оказалось, что на флешках большого объема почему-то реальная MBR смещена в блок 0x2000 (вероятно бывают и другие варианты), в начале думал что об этом где-то в CID/CSD можно узнать, но вроде не там это хранится. А вот в секторе 0 хранится лишь что-то похожее и видимо указывает на MBR. Ну а на компе проги по какой-то причине показывают флешку не с начала, а именно с блока 0x2000, в итоге данные, которые читает МК вообще найти на компе невозможно. Забавно, что если при помощи МК затереть блок 0, то тогда комп начинает флешку показывать с нуля, то есть значит всё таки это ни как не связано с флешкой и картридером аппаратно, а срабатывает прослойка на компе...
Собственно потому у тех, кто использует либу FatFs проблема эта ни как не возникает... Товарищ Chen видимо это давно знает...
|
|
|
|
19.11.2015, 10:41
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 918
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: STM32+SDIO+SDHC16Gb
|
|
|
Эти 4 пользователя(ей) сказали Спасибо Easyrider83 за это сообщение:
|
|
|
25.11.2015, 01:44
|
|
Временная регистрация
Регистрация: 13.07.2008
Сообщений: 62
Сказал спасибо: 4
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: STM32+SDIO+SDHC16Gb
Попутно возник еще вопрос. Это нормально, что скорость на SDIO раза в 3-4 ниже чем на SPI ? Или что-то я делаю не так ?
На SPI на запись более 1мб/с получается, что даже удивляет немного.
А вот на SDIO 350кб/с одноблочная запись и 300кб/с (!) мультиблочная. Что-то тут не так...
|
|
|
|
25.11.2015, 01:56
|
|
Заблокирован
Регистрация: 22.04.2014
Сообщений: 0
Сказал спасибо: 15
Сказали Спасибо 366 раз(а) в 284 сообщении(ях)
|
Re: STM32+SDIO+SDHC16Gb
Что-то не так делаете.
|
|
|
|
26.11.2015, 23:24
|
|
Временная регистрация
Регистрация: 13.07.2008
Сообщений: 62
Сказал спасибо: 4
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: STM32+SDIO+SDHC16Gb
Всё таки всё так, что бы мультиблок был эффективен оказывается нужно записывать мноооого блоков, а не 4 кб как у меня. Ну а ОЗУ не резиновое, так что думаю решить только путем нарезки функции на куски и не прерывая цепочку мультиблоков записывать уже приличные объемы.
Вся причина в задержке в конце функции SD_WriteMultiBlocks:
/*!‹ Add some delay before checking the Card Status */
for(count = 0; count ‹ 0xFFFF; count++);
А это не хилая такая задержка. Просто механизм таков, что на самом деле даже указывая количество блоков всё равно это используется только для самой функции, а флешке только сообщается через ACMD23 (задание количества блоков для предстирания), а вот CMD23 (явно указывающая количество блоков на запись/чтение) не используется по причине не поддерживания её большинством флешек (не только SDSC). В итоге всё тормозится CMD12 (Stop Transfer), а т.к. после этого флешка впадает в состояние программирования (записи) последних данных, то видимо кроме как паузой подкараулить момент окончания ни как нельзя.
При убирании паузы сразу с ошибкой выпадает.
|
|
|
|
26.11.2015, 23:44
|
|
Супер-модератор
Регистрация: 15.10.2007
Сообщений: 3,529
Сказал спасибо: 172
Сказали Спасибо 1,560 раз(а) в 810 сообщении(ях)
|
Re: STM32+SDIO+SDHC16Gb
Сообщение от black27512
|
после этого флешка впадает в состояние программирования (записи) последних данных, то видимо кроме как паузой подкараулить момент окончания ни как нельзя.
|
Как так-то? Проверкой статуса можно проверить в каком состоянии она находится. Надо читать статус и ждать пока не выйдет с programming state.
Или вот еще
Цитата:
|
If all write buffers are full, and as long as the card is in Programming State (see SD Memory Card state diagram Figure 4-3 ), the DAT0 line will be kept low (BUSY).
|
У меня, кстати, встречался какой-то глюк с одной картой и она после записи висела в programming state без конца.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 01:33.
|
|