Перейти к содержанию
    

Очень долго инициализируется SD-карта.

STM32F746,

Код сгенерирован калокубом.

Есть такая функция в нем SDMMC_GetCmdResp1(SDMMCx, SDMMC_CMD_APP_CMD, SDMMC_CMDTIMEOUT);

Так вот когда в теле этой функции проверяется регистр SDMMCx->STA, то проверка идет очень долго, так как бит CMDACT в единице. Спустя 20-30 секунд бит сбрасывается и карта работает идеально. Что характерно, время инициализации может быть и меньшим, иногда все сразу проходит.

режим 4 битный, частота 48 МГц.

 

Куда копать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 минут назад, MementoMori сказал:

Куда копать?

Рискну нарваться на гнев, но копать в документацию и использовать не "калокуб" а свои собственные интеллектуальные ресурсы. Пару лет назад делал карту на обычном SPI для Cortex-M4F. Инициализация точно проходила в течение времени меншь, чем секунда. К сожалению подробности уже не помню. С тех пор с картами больше не работал. Но совет даю по собственному опыту. Вам это понадобится хотя бы и для того, чтобы понять, почему этот бит так долго висит в лог. 1. Ну и анализатор на шину совсем не будет лишним. Только скорость возможно придётся вам снизить, т.к. начинаются сбои в передаче данных с подключенными хвостами анализатора.

Изменено пользователем MrBearManul

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

22 минуты назад, MementoMori сказал:

Куда копать?

Цитата

Setting the busy bit to 0 indicates that the card is still initializing. Setting the busy bit to 1
indicates completion of initialization. Card initialization shall be completed within 1 second from the first
ACMD41. The host repeatedly issues ACMD41 for at least 1 second or until the busy bit are set to 1.

Инициализация может занимать до секунды. Попробуйте другие карточки, других производителей.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Just now, adnega said:

Инициализация может занимать до секунды. Попробуйте другие карточки, других производителей.

Пробовал, все то же самое.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 минуты назад, adnega сказал:

Инициализация может занимать до секунды.

Человек пишет про

29 минут назад, MementoMori сказал:

20-30 секунд

А значит, явно проблема в коде. Ну или в железе. Или и там и там. Почитайте таки документацию. Там не очень сложный алгоритм инициализации карты. Ну и проверьте адекватность драйвера периферийного модуля MMC/SD. Для этого уже надо будет в документацию на микроконтроллез заглянуть, включая errata.

Изменено пользователем MrBearManul

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

27 минут назад, MrBearManul сказал:

Там не очень сложный алгоритм инициализации карты.

1732330916_.thumb.png.25e1a48c05b252e4f34940e5f67bc877.png

А что насчет питания карты? Какое оно? Есть ли ключик для "power cycle"?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Таки я бы всё-таки взял дешманский анализатор с али, и записал весь обмен с картой. К сожалению в программе нет декодера для карт, по крайней мере в моей версии. Придётся ручками анализировать. Но это хотя бы позволит проверить соответствие диаграмме, которую любезно привёл @adnega.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 hour ago, MrBearManul said:

Таки я бы всё-таки взял дешманский анализатор с али, и записал весь обмен с картой. К сожалению в программе нет декодера для карт, по крайней мере в моей версии. Придётся ручками анализировать. Но это хотя бы позволит проверить соответствие диаграмме, которую любезно привёл @adnega.

Я бы в дополнение еще отметил интересный факт.

Если включать на "холодную", то это происходит всегда. Если же подключаться отладчиком, то первый раз - долго, а потом можно долго ресетить контроллер, прежде чем такая ситуация возникнет вновь.

Кстати.... у меня нет резисторов на линиях, но есть внутренние подтяжки, а кабель короткий - 7 см. Так можно делать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

30 минут назад, MementoMori сказал:

Так можно делать?

Мы обычно ставим 47 Ом. Но я не стесняюсь поглядеть осциллографом (именно им) форму сигналов на линии. Иногда бывает звон, если драйверы могут выдать хороший ток в линию, и он может вызвать срабатывание TVS-защиты, если таковая имеется. И вот вам будет глюк - бит считан/передан неверно. И у меня такая ситуация была. Поэтому здесь вам нужно решать проблему комплексно: сначал убедиться, что железо рабочее. А потом уже разбираться с кодом.

30 минут назад, MementoMori сказал:

но есть внутренние подтяжки,

Мы ставим внешние. С давних пор не делаем ставки на внутренние, т.к. они от микроконтроллера к микроконтроллеру меняются. Плюс они часто высокоомные, что не всегда подходит под условия.

30 минут назад, MementoMori сказал:

Если включать на "холодную", то это происходит всегда.

Ну как вы понимаете, здесь мильон причин может приводить к такому поведению: ошибка в периферии (читайте errata), ошибка в коде (изучайте код и мануал на микроконтроллер).

 

З.Ы. Именно по этому драйвера периферии выгодно писать самому. В своём коде всегда проще разобраться, а занимаясь написанием, вычитываешь даташиты, мануалы, ерраты, и прочую документацию до дыр. И становишь автоматически профессионалом, да ещё и конкрурентноспособным))

 

З.Ы.Ы. В общем, вряд ли вам можно вот так просто помочь. Толлько если у кого-то не было точно такой же ситуации с кубом. Берите в руки осциллограф, анализатор, доку и решайте проблему))

Изменено пользователем MrBearManul

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

На CMD есть внешняя подтяжка?

 

1 hour ago, MementoMori said:

Кстати.... у меня нет резисторов на линиях, но есть внутренние подтяжки, а кабель короткий - 7 см. Так можно делать?

 

 

Конденсатор по питанию в конце кабеля рядом с картой есть?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

@MementoMori, приведите, пожалуйста, схему подключения вашей карты, раз мы уж взялись за неё.

Изменено пользователем MrBearManul

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 minutes ago, MrBearManul said:

@MementoMori, приведите, пожалуйста, схему подключения вашей карты, раз мы уж взялись за неё.

 

Спасибо. Вечером доберусь до дома. Приведу схему, трассировку, даже кабель и плату разъёма сфоткаю. 

42 minutes ago, _4afc_ said:

На CMD есть внешняя подтяжка?

Нет. А эта линия наиболее критична? 

У меня платка китайская для 3д принтера, на ней 4 линии, конденсатор, резисторов нет. Подключеная к контроллеру 3д принтера она работает. 

Ладно, остальная информация вечером. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 минут назад, MementoMori сказал:

У меня платка китайская для 3д принтера, на ней 4 линии, конденсатор, резисторов нет.

Ах... делайте всё по документации) Это наиболее выгодная стратегия: потратив пару часов, потом за пять минут заведёте) Извините, что повторяюсь неоднократно, но говорю опять же по собственному опыту.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 hours ago, MementoMori said:

Нет. А эта линия наиболее критична? 

 

Она может работать в режиме открытого коллектора и тогда без резистора не работать.

Начиная с некоторого времени некоторые карточки стали требовать этот резистор, хотя раньше и так заводились...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Друзья, спасибо за советы, но хочу напомнить - проблема именно с инициализацией. Чтение идёт нормально. Как мне кажется, если бы были проблемы с железом, то это отражалось бы на всех этапах работы. Если я не прав - поправьте. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...