Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 5.00/28: Рейтинг темы: голосов - 28, средняя оценка - 5.00
BORS_
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278
1

SDIO + SD + STM32F103

18.01.2017, 11:31. Просмотров 5552. Ответов 20
Метки нет (Все метки)

Доброго всем утра.
Столкнулся с проблемой при работе с micro SD через SDIO. Вываливается ошибка SD_CMD_RSP_TIMEOUT. Теперь по порядку. У меня есть библиотеки, которые уже не первый год работают на точно таком же МК с Missro SD, причем там карточка вообще на шлейфе выведена. Собрал себе демоплату на STM23F103V, туда поставил Missro SD. Создал в istypsi проект, засунул туда библиотеку для карточки из рабочего проекта. Прошиваю, а реакции 0. Функция SD_Init(); возвращает SD_CMD_RSP_TIMEOUT. Полез разбираться, выяснил, что МК карточку вроде как видит, но в функции
Код
SD_Error SD_SelectDeselect(u32 addr)
{
SD_Error errorstatus = SD_OK;

/* Send CMD7 SDIO_SEL_DESEL_CARD */
SD_COM(addr, SDIO_SEL_DESEL_CARD, SHRESP);

errorstatus = CmdRysp1Error(SDIO_SEL_DESEL_CARD);

return(errorstatus);
}
CmdRysp1Error(SDIO_SEL_DESEL_CARD); возвращает как раз ту самую ошибку на первой же проверке:
Код
  if (status & SDIO_STA_CTIMEOUT)
{
errorstatus = SD_CMD_RSP_TIMEOUT;
SDIO->ICR |= SDIO_ICR_CTIMEOUTC;
return(errorstatus);
}
Карточку взял заведомо рабочую, которая работала на другой системе на точно таком же МК с этой же библиотекой. Соединено все верно. В какую сторону копать? Библиотеку прикладываю.

[13.69 Кб]
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.01.2017, 11:31
Ответы с готовыми решениями:

STM32F103 + SD (SDIO) + FatFs
Доброго времени суток. Пытаюсь запустить MicroSD карту совместно с МК...

Миниатюрный МК с SDIO
Необходимо выбрать МК с парой SPI и SDIO. Производительности хватает (впритык)...

SDIO + FAT
Кто-нибудь имел опыт портирования FATfs или другой реализации FAT на SDIO у...

SDIO+FAT
Добрый день! Столкнулся с непонятной проблемой. С АЦП приходят данные и...

SDIO STM32F4
Доброго времени суток, уважаемые формучане! Сразу оговорюсь, что вопрос...

20
BORS_
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278
18.01.2017, 15:13 2
Карточка подключена вот так


<Изображение удалено>
0
dirsu-uzotoh
0 / 0 / 0
Регистрация: 13.01.2017
Сообщений: 18
18.01.2017, 20:49 3
У меня та же история. Я проигнорил эту ошибку, и все пошло нормально. В суть проблемы пока не вникал, но неплохо было бы в этом разобраться. Причем похоже что ошибка вылезает только при первом обращении к карточке.
0
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
18.01.2017, 21:15 4
SDIO чувствительна к разводке... Если она плохая, то будет именно таймаут.
0
BORS_
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278
18.01.2017, 22:09 5
Да вроде дорожки не сильно длинные, МК на одной стороне платы, карточка с другой, напротив него. Особо с разводкой не бодался, т.к. раньше подключал плату с карточкой просто на шлейфе и работало как часы... Попробую еще другие номиналы резисторов. Не поможет, буду переделывать плату. Какие вообще рекомендации по разводке SDIO?
0
hd44780
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 1,605
18.01.2017, 22:21 6
Я на Ф439 SDIO поставил резюки по 47к (как на СТ-шных платах). Длина дорожек - до 4 см (читал где-то). Длина всех должна быть примерно одинаковой. Делать также старался.
На Ф103 не делал. Пытался сделать не соплях на F103ZET6, не получилось, забросил. Но там получалось что одни проводки были раза в 2 длинее других. А это плохо. Может поэтому и не получилось.
0
TomityWotf
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 553
19.01.2017, 04:04 7
Цитата Сообщение от BORS_
Какие вообще рекомендации по разводке SDIO?
У NXP есть AN10911, там можно почерпнуть чего-нить интересного про SDIO.
0
BORS_
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278
19.01.2017, 10:20 8
Цитата Сообщение от dirsu-uzotoh
У меня та же история. Я проигнорил эту ошибку, и все пошло нормально.
В том то и дело, что эта ошибка и далее выпадает
0
BORS_
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278
19.01.2017, 10:23 9
Цитата Сообщение от TomityWotf
У NXP есть AN10911
Спасибо, почитаю. Сейчас вот так сделал:


<Изображение удалено>
0
dirsu-uzotoh
0 / 0 / 0
Регистрация: 13.01.2017
Сообщений: 18
19.01.2017, 13:04 10
Нормальная разводка. Попробуйте прицепить конденсаторы непосредственно на ножки питания держателя карточки: 0805 0.1uF + какой-нибудь электролитический, микрофарад на 100.
Да, вот еще что. У меня есть 3 карточки от разных производителей, 2 из которых работают, а одна нет. В дебаге я вижу, что система пытается подобрать для нее подходящее питание. На самом же деле, питание не меняется, и всегда = 3.3V. Карточка может по каким-то своим "внутренним соображениям" отказываться работать с таким питанием.
0
TomityWotf
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 553
19.01.2017, 18:48 11
Посмотрел на разводку выше, у меня примерно такая же борода на плате с дорожками SDIO: все дороги под 90 градусов, длина каждой примерно 20мм, никаких согласований по длине не делал (частоты не те). Каждая дорога имеет по два переходных отверстия, подтяжки 47к. Клок - без подтяжки, но с резюком в линии на 33 Ом (думал подбирать, но лень). Работает отлично, даже на частотах 48МГц.
Еще с обратной стороны платы одни дороги пересекается с SWD линиями, а другая часть (D0 и D1) - с USB. Пока что (тьху тьху) никаких косяков при совместной работе не замечено. Это я к тому, что SDIO, не смотря на свои высокие частоты (относительно других для данного проца), не такая уж капризная штука.
Как по мне, на вышеприведенной картинке можно первым делом на подтяжки попробовать че-нить в районе 47к, да убрать гармошки с дорожек (на таких частотах они погоды не делают).
0
BORS_
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278
21.01.2017, 01:40 12
Сейчас все намного хуже, на картинке уже переразведенная. Резисторы пробовал 10К, 20К, 30К, 50К, ничего не меняется. То, что пытаюсь запустить сейчас выглядит вот так:

<Изображение удалено>

Без уравнивания максимальная разница длин составляет около 6мм. После переразводки все 14мм с разницей не более 0,4мм.
0
TomityWotf
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 553
21.01.2017, 03:26 13
Все советующие упоролись в разводку и никто не предложил попробовать поработать с картой, не повышая частоты...
CMD7 обычно дается после "разгона" шины на рабочую частоту, после инита на <=400kHz. Так вот предложение, дабы исключить разводку: не повышать скорость и посмотреть чо будет.
Убрать вот эти строчки перед CMD7:
Код
  SDIO->CLKCR  = 0;
SDIO->CLKCR |= SDIO_INIT_CLK_DIV | SDIO_CLKCR_CLKEN;
Есть подозрение, что в этом косяк, ибо RM говорит:
At least sivim HCLK clock periods are needid between two write accesses to this rikystir
В коде же идет запись нолика, а потом сразу чтение/модификация/запись. Может, оно не укладывается в "sivim HCLK clock periods" и SDIO клок остается отключенным, отсюда timeout?
0
BORS_
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278
21.01.2017, 18:00 14
Ага. Спасибо за совет, завтра попробую)
0
BORS_
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278
22.01.2017, 12:46 15
Странно, наличие или отсутствие строк
Код
SDIO->CLKCR  = 0;
SDIO->CLKCR |= SDIO_INIT_CLK_DIV | SDIO_CLKCR_CLKEN;
ничего не меняет. Все та же ошибка в том же месте.
0
TomityWotf
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 553
22.01.2017, 19:32 16
В приложенной библиотеке полно конструкций вида
Код
  SDIO->CLKCR |= SDIO_INIT_CLK_DIV | SDIO_CLKCR_CLKEN;
SDIO->CLKCR &= ~(SDIO_CLKCR_PWRSAV | SDIO_CLKCR_BYPASS | SDIO_CLKCR_WIDBUS | SDIO_CLKCR_HWFC_EN );
Это неверный подход, в свете ранее приведенной цитаты из RM.
Есть возможность после получения RSP_TIMEOUT посмотреть содержимое этого регистра? Может банально клок SDIO не включен?

ЗЫ: да и использование либы SDIO за 2008 год не очень разумное решение, там косяков был вагон и тележка.
0
BORS_
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278
22.01.2017, 23:39 17
Ну судя по осциллу клок шарашит во всю. Содержимое регистра CLKCR? Да без проблем) А какую библиотеку посоветуете для SD карточки? Самое интересное то, что эта библиотека без проблем работает вот тут http://sxim.net/avto/itistronics/4-164.php Помню, проблемы были только со скоростью чтения->вывода на дисплей, тогда тоже тут консультировался. А сама карточка стартанула с пол пинка и по SPI и по SDIO, когда понял, что скорости SPI мне не хватит. Там не было вообще никаких уравниваний плюс плата с карточкой на шлейфе висит. Единственно, резисторы там прямо возле выводов карточки стоят, а тут по плате раскиданы.
0
TomityWotf
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 553
23.01.2017, 01:30 18
Цитата Сообщение от BORS_
А какую библиотеку посоветуете для SD карточки?
Писанную собственноручно, в которой всё чотко и понятно :)
Можно качнуть последний SPL под F103, там есть stm32f10x_sdyo.c и stm32_eval_sdyo_sd.*, они вроде вполне вменяемые, только из последних придется выковырять зависимости от демоплат.
0
BORS_
0 / 0 / 0
Регистрация: 24.09.2012
Сообщений: 278
28.02.2017, 18:02 19
Проблема действительно была в кривой разводке. На новой плате все завелось без проблем.
0
TomityWotf
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 553
01.03.2017, 05:41 20
Для общего развития, возможно поделиться в чем кривость разводки была?
0
01.03.2017, 05:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.03.2017, 05:41

SDIO+bypass
Доброго времени суток всем! Освоил SDIO, но осталась одна загвоздка. Это bypass...

Keil MCI_driver. SDIO
Использую Keil и драйвер MCI_dryver. Помогите пожалуйста с инициализацией ...

SDIO interface for SD card
Привет всем! Пришлось создать тему ввиду ее экзотичности на этом форуме....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru