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

STM32H743. Чтение SD карты в режиме Polling.

Два прибора. Один на базе STM32F437, другой- STM32H743. Для каждого прибора скорость обмена данными по USB каналу не менее 28 Мбайт/сек. В каждом стоят одинаковые SD карты UHS-I без трансивера.

ПО для STM32F437 с использованием SPL, STM32H743 – CubeMX v.6.1, пакет для микроконтроллера STM32Cube FW_H7 V1.8.0.

Имею для прибора на STM32H743 очень маленькую скорость чтения данных в режиме USB флэшки. Проверял так.

C приборов в режиме mass storage (Polling) читается один и тот же файл размерностью 256 Мбайт. Клок для карточек в приборах одинаковый. Средняя скорость чтения для STM32F437 примерно 7 Мбайт в секунду, для STM32H743 – всего 1.5 Мбайт в секунду.

Для многих это не новость. Есть подобные сообщения на эту тему.

Вопрос: можно ли увеличить скорость чтения для H743, если перевести обмен данными в режим DMA (iDMA)?

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


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

25.02.2021 в 11:21, korotaev сказал:

для STM32H743 – всего 1.5 Мбайт в секунду.

 

25.02.2021 в 11:21, korotaev сказал:

можно ли увеличить скорость чтения для H743, если перевести обмен данными в режим DMA

Не знаю, на счет DMA, но даже и без него это очень маленькая скорость чтения сд карты. Смотрите как реализован драйвер сд интерфейса, либо режимы работы (может он там однобитный или вообще по spi работает).

 

25.02.2021 в 11:21, korotaev сказал:

SD карты UHS-I без трансивера.

что за трансивер там такой? Эти карты на макс. скорости работают при питании 1.8В

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


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

А размер блока при считываении одинаковый? От него скорость очень сильно зависит.

 

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


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

On 2/26/2021 at 2:44 PM, mantech said:

 

Не знаю, на счет DMA, но даже и без него это очень маленькая скорость чтения сд карты. Смотрите как реализован драйвер сд интерфейса, либо режимы работы (может он там однобитный или вообще по spi работает).

 

что за трансивер там такой? Эти карты на макс. скорости работают при питании 1.8В

Трансивер - это и есть дополнительная плата. В Cube она так называется.  В приборах этой платы нет. Для обоих приборов используется SDIO 4 бита. Размер блоков одинаковый. В режиме флэшки прибор ничего не делает дополнительно, т.е. является только флэшкой. 

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


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

У вас клок для карточек одинаковый, а клок для ядра разный. Для H он в 7/1.5=5 раз больше.

Режим DMA для F не улучшит ситуацию, так как скорость обмена с ОЗУ не возрастёт до уровня H.

 

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


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

19 hours ago, etoja said:

У вас клок для карточек одинаковый, а клок для ядра разный. Для H он в 7/1.5=5 раз больше.

Режим DMA для F не улучшит ситуацию, так как скорость обмена с ОЗУ не возрастёт до уровня H.

 

H743 в 5 раз медленнее чем F437, а не наоборот как Вы указали!

H743 - 1.5 Мбайта/сек, F437 - 7 Мбайт/сек. 

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

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


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

02.03.2021 в 15:59, korotaev сказал:

H743 - 1.5 Мбайта/сек, F437 - 7 Мбайт/сек. 

RAW режим проверили, т.е. прямое чтение блока с карточки в буфер, без ФС, доп. драйверов и всего остального? Если результат аналогичный, при той же сд карте, равном клоке и размере блока, тут только одно, копать код драйвера SD интерфейса в 743м, и сравнивать с даташитом.

Вполне может быть, что индусы забыли включить 4х битный режим или понизили множитель клока, а может вообще не ускоряли клок после инита карты...

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

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


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

On 3/4/2021 at 10:48 AM, mantech said:

RAW режим проверили, т.е. прямое чтение блока с карточки в буфер, без ФС, доп. драйверов и всего остального? Если результат аналогичный, при той же сд карте, равном клоке и размере блока, тут только одно, копать код драйвера SD интерфейса в 743м, и сравнивать с даташитом.

Вполне может быть, что индусы забыли включить 4х битный режим или понизили множитель клока, а может вообще не ускоряли клок после инита карты...

 

Clock смотрю осциллографом, биты меняются по всем 4м линиям шины данных. При инициал. карты частота 30 кГц, потом выходит на нужную 37.5 МГц. Т.е. всё как надо. Всё-таки хочу перейти на DMA. Пока с DMA есть проблемы. Диск определяется, но сразу требует "форматировать диск", хотя с диском всё в порядке. C Polling диск определяется и можно записывать и читать файлы через проводник win10.

Вопрос: никто не подскажет почему с DMA ОС требует отформатировать уже отформатированный диск?

 

 

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


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

15 минут назад, korotaev сказал:

Clock смотрю осциллографом, биты меняются по всем 4м линиям шины данных. При инициал. карты частота 30 кГц, потом выходит на нужную 37.5 МГц. Т.е. всё как надо. Всё-таки хочу перейти на DMA. Пока с DMA есть проблемы. Диск определяется, но сразу требует "форматировать диск", хотя с диском всё в порядке. C Polling диск определяется и можно записывать и читать файлы через проводник win10.

Вопрос: никто не подскажет почему с DMA ОС требует отформатировать уже отформатированный диск?

 

 

Возможно проблемы с кешем. Буфер дма должен быть или в некешируемой области или перед чтением   SCB_InvalidateDCache_by_Addr и буфер выровнен на 32 байта.

Для ознакомления http://ww1.microchip.com/downloads/en/DeviceDoc/Managing-Cache-Coherency-on-Cortex-M7-Based-MCUs-DS90003195A.pdf

 

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


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

On 3/5/2021 at 1:42 PM, Andreas1 said:

Возможно проблемы с кешем. Буфер дма должен быть или в некешируемой области или перед чтением   SCB_InvalidateDCache_by_Addr и буфер выровнен на 32 байта.

Для ознакомления http://ww1.microchip.com/downloads/en/DeviceDoc/Managing-Cache-Coherency-on-Cortex-M7-Based-MCUs-DS90003195A.pdf

 

Кеш не использую. Может для ДМА требуется использовать кеш? Думаю, что необязательно.

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

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


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

11 часов назад, korotaev сказал:

Может для ДМА требуется использовать кеш?

ДМА кэш не нужен, этот блок работает только с шинами и памятью.

11 часов назад, korotaev сказал:

Кеш не использую

Может из-за этого и тормоза? Не знаю, как в М7, но в А-серии, без кэша работает так, как будто на 30 МГц процессорная тактировка, хотя по факту 800 МГц...

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

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


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

9 hours ago, mantech said:

ДМА кэш не нужен, этот блок работает только с шинами и памятью.

Может из-за этого и тормоза? Не знаю, как в М7, но в А-серии, без кэша работает так, как будто на 30 МГц процессорная тактировка, хотя по факту 800 МГц...

 

С DMA без кеш заработал. Скорости чтения, записи примерно такие же как с polling. Сейчас с ДМА без использования кеш при записи Проводником (Win10) на карточку вижу один пакет данных каждую миллисекунду. Длительность пакета примерно 50 мкс. 950 мкс свободно от обмена данными. Т.е. траффик примерно 5%.  

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


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

10 часов назад, mantech сказал:

Может из-за этого и тормоза? Не знаю, как в М7, но в А-серии, без кэша работает так, как будто на 30 МГц процессорная тактировка, хотя по факту 800 МГц...

Кеши они разные. Если отключить кеш инструкций, то проц работает примерно на частоте флеша, это 40..60МГц, если отключить кеш данных, то замедляется работа только с ОЗУ до частоты AXI, это 200МГц, общая производительность раза в полтора падает.

Без стшных библиотек вообще и с транслятором уровней на 1.8В(и клок 100М) скорость чтения в пк около 20Мбайт/с  с ДМА карточки и без ДМА УСБ. Это без двойной буферизации, т.е проц или читает карту, или передает данные в пк. Размер буфера 32к

 

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


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

19 minutes ago, Andreas1 said:

Кеши они разные. Если отключить кеш инструкций, то проц работает примерно на частоте флеша, это 40..60МГц, если отключить кеш данных, то замедляется работа только с ОЗУ до частоты AXI, это 200МГц, общая производительность раза в полтора падает.

Без стшных библиотек вообще и с транслятором уровней на 1.8В(и клок 100М) скорость чтения в пк около 20Мбайт/с  с ДМА карточки и без ДМА УСБ. Это без двойной буферизации, т.е проц или читает карту, или передает данные в пк. Размер буфера 32к

 

1. Это у Вас STM32H743?  

2. Как я писал ранее для масс сторадж на STM32F437 с SPL и БЕЗ транслятора уровня с клоком всего 37.5 МГц для SD карты я спокойно получаю 8 Мбайт/с для чтения.

3. Для STM32H743 использую CubeMx, т.к. SPL не поддерживает STM32H743. Для SD у него iDMA (наверное, аппаратный).

Разрешил Icash и Dcash. В функциях read и write для mass storage применил CleanCash и InvalidateCash с выравненными адресами как в примерах.

Скорость чтения и записи не изменились. Читаю, пишу один 300 Мбайтный файл.  Cигналы смотрю на выводах SD карты.

 

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


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

Да

Без транслятора можно до 50М поднимать, переключив режим карточки. Не переключая - 25. Но скорость передачи на 50М была около 13..15мбайт.

Может УСБ не в HS режиме? Или устройство композитное? При MSD+CDC у меня скорость почему-то тоже значительно падала по вине хоста. Он просто не запрашивал данные, видимо оставляя слоты для CDC

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


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

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

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

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

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

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

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

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

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

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