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

SDIO на STM32F723

Привет всем

Пытаюсь запустить SD карту на проце STM32F723.

За основу взял кубовые примеры (мутный он, этот SDIO :D). Там ещё есть SDRAM, SSD1963, QSPI, USB HS - всё пашет без хала. Т.е. на хале сейчас только SDIO.

Инит карты проходит с полпинка без проблем - тип карты, размер сектора, кол-во секторов, всё проходит идеально с полпинка.

Пытаюсь читать сектор, ошибок не даёт, но читается какой-то мусор (всегда вроде одинаковый), fatFS естественно падает на взлёте (чего тут ещё ожидать-то). Если надо, могу выложить содержимое  0 сектора настоящего (с компа) и то, что сие SDIO прочитало.

Но сигнатура 0x55AAв конце нормальная. Такое ощущение, что оно как-то не так или не туда читает.

Читаю через DMA. Пытался читать polling-функциями - столкнулся с ошибками каких-то переполнений, то там, то сям. На ST-шных форумах нашёл, что, мол, поллинг часто не успевает, используйте DMA. Конкретно у меня Transcend 10 класса, 32 гига.

Ещё советовали понижать частоту SD карты. Поставил 6 MHz, как там сказали - какие-то сектора начали читаться, но какие-то дают мусор.

Кто-то подобрал к нему ключик?

 

Спасибо.

STM32F723-SDIO.zip

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


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

13 часов назад, hd44780 сказал:

Но сигнатура 0x55AAв конце нормальная. Такое ощущение, что оно как-то не так или не туда читает.

может есть смысл поменять msb<>lsb?

"Последние два байта MBR должны содержать число 0xAA55"

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


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

1 hour ago, Jury093 said:

может есть смысл поменять msb<>lsb?

"Последние два байта MBR должны содержать число 0xAA55"

ну в смысле число 0xAA55, а байты 0x55 и 0xAA - здесь всё нормально, сравнивал даже с секторным дампом этой же карты на компе

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


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

Если включён кэш данных то нужно делать clean и invalidate  кэша после чтения сектора dma в память.  По моему при чтении с карты через, dma нужно в прерывания от dma или sdio в конце чтения вызывать cmsis функцию CleanDCache или что то похожее не помню точно как нащывается

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


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

Про кэши я в курсе, даже не включал их. Попробовал выключить принудительно - получил HardFault.

 

ST-шники в своих примерах делают 

	#if (ENABLE_SD_DMA_CACHE_MAINTENANCE == 1)
	            /*
	               the SCB_InvalidateDCache_by_Addr() requires a 32-Byte aligned address,
	               adjust the address and the D-Cache size to invalidate accordingly.
	             */
	            alignedAddr = (uint32_t)buff & ~0x1F;
	            SCB_InvalidateDCache_by_Addr((uint32_t*)alignedAddr, count*BLOCKSIZE + ((uint32_t)buff - alignedAddr));
	#endif

Это оно по-моему и есть, у меня макроса нет и код этот игнорится

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


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

Можно не искать макрос а просто в месте где удобно в прерывания после чтения или в потоке но главное перед тем как будете проверять последние 2 байта считанного сектора через dma сделать анулирование кэша SCB_InvalidateCache  иначе для процессора не видны новые записанные через dma в память данные сектора карты. Ядро видит старые данные в кэше. И его надо анулирование. 

 

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


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

Поставил себе  ENABLE_SD_DMA_CACHE_MAINTENANCE = 1 изменений не увидел. Да и последние байты у бут-сектора 0x55 и 0xAA, они всегда в порядке были

бред там в начале буфера.

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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