Стальной

Скоростная запись на SD карту

11 posts in this topic

Всем доброго времени суток.

Общая задача такова - надо снимать сигнал (осциллограмму) с полосой до 400 кГц и временем записи 5 минут. Результат должен быть куда-то сохранен, чтобы потом была возможность сбросить цифровые данные на комп. 

Нужен совет по одному (пока) вопросу. Я хочу писать бинарные данные напрямую на SD-карту. Минимальная частота дискретизации 800 кГц. Разрешение АЦП можно взять 8 бит. Как вы думаете, успеет ли флешка скушать данные? 

Шаблон кода создаю кубом с использованием HAL, тестирую на камне 407VET6. При записи планирую использовать буфер, куда загоняю массив данных, чтобы писать не по одной выборке, а сразу пачкой.

ЗЫ Есть еще вариант. Использовать в качестве промежуточной памяти вот такое https://static.chipdip.ru/lib/435/DOC001435109.pdf  , сохранить туда, а потом уже на внешнюю карту. По идее, есть возможность соединить по FSMC. Но для меня это крайний вариант, ибо до этого не пробовал такое.

Edited by Стальной

Share this post


Link to post
Share on other sites

@Lexter а контроллер сможет на большой скорости работать? Там вроде 24 МГц допустимо, но я пока не успел испытать. 

Тогда вопрос - а как программно определить класс карты? Или контроллер это аппаратно определяет?

Share this post


Link to post
Share on other sites

Бюджетные Wi-Fi-/ Bluetooth-решения для IoT-применения

Обзор основной линейки поставок и новинок Espressif Systems – экономически выгодных SoC Wi-Fi-/ Bluetooth-чипов и модулей для IoT-применений: от простых портативных устройств до промышленных решений.

Подробнее...

Lexter    389
1 час назад, Стальной сказал:

как программно определить класс карты?

То, что написано на карточке, и даже то, что считывается из её контроллера, не гарантирует её параметры и даже объём. Учитывая большое количество подделок и фальсификата SD-карт на рынке, лучше не возлагать проверку на устройство (это может занять много времени), а сначала хорошенько протестировать карточку вручную. Это можно сделать как средствами ОС, так и специальными программами.

Share this post


Link to post
Share on other sites

@Lexter это понятно. Просто есть аппаратный механизм выбора скорости? Или работать по принципу возникла ошибка - сбросить скорость?

Share this post


Link to post
Share on other sites

Управляемый свет интернета вещей: Philips и протокол DALI 2.0

Полностью программируемые драйверы Philips Xitanium поддерживают все варианты регулировки яркости света и силы тока. Надежность системы значительно повышается при интеллектуальном мониторинге температуры светодиодного источника света. Разнообразие моделей в семействе обеспечивает максимальную гибкость в настройке рабочих параметров.

Подробнее...

Oxford    39

SD спецификацию читайте. Вся нужная служебная информация о карте есть в соотвествующих регистрах.

 

Edited by Oxford

Share this post


Link to post
Share on other sites
Lexter    389
3 часа назад, Oxford сказал:

служебная информация о карте есть в соотвествующих регистрах.

Вряд ли @Стальной будет писать работу с SD-картой с нуля. А в драйверах или фреймворках это уже реализовано. Разве что стирание перед началом записи добавит, чтобы не было пауз при приёме потока.

Share this post


Link to post
Share on other sites
BARS_    966
12 часа назад, Стальной сказал:

а контроллер сможет на большой скорости работать?

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

Edited by BARS_

Share this post


Link to post
Share on other sites

В общем получилось писать, даже с кубом. Данные прерыванием пишутся в буфер 4096 байт длиной. Как только буфер наполняется, происходит его копирование в другой и запись уже последнего на карту.

Share this post


Link to post
Share on other sites
В 22.01.2019 в 11:04, MasterElectric сказал:

Зачем ты тратишь время на копирование?

Извиняюсь, что долго отвечал. Чтобы гарантированно буфер не был перезаписан новыми данными.

 

А проблема возникла при воспроизведении данных с карты ЦАПом. Логика следующая - два буфера снова, основной и вспомогательный. Из основного ДМА кормит ЦАП (триггер - по таймеру), по прерыванию ДМА в основной буфер копируются данные из дополнительного, а дополнительный буфер заполняется новыми данными. При воспроизведении появляются артефакты.

Share this post


Link to post
Share on other sites

Your content will need to be approved by a moderator

Guest
You are commenting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoticons maximum are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By COKPOWEHEU
      Захотелось сделать устройство с минимальным потреблением. Первоначально хотел попробовать на f103, но глянул в даташит и ужаснулся: в любом режиме сна у него потребление больше, чем у AVR-ок. Ну хорошо, в standby сравнимо, но этот режим мне не подходит. Поискал аналоги, вроде бы серия L1 больше подходит для автономных устройств. Да еще там есть вкусности вроде сенсорных кнопок и управления ЖКИ (не то чтобы необходимо, но поиграться стоит).
      Собрал макетную плату с высокочастотным (8 МГц) и низкочастотным (32768) кварцами, стабилизатором, кнопками и светодиодами (из кода понятно что где висит). Запускаю RTC с пробуждением раз в секунду (в финальном устройстве просыпаться будет еще чаще) и пытаюсь увести в режим stop. Но вместо потребления в единицы микроампер получаю пол-миллиампера. Либо я какую-то периферию не отключил (да я их и не включал вроде...), либо как-то неправильно увожу в сон (вроде все по даташиту...), либо лыжи не едут.
      Вот ключевые моменты кода (остальное во вложении):
      void enable_btn(){ RCC->AHBENR |= RCC_AHBENR_GPIOBEN; GPIO_config(JBTN); //настройка на вход с минимальной скоростью, без подтяжке } void disable_all(){ GPIOA->MODER = 0xFFFFFFFF; //all to analog in GPIOB->MODER = 0xFFFFFFFF; //all to analog in GPIOC->MODER = 0xFFFFFFFF; //all to analog in GPIOD->MODER = 0xFFFFFFFF; //all to analog in GPIOA->OSPEEDR = 0; //all to low speed (наверное, неважно) GPIOB->OSPEEDR = 0; //all to low speed (наверное, неважно) GPIOC->OSPEEDR = 0; //all to low speed (наверное, неважно) GPIOD->OSPEEDR = 0; //all to low speed (наверное, неважно) GPIOA->OTYPER &=~ 0x0000FFFF; GPIOB->OTYPER &=~ 0x0000FFFF; GPIOC->OTYPER &=~ 0x0000FFFF; GPIOD->OTYPER &=~ 0x0000FFFF; RCC->AHBENR &=~ (RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN | RCC_AHBENR_GPIOCEN | RCC_AHBENR_GPIODEN); clock_MS(); } void go_sleep(){ RCC->APB1ENR |= RCC_APB1ENR_PWREN;//вкл тактирование PWR SCB->SCR |= SCB_SCR_SLEEPDEEP; //для M3 разрешаем sleepdeep PWR->CR &=~PWR_CR_PDDS;//выбираем режим Power Down Deepsleep PWR->CR &=~PWR_CR_CWUF ; //очищаем wakeup flag PWR->CR |= PWR_CR_LPSDSR; //уменьшаем voltage regulator __WFI(); } ... //когда нужно заснуть disable_all(); go_sleep(); enable_btn(); Пробовал совсем не переключаться с MSI на HSE, это влияет только на рабочий режим, во сне как было 500 мкА так и остается.
      L1_sleep.rar
    • By IgnatiusF
      Появилась надобность в микроконтрллере STM32 для проектирования устройства. И вопрос вот в чем - в программировании этих стм-ов. Прочитал несколько статей по их программированию - что вообще для этого нужно. Выяснил, что в них (во всех?) есть вшитый bootloader, который может сам прошить МК.
      То есть для этого необходимо подключить какой-либо ...to UART преобразователь, а именно TX, RX, VCC и gnd к соответсвующим ногам микроконтроллера и все? Или надо еще куда-то подавать управляющий сигнал?
      Еще вопрос по поводу бутлоадера - если он занимает 8 КБ (или по разному?), то МК с 16 КБ памяти, по сути, будет иметь 8 КБ для программ?
      Datasheet я только начинаю читать и пока еще не нашел точной информации, так что за помощь буду очень признателен
    • By oner
      Нужен программист под STM32 из Питера. Задачи: Программирование под STM32 при работе в сетях сотовой и спутниковой связи с серверами.
      Работа проектная, не исключено, что с трудоустройством. Оплата - договорная.
    • By В гостях у Slime
      Здравствуйте, мне нужна помощь с подключением дисплея WG12864 к STM32F103C8T6. А именно? Я не нашёл библиотек для него, лишь только ардуиновские. Может у кого есть своя? С STM32 опыта почти нет. Так мигал светодиодом и всё, но зато ардуину я уже знаю всё. Я перерос её и мне хочется освоить стм.
    • By rmatveev
      Друзья, мне бы хотелось как-то начать "метить" прошивки, которые я заливаю в устройства на этапе разработки.
      Когда-то давно, когда я еще кодил для МК51 и PIC я использовал несколько ячеек в начале памяти программ, куда автоматом записывал закодированную дату. Но это я делал с помощью своей утилиты - при компиляции я запускал свой батник, который во-первых формировал небольшой ассемблерный файлик с кодом даты, он уже линковался к основному коду и получалось у меня что-то типа такого:
                  ORG          0000h
                  goto         Begin
                  include      'date.src'
                  retw         __day
                  retw         __month
                  retw         __year
                  ORG          0004h
                  goto         INTERRUPT
      Файл date.src формировался моим батником, там присваивались значения макросам __day, __month и __year.
      Это ассемблер для PicMicro. Я использовал тот факт, что у него между началом пользовательского кода и единственным вектором прерывания было 4 байта, в первый байт я вставлял команду перехода на начало, а в три оставшихся байта - дату. Она была хорошо видна при считывании кода из чипа. Было очень удобно потом идентифицировать прошивку, т.к. исходники я тоже сохранял по датам. В общем, такая была доморощенная система контроля версий. Было это году в 2000-м.
      Сейчас я пользуюсь Atollic TrueStudio и MBED и тоже задумался о том, как мне помечать прошивки. Может быть есть какие-то штатные способы? Или может по старинке найти в коде место, куда зашивать дату что бы ее легко было видно при считывании прошивки в ST Link Utility?
      Спасибо заранее за любые мысли.
  • Сообщения

    • Ну как же о себе плохо...? Вот найти ужербность во враге - лучшая мотивация.  Вы убоги, милейший.  Убоги умом, а значит достойны нынешнего прозябания... 
    • Нет уж, война имеет четкое определение: Война́ — конфликт между политическими образованиями — государствами, племенами, политическими группировками и так далее, — происходящий на почве различных претензий, в форме вооружённого противоборства, военных (боевых) действий между их вооружёнными силами. ------ То есть между людьми с оружием и никак иначе!  
    • @РадиоНастройщик  на разьеме гбо rx tx на них 3,3В, питающий провод 12В 
    • К сожалению резьбомера нет, если вдруг, то проведу измерения. в отверстия с резьбой, нарезанной метчиком М1.4(М1.6) вкручиваются без проблем.
    • Вот-вот  , я всегда говорил, что сепары, это сосланные ещё при царе антисоциальные элементы, для перевоспитания работой в шахтах !
    • Вот а этом и состоит проблема Вашего, да и не только Вашего, восприятия жизни.  Не обязательно в войне за людей враг должен быть с человеческим лицом и телом.  Воюют с предрассудками, с ложным восприятием жизни, ложью, ненавистью. Воюют за людей с человеческими пороками, а не с людьми. Это сложно и долго. Но только так можно получить искомое. 
    • Как минимум в проблемном канале. У вас РГ какого номинала стоит в УМ?