07.12.2015, 14:57
|
#21
|
Частый гость
Регистрация: 23.10.2011
Сообщений: 15
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: STM32+SDIO+SDHC16Gb
В прилагаемой библиотеке есть следующая функция:
/* SDTransferState: Data Transfer state.
* This value can be:
* - SD_TRANSFER_OK: No data transfer is acting
* - SD_TRANSFER_BUSY: Data transfer is acting
*/
SDTransferState SD_GetStatus(void)
Пробовал её применять, однако ошибки записи никуда не делись. Может, проверяю не так.
И правильно ли проверять готовность контроллера карты по окончанию передачи данных. Он ведь не только поток данных принимает, но и что-то с ним дальше делает. А это к передачи уже отношение не имеет.
Последний раз редактировалось Vitaliki; 07.12.2015 в 15:35.
Причина: Добавлена цитата, для которой ответ.
|
|
|
|
07.12.2015, 16:11
|
#22
|
Временная регистрация
Регистрация: 13.07.2008
Сообщений: 62
Сказал спасибо: 4
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: STM32+SDIO+SDHC16Gb
Сообщение от realid
|
А что тут понимать? FatFs ChaN это библа файловой системы, к работе с SD она не имеет непосредственного отношения, только косвенное.
|
Дык вот то и понимать через что эта библа контачит с флешкой. То что сама FatFs тут не виновата это понятно.
|
|
|
|
07.12.2015, 16:29
|
#23
|
Временная регистрация
Регистрация: 13.07.2008
Сообщений: 62
Сказал спасибо: 4
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: STM32+SDIO+SDHC16Gb
Сообщение от Vitaliki
|
И правильно ли проверять готовность контроллера карты по окончанию передачи данных. Он ведь не только поток данных принимает, но и что-то с ним дальше делает. А это к передачи уже отношение не имеет.
|
Ничего это не даст, смотрите функцию MMC_disk_write, там проверка на завершение и так производится. И пока процесс не завершится функция продолжает ждать.
Попробуйте по железу увеличить толщину шин питания и керамику+электролит прямо на выводах питания слота SD. Ну и про резисторы подтягивающие к +3.3в 47кОм не забывайте (все сигналы кроме CLK).
|
|
|
Сказали "Спасибо" black27512
|
|
|
07.12.2015, 16:34
|
#24
|
Супер-модератор
Регистрация: 15.10.2007
Сообщений: 3,539
Сказал спасибо: 172
Сказали Спасибо 1,561 раз(а) в 811 сообщении(ях)
|
Re: STM32+SDIO+SDHC16Gb
Сообщение от Vitaliki
|
И правильно ли проверять готовность контроллера карты по окончанию передачи данных. Он ведь не только поток данных принимает, но и что-то с ним дальше делает. А это к передачи уже отношение не имеет.
|
Если вы внимательно проследите выполнение функции SD_GetStatus, то все поймете. Все там проверяется, а SD_TRANSFER_OK и SD_TRANSFER_BUSY указывают карта готова принимать новые данные или нет, потому что если карта находится в состоянии программирования, то результат будет SD_TRANSFER_BUSY.
|
|
|
|
09.12.2015, 15:05
|
#25
|
Гражданин KAZUS.RU
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
|
Re: STM32+SDIO+SDHC16Gb
realid
не совсем так, точнее совсем не так
карта может вернуть статус SD_TRANSFER_OK и не быть готовой к записи
а вот для готовности там есть еще один бит статуса - READY_FOR_DATA (в реплике R1)
который и надо мониторить (дополнительно к TRAN состоянию)
PS за подробностями - в описание протокола SD, пункт 4.3, Write Data
Последний раз редактировалось Hives; 09.12.2015 в 15:09.
|
|
|
|
09.12.2015, 20:46
|
#26
|
Частый гость
Регистрация: 13.07.2006
Сообщений: 34
Сказал спасибо: 6
Сказали Спасибо 10 раз(а) в 8 сообщении(ях)
|
Re: STM32+SDIO+SDHC16Gb
Отмечусь тоже.
В сети ходят много SD драйверов через SDIO, и судя по коду они основаны на каком-то одном общем предке. И у всех у них есть один и тот же косяк, заключающийся в адресации. Помимо него, есть другой косяк в мультиблочных командах, но они не критичны. Так вот, после исправления этого косяка согласно букварю на карты у меня взлетели SDXC, это которые больше 32ГБ. В данный момент, летает SDXC 64ГБ через DMA. До этого работали только SD и SDHC. Причем, заметно было именно в связке с FatFS. Так что делайте выводы сами.
|
|
|
|
09.12.2015, 21:09
|
#27
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: STM32+SDIO+SDHC16Gb
Здорово, конечно, но было бы еще лучше поделиться результатом. А то все только якают и мнекают, а пользы не много выходит.
|
|
|
|
09.12.2015, 22:03
|
#28
|
Супер-модератор
Регистрация: 15.10.2007
Сообщений: 3,539
Сказал спасибо: 172
Сказали Спасибо 1,561 раз(а) в 811 сообщении(ях)
|
Сообщение от Hives
|
realid
не совсем так, точнее совсем не так
карта может вернуть статус SD_TRANSFER_OK и не быть готовой к записи
а вот для готовности там есть еще один бит статуса - READY_FOR_DATA (в реплике R1)
который и надо мониторить (дополнительно к TRAN состоянию)
PS за подробностями - в описание протокола SD, пункт 4.3, Write Data
|
Вот это поворот. Я вот считал что, если карта вернулась в Transfer State это значит она готова принимать новые команды и данные.
Сообщение от HardWareMan
|
В сети ходят много SD драйверов через SDIO, и судя по коду они основаны на каком-то одном общем предке. И у всех у них есть один и тот же косяк, заключающийся в адресации.
|
Это что за косяк? Тот что, при записи/чтении одним картам(старым, v1 так называемым)нужен адрес абсолютный, а следующим в поколении(v2, HC и тп) уже номер блока(сектора)?
Сообщение от HardWareMan
|
Помимо него, есть другой косяк в мультиблочных командах, но они не критичны.
|
Какой?
Сообщение от HardWareMan
|
Так вот, после исправления этого косяка согласно букварю на карты у меня взлетели SDXC, это которые больше 32ГБ. В данный момент, летает SDXC 64ГБ через DMA. До этого работали только SD и SDHC. Причем, заметно было именно в связке с FatFS.
|
Что исправили и где?
Последний раз редактировалось realid; 09.12.2015 в 22:11.
|
|
|
|
10.12.2015, 12:44
|
#29
|
Временная регистрация
Регистрация: 13.07.2008
Сообщений: 62
Сказал спасибо: 4
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: STM32+SDIO+SDHC16Gb
Вот здесь относительно рабочий вариант https://github.com/nemuisan/STM32Primer2_GPS_Tracker
Только я выкидывал FatFS, мне нужна была чисто работа с блоками карты напрямую. Косяк с адресацией там исправлен (собственно косяк чисто в том, что адрес передается в uint32 и т.к. он передается не в блоках, а в байтах то для SDXC 32 бита не хватает для полной адресации, достаточно перейти на тип uint64 и всё норм будет). Ну и по инициализации там пара бит добавлено (информирование карты о том, что хост поддерживает SDXC).
Мультиблок в той либе поправлен и он там работает, но поправлен костылем в виде длинной паузы (об этом писал выше), ну и как это победить тоже описал выше.
Выложить готовое не могу, т.к. проект зашел в тупик (по причине тормознутости SD карт при записи каких-то областей и переполнению ОЗУ МК входящим потоком) и варианта "бери и пользуйся" не получилось. Буду прикручивать буфер из внешнего ОЗУ, а в таком случае мне SPI оказался ближе и бюджетнее.
Последний раз редактировалось black27512; 10.12.2015 в 12:46.
|
|
|
|
10.12.2015, 12:56
|
#30
|
Частый гость
Регистрация: 23.10.2011
Сообщений: 15
Сказал спасибо: 2
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Re: STM32+SDIO+SDHC16Gb
Сообщение от realid
|
Что исправили и где?
|
Вот натыкался на подробные пояснения: https://gist.github.com/voidlizard/2202952
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 03:41.
|
|