korotaev 0 25 февраля, 2021 Опубликовано 25 февраля, 2021 · Жалоба 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)? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 57 26 февраля, 2021 Опубликовано 26 февраля, 2021 · Жалоба 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В Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Allregia 9 26 февраля, 2021 Опубликовано 26 февраля, 2021 · Жалоба А размер блока при считываении одинаковый? От него скорость очень сильно зависит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
korotaev 0 1 марта, 2021 Опубликовано 1 марта, 2021 · Жалоба On 2/26/2021 at 2:44 PM, mantech said: Не знаю, на счет DMA, но даже и без него это очень маленькая скорость чтения сд карты. Смотрите как реализован драйвер сд интерфейса, либо режимы работы (может он там однобитный или вообще по spi работает). что за трансивер там такой? Эти карты на макс. скорости работают при питании 1.8В Трансивер - это и есть дополнительная плата. В Cube она так называется. В приборах этой платы нет. Для обоих приборов используется SDIO 4 бита. Размер блоков одинаковый. В режиме флэшки прибор ничего не делает дополнительно, т.е. является только флэшкой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
etoja 0 1 марта, 2021 Опубликовано 1 марта, 2021 · Жалоба У вас клок для карточек одинаковый, а клок для ядра разный. Для H он в 7/1.5=5 раз больше. Режим DMA для F не улучшит ситуацию, так как скорость обмена с ОЗУ не возрастёт до уровня H. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
korotaev 0 2 марта, 2021 Опубликовано 2 марта, 2021 (изменено) · Жалоба 19 hours ago, etoja said: У вас клок для карточек одинаковый, а клок для ядра разный. Для H он в 7/1.5=5 раз больше. Режим DMA для F не улучшит ситуацию, так как скорость обмена с ОЗУ не возрастёт до уровня H. H743 в 5 раз медленнее чем F437, а не наоборот как Вы указали! H743 - 1.5 Мбайта/сек, F437 - 7 Мбайт/сек. Изменено 2 марта, 2021 пользователем korotaev Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 57 4 марта, 2021 Опубликовано 4 марта, 2021 (изменено) · Жалоба 02.03.2021 в 15:59, korotaev сказал: H743 - 1.5 Мбайта/сек, F437 - 7 Мбайт/сек. RAW режим проверили, т.е. прямое чтение блока с карточки в буфер, без ФС, доп. драйверов и всего остального? Если результат аналогичный, при той же сд карте, равном клоке и размере блока, тут только одно, копать код драйвера SD интерфейса в 743м, и сравнивать с даташитом. Вполне может быть, что индусы забыли включить 4х битный режим или понизили множитель клока, а может вообще не ускоряли клок после инита карты... Изменено 4 марта, 2021 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
korotaev 0 5 марта, 2021 Опубликовано 5 марта, 2021 · Жалоба 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 ОС требует отформатировать уже отформатированный диск? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andreas1 1 5 марта, 2021 Опубликовано 5 марта, 2021 · Жалоба 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
korotaev 0 10 марта, 2021 Опубликовано 10 марта, 2021 (изменено) · Жалоба 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 Кеш не использую. Может для ДМА требуется использовать кеш? Думаю, что необязательно. Изменено 10 марта, 2021 пользователем korotaev Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mantech 57 10 марта, 2021 Опубликовано 10 марта, 2021 (изменено) · Жалоба 11 часов назад, korotaev сказал: Может для ДМА требуется использовать кеш? ДМА кэш не нужен, этот блок работает только с шинами и памятью. 11 часов назад, korotaev сказал: Кеш не использую Может из-за этого и тормоза? Не знаю, как в М7, но в А-серии, без кэша работает так, как будто на 30 МГц процессорная тактировка, хотя по факту 800 МГц... Изменено 10 марта, 2021 пользователем mantech Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
korotaev 0 11 марта, 2021 Опубликовано 11 марта, 2021 · Жалоба 9 hours ago, mantech said: ДМА кэш не нужен, этот блок работает только с шинами и памятью. Может из-за этого и тормоза? Не знаю, как в М7, но в А-серии, без кэша работает так, как будто на 30 МГц процессорная тактировка, хотя по факту 800 МГц... С DMA без кеш заработал. Скорости чтения, записи примерно такие же как с polling. Сейчас с ДМА без использования кеш при записи Проводником (Win10) на карточку вижу один пакет данных каждую миллисекунду. Длительность пакета примерно 50 мкс. 950 мкс свободно от обмена данными. Т.е. траффик примерно 5%. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andreas1 1 11 марта, 2021 Опубликовано 11 марта, 2021 · Жалоба 10 часов назад, mantech сказал: Может из-за этого и тормоза? Не знаю, как в М7, но в А-серии, без кэша работает так, как будто на 30 МГц процессорная тактировка, хотя по факту 800 МГц... Кеши они разные. Если отключить кеш инструкций, то проц работает примерно на частоте флеша, это 40..60МГц, если отключить кеш данных, то замедляется работа только с ОЗУ до частоты AXI, это 200МГц, общая производительность раза в полтора падает. Без стшных библиотек вообще и с транслятором уровней на 1.8В(и клок 100М) скорость чтения в пк около 20Мбайт/с с ДМА карточки и без ДМА УСБ. Это без двойной буферизации, т.е проц или читает карту, или передает данные в пк. Размер буфера 32к Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
korotaev 0 11 марта, 2021 Опубликовано 11 марта, 2021 · Жалоба 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 карты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Andreas1 1 11 марта, 2021 Опубликовано 11 марта, 2021 · Жалоба Да Без транслятора можно до 50М поднимать, переключив режим карточки. Не переключая - 25. Но скорость передачи на 50М была около 13..15мбайт. Может УСБ не в HS режиме? Или устройство композитное? При MSD+CDC у меня скорость почему-то тоже значительно падала по вине хоста. Он просто не запрашивал данные, видимо оставляя слоты для CDC Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться