реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Микроконтроллер STM32 и uSD карта в SPI режиме, проблема
kan35
сообщение Feb 21 2014, 11:18
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



Сразу приношу извинения, что тема несколько косвенно связана с микроконтроллером, но для памяти отдельной ветки не нашел.
Проблема следующая.
STM32 и uSD карта коммуницируются по SPI. Проекту лет 5, последнее время юзаю SDIO порт, отказавшись от SPI, и очень рад такому переходу, так как:
оказалось, что карты SanDisk в большинстве не работают в этом режиме. А именно, команды
CMD0 (перевод в режим SPI)
CMD8
CMD58
отрабатывают штатно
а далее следует связка из CMD55/ACMD41
котоые собственно не включают карту, она продолжнает находиться в IDLE остоянии.
Повторы ничего не дают.
Проект мелкосерийный и карты попадлись не сандиск и о проблеме даже не знал никто. А тут вот открылся сюрприз. Карт уже куплено много, не хотелось бы их выкидывать, так что если у кого то имеется опыт работы с ними, прошу поделиться.
Go to the top of the page
 
+Quote Post
mantech
сообщение Feb 21 2014, 12:20
Сообщение #2


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(kan35 @ Feb 21 2014, 15:18) *
и карты попадлись не сандиск и о проблеме даже не знал никто.


Хм. Интересно, можете про эти карточки поподробнее? Сколько всякого переделал на сд-картах в спи-режиме - все было корректно.
Go to the top of the page
 
+Quote Post
kan35
сообщение Feb 21 2014, 12:28
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



Цитата(mantech @ Feb 21 2014, 16:20) *
Хм. Интересно, можете про эти карточки поподробнее? Сколько всякого переделал на сд-картах в спи-режиме - все было корректно.

Стояло много разных - никаких проблем, а тут SanDisk попался 8G, потом попробовал 2G, потом даже 128Mb откопал - и все так вот не работают. Все - uSD. Потом смотрю, что все они SanDisk, и тут просветлело. Ставлю Transcend - все работает отлично. Драйвер взял из пакета IAR, IAR-STM32-SK: sd_ll_spi2.c и т д - без изменений (правда и изменения не помогают - хочу подсказки).
Go to the top of the page
 
+Quote Post
mantech
сообщение Feb 22 2014, 16:37
Сообщение #4


Гуру
******

Группа: Участник
Сообщений: 2 219
Регистрация: 16-08-12
Из: Киров
Пользователь №: 73 143



Цитата(kan35 @ Feb 21 2014, 16:28) *
SanDisk попался 8G, потом попробовал 2G, потом даже 128Mb


Да, интересно, надо будет тоже где-нить откопать и проверить свои творения biggrin.gif

Помнится когда-то давно тоже что-то не работало - пришлось отлаживать покомандно,долго мучался, но получилось. Кстати,а на своем сайте у них нет каких-либо ограничений? Не смотрели?

Сообщение отредактировал mantech - Feb 22 2014, 16:37
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Feb 22 2014, 21:48
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Вероятно, проблема именнов в микроSD картах. Так как знаю про массовое использование обычных SD карт сандисков (конкретно- 2-гиговой SD Sandisk копплектуют один прибор, а там SPI) - проблем не возникало.

Еще возможно, что просто какой-то параметр на грани допустимого или не соблюден, а в разных фирмах по разному оно на это реагирует. Ну, например, инициализируете на 2 мегагерцах тактовой.

Ну и классика жанра: линии притянуты, в воздухе не болтаются? Питание в норме, ток не сильно зажимаете? Инициализация соответствует спецификации?
"Работает с ZZZ "- не аргумент, гляньте по исходникам, или лучше осциллографом/логанализатором реальную картинку. Чудес не бывает (почти не бывает sm.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Feb 22 2014, 22:58
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(kan35 @ Feb 21 2014, 15:18) *
...
CMD58
отрабатывают штатно
а далее следует связка из CMD55/ACMD41
котоые собственно не включают карту, она продолжнает находиться в IDLE остоянии.

Именно idle, или inactive? И как соотносится прочитанное содержимое OCR и аргумента ACMD41 (собственно OP_COND)?

Есть еще различия в разных версиях стандартов. Например, по версии 1.0 при чтении регистров CSD и CID блок данных отстоит
от ответа как минимум на один байт (Ncr и Nac соответственно), а уже в версии 1.01 этот период может быть и нулевым (переименован в Ncx).
Подавляющее большинство карт работают по правилам более ранней версии, но есть и такие, что передают CID/CSD сразу после R1.
Go to the top of the page
 
+Quote Post
kan35
сообщение Feb 23 2014, 05:09
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 537
Регистрация: 22-02-06
Пользователь №: 14 594



Статус - 0x01 - это вроде IDLE.
OCR считывается успешно по битам на-память не скажу, то четко - от 2.7 до 3.6 и старший бит вроде 1.
ACMD даю аргумент 0x40000000 (точнее не я, а тот самый иаровский драйвер) и ответ - опять 0x01.
Когда драйвер по второму кругу хочет запустить инит, CMD8 возвращает уже статус 0x05 - +ILLIGAL OP CODE и инит прерывается. Далее опять CMD0 и 0x01...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th August 2025 - 23:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.0139 секунд с 7
ELECTRONIX ©2004-2016