|
0 / 0 / 0
Регистрация: 10.12.2015
Сообщений: 39
|
||||||||||||||||
Глюки SD карточки - STM32F407 + SDIO-DMA21.02.2017, 15:20. Показов 9593. Ответов 17
Метки нет (Все метки)
Всем привет!
Возникла проблема в виде периодических подвисаний SD карты во время записи аудиотракта в Wav файл с помощью FatFs от чана. Тракт забирается с ADC1 через DMA. Карточка работает тоже с DMA. Пример глюков виден на аудиодорожке: <Изображение удалено> <Изображение удалено> Они не периодичны, но каждый раз возникают в одно и то же время. Во время записи это видно по светодиоду - индикатору активности работы самой SD карты и индикатору записи. За 30 минут 6 глюков: <Изображение удалено> Код: Код задачи RTOS
Подвисает тут
0
|
||||||||||||||||
| 21.02.2017, 15:20 | |
|
Ответы с готовыми решениями:
17
stm32f407+ADC+DMA. Проблема с DMA ADC->DMA->SDIO (или NAND через FSMC) без остановки в обработчике прерываний DMA на STM32F407VG, реально или нет? STm32f407 + SDIO. Не включаются SDIO_Clock |
|
0 / 0 / 0
Регистрация: 29.01.2017
Сообщений: 22
|
|
| 22.02.2017, 12:45 | |
|
Попробуйте после f_write() выполнить f_trunc()
0
|
|
|
0 / 0 / 0
Регистрация: 10.12.2015
Сообщений: 39
|
||
| 22.02.2017, 23:12 | ||
0
|
||
|
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 553
|
||
| 23.02.2017, 00:31 | ||
|
У SD карточек обычно есть внутренний буфер. Когда что-то пихается карте на запись, она складывает все в этот буфер, а потом пишет уже непосредственно во флеш (programming state). И бывают такие моменты когда карта немного "тупит" при очередной записи (пишет буфер там или еще делает какую важную для нее штуку).
Если верить фразе
Рекомендации из разряда шаманства: попробовать другие карты (других производителей/объемов). Рекомендации из общего: сделать двойной буфер (один пишется на карту, другой в это время заполняется из АЦП).
0
|
||
|
0 / 0 / 0
Регистрация: 10.12.2015
Сообщений: 39
|
|
| 23.02.2017, 02:16 | |
|
TomityWotf, спасибо за ответ!
Двойная буферизация лишь убрала шумы, но появились "выпадания" во времени. И я вот что заметил... Если файл пишется в разных областях карточки (не поверх старого файла, а в новых с другим именем) то глюки уже в разных местах... Означает ли это проблемы исключительно со стороны карты памяти?
0
|
|
|
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 553
|
||
| 23.02.2017, 04:22 | ||
|
Из вышеописанных симптомов следует, что скорее всего "тупняки" самой карты тут не причем.
Посмотрев более внимательно в код (гыгы, надо сразу было бы), вижу фразу:
0
|
||
|
0 / 0 / 0
Регистрация: 10.12.2015
Сообщений: 39
|
||
| 23.02.2017, 10:50 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 29.01.2017
Сообщений: 22
|
|
| 23.02.2017, 16:44 | |
|
Вообще, везде рекомендуют писать по 512 байт, или кратно. И кластер тут ни причем. И я бы запись делал таким образом:
while (f_write(&file_audyo,&ADC1_DATA[0],ADC1_DATASIZE, &test) != FR_OK) continue;
0
|
|
|
1 / 1 / 0
Регистрация: 06.12.2016
Сообщений: 553
|
|||
| 23.02.2017, 18:45 | |||
ЗЫ: сам юзаю немного подправленную DOSFS от zws (хотя надо очень редко), по возможностям ей далеко до FatFs, но работает. Если есть время, можно побаловаться и впилить вместо fatfs какую-нибудь другую либу, перестанет "тормозить" - значит виновник будет найдет однозначно.
0
|
|||
|
0 / 0 / 0
Регистрация: 16.05.2015
Сообщений: 85
|
|
| 26.02.2017, 11:53 | |
|
Маюсь с аналогичной проблемой. Попробовал сымитировать действия драйвера ФС, а именно много раз читать и потом много раз писать по 32 сектора. И запись начала подтормаживать. Т.е. карта похоже "не любит" подобные действия. Т.е. похоже дело не в драйвере, а в низкоуровневых действиях (запись-чтение). Отчего она возникает-совершенно непонятно пока что. Более современный МК STM32F446 (по совету TomityWotf поставленный на плату) упростил работу с SDIO, однако проблема осталась.
upd: Решил проблему в моем приложении. Поставил f_lseek с параметром CREATE_LINKMAP, подождал пока завершится запись на карту (выход из programming state) и только после этого приступил к работе с файлом с помощью f_write. На 100 Мб файле таких явных тормозов не заметил и мне скорости хватило. Возможно кому пригодится.
0
|
|
|
0 / 0 / 0
Регистрация: 16.05.2015
Сообщений: 85
|
|
| 05.03.2017, 15:39 | |
|
Дабы не плодить темы задаю вопрос здесь. Внезапно наткнулся на следующие грабли. Записывается ровно 6 файлов хорошо и без проблем. А вот дальше файлы открываются, пишутся, успешно закрываются (судя по отладчику), но на флеш-карте их нет. И после долгой записи вижу картину вроде такой: файл1, файл2..., файл6, файл21(пустой). Количество файлов не зависит от их размера. Может кто-то на подобное натыкался? Заранее спасибо за ответ.
P.S. Отвечу себе сам. Окончания транзакции надо дожидаться в процедуре записи. Качество пало жертвой в борьбе за скорость. Почему именно 6 файлов прокатывало так и не понял(
0
|
|
|
OShyp
|
|
| 06.04.2017, 11:19 | |
|
Добрый день!
А вы не пробовали юзать этот драйвер в режиме DMA ? |
|
|
0 / 0 / 0
Регистрация: 29.11.2012
Сообщений: 396
|
||
| 06.04.2017, 11:22 | ||
|
название заголовка Вам ответ - " Глюки SD карточки - STM32F407 + SDIO-DMA "
0
|
||
|
OShyp
|
|
| 06.04.2017, 12:02 | |
|
Извините ))) проглядел.
А первое, что пришло в голову - поиграйтесь с приоритетами DMA, поскольку эти железки сидят на одном контроллере DMA2. И, в качестве эксперимента, уйдите ADC-ой с DMA2 на "ручное управление". я понимаю, что упадет частота оцифровки, но эффект должен пропасть. |
|
|
0 / 0 / 0
Регистрация: 23.05.2012
Сообщений: 214
|
|
| 06.04.2017, 12:32 | |
|
Изучал аналогичную проблему.
Мои исследования выявили 2 проблемы: 1 Скорость карты. 2 Скорость процессора. Обе проблемы взаимосвязаны. Решение нашел единственное - чем выше скорость потока данных, тем больше буферы. Проблема в том, что при работе с файловой системой много накладных расходов, на обработку самой файловой системы, вот они и вызывают затык. Есть еще решение, которое и используется в большинстве систем с картами, там особенным образом выстраивается предварительно цепочка секторов для записи налету, а фиксация в файловой системе происходит после остановки и закрытия файла. Такой режим данный драйвер файловой системы не поддерживает (во всяком случаи год назад).
0
|
|
|
OShyp
|
||
| 06.04.2017, 12:54 | ||
Ежели больше, но сопоставимы - тут надо изголяться, может что и получится! А если четко больше - двойной буфер. Это чисто теоретически. Две высокоскоростные Железки, сидящие на одном DMA остаются в силе )) |
||
|
1 / 1 / 0
Регистрация: 09.02.2012
Сообщений: 693
|
|
| 06.04.2017, 13:06 | |
|
Столкнулся с аналогичной проблемой. Лаги при записи на SD карту/флешку.
Сменил 407 на 429 не помогло. Собрал следующим образом. 2 платы: 407 - собирает данные с датчиков, формирует поток данных и шлёт в UART. Вторая плата Cubieboard2 - принимает данные UART, выводит на LCD и пишет на SD\флешку.
0
|
|
|
OShyp
|
|
| 06.04.2017, 13:22 | |
|
Оно будет работать, если скорость сбора информации меньше.
В старой моей железке, собранной еще на LPC ARM7, оборудование опрашивалось по Modbus-у на 9600. Там SDC писалась еще по SPI. Двойной буфер, само собой, да еще SPI-ый FROM набирался и сбрасывался на карточку. Писались только изменения в регистрах оборудования, поэтому поток был небольшой. 12 устройств по 100 регистров с частотой опроса раз с 100мс. Так что ))) |
|
| 06.04.2017, 13:22 | |
|
Помогаю со студенческими работами здесь
18
STM32L151 + SDIO + DMA Чтение SD карты через SDIO с DMA SDIO + DMA странное поведение при ресете STM32F407 и I2S, DMA stm32f407 1-wire+DMA Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
|
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
|
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
|
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
|
|
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2.
Данный документ берёт данные из другого нетипового документа. . .
|
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача:
1. Реализовать контроль заполнения реквизита. . .
|