Цитата(aaarrr @ Jul 31 2018, 07:31)
Зачем VERY_HIGH-то? Чтобы гарантированно не работало?
Пробовал все линии и по-очереди делать в LOW. Без бусины тоже не работало, даже при CLK < 1 МГц. И это Куб изначально выставил, а не я
Цитата
...карта уже выставит их 3 раза из-за "звона" на CLK, например (те самые "пропуски" данных, отмеченные ТС).
Был бы у меня
глаз осциллограф, можно было посмотреть форму сигнала...... Соглашусь с ув.
aaarrr, ферритовая бусина как раз душит СВЧ-всплески, от которых карта может несанкционированно передёргиваться.
Это макет. Сделать короче уже трудновато, много другой периферии висит.
На релизе будет печатная плата с земляными полигонами и всё как надо. Но футпринт заложить на резистор/бусину не помешает.
Мне удалось повысить SD CLK до 48 МГц - карта работает, прикрутил FatFs (не та, то с Куб-ом идёт, а свою отлаженную версию). MP3-файл декодируется нормально.
На 96 МГц уже не работает.
Никакими командами перевода в High Speed Mode не пользовался, просто увеличил CLK до 48 МГц.
Все три карты работают.
Спрашивается, зачем нужна команда для перевода в High Speed Mode, когда она при 3,3V нормально работает на быстром клоке 48..50МГц ?
В файле stm32h7xx_hal_sd.c сделать изменения в функции HAL_SD_ConfigWideBusOperation():
CODE
//..............
#if 0
/* Check if user Clock div < Normal speed 25Mhz, no change in Clockdiv */
if(hsd->Init.ClockDiv >= SDMMC_NSpeed_CLK_DIV)
{
Init.ClockDiv = hsd->Init.ClockDiv;
}
else
{
if(hsd->SdCard.CardSpeed == CARD_ULTRA_HIGH_SPEED)
{
Init.ClockDiv = hsd->Init.ClockDiv;
}
else
{
/* No High speed SD card */
Init.ClockDiv = SDMMC_NSpeed_CLK_DIV;
}
}
#endif
Init.ClockDiv = hsd->Init.ClockDiv; //!!! снимаем ограничение на SD CLK
SDMMC_Init(hsd->Instance, Init);
//.......
Сообщение отредактировал __inline__ - Jul 31 2018, 09:31