LINUX.ORG.RU

STM32F103 SD-card sloooow

 ,


0

1

Имеется F103 (Blue pill) с подключенным дисплеем (ILI9341 [SPI1]) в который воткнута сд-карточка [SPI2]. Отрисовка картинки с флешки происходит более 1 секнунды, а хотелось бы как-то шутсрей. На сколько я понял, больше всего тормозит процесс чтения с карточки, т.к подключение идет по SPI без DMA.

Вообщем есть вопросы:

  1. Есть ли варианты сделать SDIO интерфейс? Софтверный? Будет ли выигрыш в скорости?
  2. Есть ли готовая библиотека для работы с SD картой через DMA?
  3. Как лучше огранизовать вывод участка (320х240) большого изображения (2048х2048)?

Картинку вывожу построчно, и для каждой строки приходится делать seek

f_lseek (...)
f_read (...)

Использую FatFS GitHub

FF_USE_FASTSEEK стоит в 1, чтение сразу же нескольких строк в буфер особой скорости не добавляет. Затык именно в тормознутом SPI. Что посоветуете?


Подозреваю, что ты - абдуринщик. Ну и мучайся. SPI через DMA за час пишется…

anonymous
()
Ответ на: комментарий от anonymous

Да он уже, походу, под мухой.

anonymous
()
Ответ на: комментарий от anonymous

Да нее, мне не нужно прям 25+ фпс, просто хочется что бы небыло так раздражительно медленно.

ez7
() автор топика
Ответ на: комментарий от anonymous

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

ez7
() автор топика
Ответ на: комментарий от ez7

Он (Эдди из под анонимуса) дело пишет. У него на гитхабе неплохие примеры проектов без куба под F103. Если попросить, может даст ссылку.

Эклипс лучше заменить хотя бы на Qt Creator. Парадоксально, но для stm32 он неплох.

Лично я сторонник KDevelop, считаю что он еще намного лучше, но им надо проникнуться.

James_Holden ★★★★
()
Ответ на: комментарий от James_Holden

Рановато мне пока с хала уходить, я уже много где читал что хал не эффективен, и что лучше все пилить по харкору на регистрах, просто пока для меня это темный лес.

В эклипсе больше всего бесит переключение предствлений (c++/mx/дебагер), постоянно все виснит. И не сказать что у меня железо слабое, а оно тормозит так как будто я на пне 4 сижу. Пробовал в виме писать, но так и не нашел нормального плагина для автодополнения без использования всяких питонов.

ez7
() автор топика
Ответ на: комментарий от ez7

Рановато мне пока с хала уходить, я уже много где читал что хал не эффективен, и что лучше все пилить по харкору на регистрах, просто пока для меня это темный лес.

Это понятно, я это больше к тому, что в дальнейшем не стоит на нем застревать. STMicroelectonics делает отличное железо, но весьма странный софт.

В эклипсе больше всего бесит переключение предствлений (c++/mx/дебагер), постоянно все виснит. И не сказать что у меня железо слабое, а оно тормозит так как будто я на пне 4 сижу.

Оно же на Java, а это такая штука которая просто выжирает всю доступную память. Страшное дело. Я лично ненавижу IDE на Java из-за этого.

Пробовал в виме писать, но так и не нашел нормального плагина для автодополнения без использования всяких питонов.

Есть такая относительно неплохая штука, как PlatformIO. Это дополнение для VS Code, специально для микроконтроллеров. VS Code тоже не порхает, ибо оно на электроне, но по сравнению с эклипсом оно намного легче. Автодополнение там из коробки нормальное.

А так хорош KDevelop, он летает и там самое лучшее автодополнение, навигация по коду и подсветка. Но - надо уметь его настроить, не все въезжают и многие его бросают не поняв.

По сумме всего, для начала я бы порекомендовал PlatformIO. Единственное - там отладчик вроде платный был, хотя сейчас уже может и нет.

James_Holden ★★★★
()
Ответ на: комментарий от James_Holden

Вот за PlatformIO спс, почему то даже не слыхал. Как нибудь гляну.
А то что IDE на Java тормозят, так по моему не только IDE, они все любители пожрать оперативку. KDevelop юзал лет 10 назад, использовал как редактор для PHP, мне он нравился, красивый, легкий. А настраивать его сильно геморно? Там пади его с arm-none-eabi-gdb дружить надо?

ez7
() автор топика
Ответ на: комментарий от ez7

KDevelop юзал лет 10 назад, использовал как редактор для PHP, мне он нравился, красивый, легкий

Я использую сейчас и для этого тоже. Очень удобно для PHP.

А настраивать его сильно геморно?

Не сильно, но как-то многим в лом.

Там пади его с arm-none-eabi-gdb дружить надо?

Да, надо. Ну там настройки отладчика есть, надо задать что отладчик arm-none-eabi-gdb, и параметры для удаленной отладки.

Плюс надо в настройках проекта задать дефайны - для STM32 сильно актуально, а то не будет видеть правильно внутренность библиотек от STM32, и надо задать пути для include.

James_Holden ★★★★
()
Ответ на: комментарий от ez7

Основной затык с KDevelop у людей в том, что, допустим у нас проект с Makefile. Импортируем его в KDevelop. И он не подхватывает сам пути для include, дефайны, которые в Makefile прописаны, параметры компилятора.

Это надо в настройках проекта вручную вбивать. Собираться проект то будет и без этого - просто через make, но это надо для того чтобы работал его парсер - и корректно работало автодополнение, подсветка и проверка кода на лету, навигация по коду.

Если не задать - будет ругаться что #include файла такого нету, и так далее.

После других IDE люди часто ожидают, что настройки проекта в IDE и настройки сборки - это одно и то же. А в KDevelop нет, сборка идет просто через Makefile (что очень удобно), созданный вручную, а в IDE настройки надо дублировать чтобы анализ кода работал.

James_Holden ★★★★
()
Ответ на: комментарий от James_Holden

Ну в целом это ожидаемо и очень даже выполнимо. Буду на него переходить. Но от MX пока не откажусь:)

ez7
() автор топика
Ответ на: комментарий от CYB3R

По крайней мере, теперь всякие упоротые мyдераторы не смогут подряд все мои комментарии с минусами удалять, когда ужрутся!

А ТСу советую почитать-таки по-человечески даташит, RM и errata на свой МК и перестать пользоваться отстойным «индусокодом», а писать все самому.

Я потихоньку пытаюсь с F303 заниматься, но не повезло с партией с али (попались малость бракованными, SWD не работает + попадаются непонятные глюки). С USART уже разобрался, надо с USB немного повозиться (радует, что там полноценный USB, а не идиотский OTG, как у некоторых кастрированных МК).

anonymous
()
Ответ на: комментарий от James_Holden

Оно ж тянет 100500 говнокедовских либ!

Я вообще против всякого дерьма вроде культяпок и говнотыков, но, к сожалению, нет приличных IDE, написанных на чистых иксах или OpenGL! Вот и приходится мучиться с qt-creator.

Но так хочется видеть вменяемую IDE с рефакторингом, подсветкой ошибок и вообще полным (в режиме реального времени) статическим анализом кода… Да и с разделяемыми окнами, переходами по определениям/использованиям, автодополнениям всего и вся в т.ч. по инклюдам. И многая, многая, многая!..

anonymous
()
Ответ на: комментарий от ez7

Вот пример проекта, он на PlatformIO, но тут интереснее принцип как организовано. Пример привожу для того, чтобы показать как выхлоп куба нормально всунуть в проект, и не вписывать свой код прямо в его нагенерированные шизоидной структуры портянки.

https://github.com/speedcontrols/ac_sc_grinder

Обрати внимание на папку hal - внутри то что генерирует куб и обвязка, сразу для нескольких микроконтроллеров. А весь свой код снаружи, он не зависим от контроллера. В таком проекте при сборке просто выбираешь, под какой контроллер собирать - и получается под него прошивка.

James_Holden ★★★★
()
Ответ на: комментарий от anonymous

Оно ж тянет 100500 говнокедовских либ!

Да. Я и так на кедах 17 лет, мне уже по боку.

нет приличных IDE, написанных на чистых иксах или OpenGL! Вот и приходится мучиться с qt-creator.

Это да.

Но так хочется видеть вменяемую IDE с рефакторингом, подсветкой ошибок и вообще полным (в режиме реального времени) статическим анализом кода… Да и с разделяемыми окнами, переходами по определениям/использованиям, автодополнениям всего и вся в т.ч. по инклюдам.

Все это в KDevelop есть, но - кеды.

James_Holden ★★★★
()
Ответ на: комментарий от anonymous

Я потихоньку пытаюсь с F303 заниматься

Это интересно, я с ним давно мучаюсь. Не знаю, или мне так повезло или опять куб накубил - не работает нормально снюхивание USB с компом. Пару раз из десяти только может инициализироваться.

Это при том, что у меня STM32F3discovery официальная.

Я тут в перспективе планирую F429 с экраном и тачскрином без куба завести - вот это поинтереснее будет. Пока только мигалку сделал. А там еще SRAM чип, который надо подрубать каким-то шаманским образом.

James_Holden ★★★★
()
Последнее исправление: James_Holden (всего исправлений: 1)
  1. Нужно использовать микроконтроллер с SDIO интерфейсом. Выкидывай F103 куда подальше.
  2. Нужно использовать DMA, без него никуда.
  3. Нужно использовать RTOS, чтобы все запросы обрабатывались как надо, а так же чтобы обеспечить безопасность прерываний
SL_RU ★★★★
()
Ответ на: комментарий от SL_RU

Минусую твой третий пункт. RTOS на МК не нужна. Если ты без ОСРВ жить не можешь, то, скорей всего, тебе нужно просто купить orange pi zero!

anonymous
()
Ответ на: комментарий от ez7

я уже много где читал что хал не эффективен, и что лучше все пилить по харкору на регистра

Ну почему на регистрах? Можешь попробовать начать с юзания CMSIS + кросс-компилировать gcc, а прожигать - тулзой st-link.

CMSIS (полазь в каталоге /Libraries/) по сути состоит из небольших оберток над регистрами.

Т.е. есть, например, функция

uint16_t SPI_ReceiveData()

А состоит ее тело только из двух строк:

/* Check the parameters */
assert_param(IS_SPI_ALL_PERIPH(SPIx));
  
/* Return the data in the DR register */
return SPIx->DR;

Т.е. можно выбирать функции с довольно интуитивными именами, при этом попутно заглядывая в сорцы либы и узнавая, какие манипуляции с регистрами были проведены.

Есть, кстати, хорошая книга, которая разбирает использование CMSIS + bare metal gcc + Linux + stm32f10x - советую чекнуть

x86-
()
Ответ на: комментарий от anonymous

Сейчас на STM32 такие цены, что нужно было 2 года назад не евро покупать, а микроконтроллеры! В 8-10 раз наварился бы :(

Как говорится, знал бы прикуп…

anonymous
()
Ответ на: комментарий от x86-

Благодарю. Хорошая книжка, даже про GDB написали. Да и код у CMSIS приятный. А как быть с настройкой тактирования? В кубе (Clock Configuration) как то само все выставляет.

ez7
() автор топика
Ответ на: комментарий от anonymous

С год назад брал с алика F405 за 290 руб, сейчас в том же магазине только доставка 300 руб, и сам чип за 1200. Это прям жесть какая-то. Реально блин, евро рядом не лежало))

ez7
() автор топика
Ответ на: комментарий от ez7

Читай RM, там ничего сложного нет. По умолчанию включается HSI, но это медленно и частота плавает.

anonymous
()
Ответ на: комментарий от ez7

Придется попотеть с чем-то вроде этого:

RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  • включая вручную для необходимой периферии. В книге этот процесс довольно подробно описан
x86-
()
Ответ на: комментарий от anonymous

Не вопрос - берем smd-шный голый мк за 90 центов без привязки к борде, и паяем ее вручную! А так, что 5, что 8 баксов - копейки как по мне. Берешь на любом локальном радио-рынке - ни дня доставки

x86-
()

Алсо, ктонить осилил смордочкотыкать CLion с кубом? У мя почему-то проект под F0 генерируется, даже когда совсем другое выбрал :/

izzholtik ★★★
()
Ответ на: комментарий от x86-

Ладно, суть я уловил. Просто когда первый раз в кубе увидел настройку тактирования, слегка офигел. Из понятного там были только цифры))

ez7
() автор топика
Ответ на: комментарий от x86-

а нету F103 по 90 центов. сейчас STM8 более бакса идут… кто-то в STM сильно «прикрутил» производственные линии в рассчете на падение спроса из-за пандемии, и случился жесткий дефицит.

но, думаю, через полгода цены вернутся в норму.

NiTr0 ★★★★★
()
Ответ на: комментарий от SL_RU

да какбы SDIO не обязательно, достаточно нормального SPI для этой задачи. свои 500-1000 КБ/сек он вытянет.

NiTr0 ★★★★★
()
Ответ на: комментарий от NiTr0

а нету F103 по 90 центов. сейчас STM8 более бакса идут… кто-то в STM сильно «прикрутил» производственные линии в рассчете на падение спроса из-за пандемии, и случился жесткий дефицит.

Если бы только в st. В микрочипе и в ti половина производственной линейки вообще лысая, нет ни офсайтах, ни в маузере и ему подобных, поставку обещают на 22 год, то, что год назад по $2.5 было - сейчас магазинчики, что сохранили запасы - продают по 50.

vaddd ★☆
()
Ответ на: комментарий от NiTr0

Плюсую. Убрал FatFS и даже без DMA чтение с флешки выросло раза в 3. Вангую что это далеко не предел.

ez7
() автор топика
Ответ на: комментарий от anonymous

ога, как же. ФС с флешкой надо оставить - она в норме должна выравнивать износ и контролировать целостность данных.

aiqu6Ait ★★★★
()
Ответ на: комментарий от ez7

У visualGDB есть профайлер. Может в твоих средствах разработки тоже есть что-нибудь такое.

aiqu6Ait ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.