Jump to content

    

STM32H743 и SDIO

Да хоть 32кГц, без разницы: это всего лишь частота запуска лютой скорости фронта в линию.

И что с того? Ну создали жуткие помехи в радиоэфире. Не вижу причин не работать - когда придет время снимать данные на такой низкой скорости все уже устаканится.

Единственное, что приходит на ум - выброс напряжения в момент переходного процесса, превышающий допустимый.

Share this post


Link to post
Share on other sites
...когда придет время снимать данные

...карта уже выставит их 3 раза из-за "звона" на CLK, например (те самые "пропуски" данных, отмеченные ТС).

Share this post


Link to post
Share on other sites
Зачем 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():

//..............
#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);
//.......

Edited by __inline__

Share this post


Link to post
Share on other sites

Заимплементировал SDIO в работе декодера видео + FLAC.

 

Переписал Хало-Куб для работы с картами в HIGH_SPEED Mode. У Куба 2 крайности: либо карта в Standard Mode, либо в Ultra High Speed Mode (с понижением питания до 1.8V).

Мне же Ultra HS Mode не подошёл, так как питание карты 3.3V.

Поэтому сделал поддержку High Speed Mode (3.3V).

 

Частотомер выдал на SDIO CLK 48,6 МГц (вместо теоретических 50 МГц).

 

Подробнее тут: http://vrtp.ru/index.php?showtopic=29688&st=150

Там же исходники (High Speed Mode отключен, включить его - раскомментарить последнюю строку в main.c).

 

Видео в действии: http://www.youtube.com/watch?v=s2a_DqrIFaw

Edited by __inline__

Share this post


Link to post
Share on other sites

Ферритовую бусину на SDIO CLK убрал на печатной плате (4-слойка, 2 внутренних полигона Vcc и GND), все карты работают. Даже на 48 МГц (HSM)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this