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

Написать библиотеку для карты памяти micro Sd

Отчаянно разыскиваю пунктуального и ответственного программиста МК на Си. В текущий проект необходимо добавить библиотеку обеспечивающую быструю запись на карту памяти , с файловой системой FAT32 (лучше-больше). Сейчас трудится библиотека "esp32-micro-sdcard-master".  Контроллер ESP 32 на отладочной плате DEVKIT1.  IDE ПРЕСЛОВУТОЕ АРДУИНО. Что значит Быстрая? Библиотека должна успевать дописывать данные на карту памяти за 3 мсек. Размер пакетов 20 байт. Хорошо если будет реализован режим записи не SPI а Sd. 

Далее потребуется оптимизация всего кода- функции типа Serial.port Digital.Read (write),

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


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

1 hour ago, alexan300 said:

Библиотека должна успевать дописывать данные на карту памяти за 3 мсек.

Осталось убедить в этом карту :) За 3мс гарантированно можно в кэш положить, но не физически записать на карту.

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


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

28 minutes ago, aaarrr said:

Осталось убедить в этом карту :) За 3мс гарантированно можно в кэш положить, но не физически записать на карту.

В принципе можно за 3 мс записать, но труда будет стоить.
Боюсь у ТС столько денег не будет. 

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


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

"Огромная" получается скорость: 6.66 кБ/с...10 класс при правильном кеше и линейном доступе с предвыделением файла на карте справится легко.

Только что, AlexandrY сказал:

В принципе можно за 3 мс записать, но труда будет стоить.
Боюсь у ТС столько денег не будет. 

Где Вы видите проблемы со скоростью? Это кБ/с, а не МБ/с.

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


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

3 minutes ago, makc said:

"Огромная" получается скорость: 6.66 кБ/с...10 класс при правильном кеше и линейном доступе с предвыделением файла на карте справится легко.

Где Вы видите проблемы со скоростью? Это кБ/с, а не МБ/с.

Думаю TC просто еще не назвал все сопутствующие обстоятельства.  
Пока вангую - он видит спорадические задержки от десятков до сотен милисекунд и чем дальше тем больше. 
 

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


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

Александер.. не стоит рассуждать о чужих бюджетах. ок? хватит или не хватит, дело лишь меня и кандидата.  В буфер я и сам их класть горазд. а вот при переносе с буфера, процесс записи тормозит основную работу. чтение с ацп. Вообщем кто возьмется, все покажу через тим вывер, все таиминги в анализаторе. 

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


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

День прошел.. 250 просмотра. 5 ответов не по существу) попробую обозначить гонорар в 9 тр. и облегчить задачу, таким намеком; esp32 двухядерный..

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


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

Будет интересно посмотреть на этого монстра который сумеет гарантированно поместится в 3мс для обычной карты, при том что карта может в любой момент уткнуться в свой пупок на сотни мс. А за 9к это уровень Девида Блейна не меньше. :)

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


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

Видимо мне нужно более обширно описать задачу. есть ацп с SPI ШИНОЙ которая в режиме реального времени выдает значения. CS при работе ацп, в HIGHT находиться 3 милисек. И эта задержка не вносит видимых искажений в сигнал.если его я транслирую в сериал порт (250000 бот сек).

Как только я подключаю режим записи на карту памяти, то CS увеличивается до 50-100 милисек., (в разных режимах работы SPI, разные задержки). Соответственно записанный сигнал у меня с пропуском, заметным не вооруженным глазом. Я варьировал величины буфера. но получал либо много мелких задержек, либо мало, но крупных. 

 Сейчас пришел к такому решению. подключил под работу с SD ядро 0. и очень все прилично выглядит на логическом анализаторе. идут параллельно два процесса, и чтение и запись. но возникают конфликты собак. (wdt). и как следствие постоянные ребуты. В принципе

 vTaskDelay (10);

и #define CONFIG_INT_WDT_TIMEOUT_MS 3000

как то помогают. но ведь это костыли. 

  Ну и из за моих скромных познаний в программировании. пока не получается передавать значения между void  Task1code( void * pvParameters ) и void  Task2code( void * pvParameters ),  переменных, структуированно. 

и да. карты памяти использую 10 U3. 

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


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

4 hours ago, alexan300 said:

День прошел.. 250 просмотра. 5 ответов не по существу)

Перепишите ТЗ т.к.:

1 вы не понимаете как работает SD

2 вы не озвучили в чём у вас проблема, а уже нашли решение её в виде ускорения алгоритма обращения к SD используя 2 ядра МК.

 

On 8/5/2020 at 7:49 PM, alexan300 said:

Библиотека должна успевать дописывать данные на карту памяти за 3 мсек. Размер пакетов 20 байт.

SD не умеет писать по 20 или 5 байт.

SD  воспринимает блоки по 512 байт. И имеет право писать один блок 250мС. Это происходит на границе "страниц", у меня, например  страницы - 64Мб.

 

Это означает, что если вы хотите каждые 3мС надёжно писать писать 20 байт (6667 байт в сек):

1 или иметь 2 буфера ОЗУ по 2Кбайта

2 или 1 кольцевой на 2.5Кбайта

 

On 8/5/2020 at 7:49 PM, alexan300 said:

Хорошо если будет реализован режим записи не SPI а Sd

Зачем? В этом режиме, как и в переходе на 50МГц или DDR - ничего не меняется со временем записи страницы.

Вы можете выиграть только на потреблении, если ваш МК будет засыпать между посылками по 512б.

 

On 8/5/2020 at 7:49 PM, alexan300 said:

с файловой системой FAT32 (лучше-больше)

Зачем? Но если хочется - это потребует держать в памяти один-два сектора (если диск не дефрагментирован) с таблицей зянятости, и смена этого сектора - это ещё 250мС, а значит  +5кБ к ОЗУ.

 

4 hours ago, alexan300 said:

гонорар в 9 тр.

Это $120. Т.е. если человек оценивает себя за $10 - он должен решить вашу задачу за 12 часов, с гарантированным пониманием: результат достигнут - вот деньги. А что у нас критерий достижения результата?

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


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

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

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

критерий и оценки прост и понятен. открываем записанный сигнал и смотрим в графопостроители (поверграф например). есть пропуски- плохо. нет, отлично. 

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

 

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


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

41 minutes ago, alexan300 said:

Проблема в том, что я на карте памяти, получаю записанный сигнал с искажениями, вызванными тем, что два SPI устройства мешают друг другу.

Почему вы уверены, что причина в источнике (2 SPI),  а не в приёмнике (SD) ?

 

44 minutes ago, alexan300 said:

можно например создать синус и в цикле его крутить.

 

А что будет, если сейчас крутить 2 тестовых синуса?

 

Кто неуспевает:

1 генераторы

2 библиотека записи

3 карта

?

 

 

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


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

38 minutes ago, _4afc_ said:

Почему вы уверены, что причина в источнике (2 SPI),  а не в приёмнике (SD) ?

Я и пишу о проблеме в приемнике  в карте. С чего вы решили что я грешу на ацп?

 

А что будет, если сейчас крутить 2 тестовых синуса?

 

Кто неуспевает:

1 генераторы

2 библиотека записи

3 карта

?

откуда я знаю? стал бы я сюда обращаться имея все ответы

 

 

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


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

1 minute ago, rkit said:

В esp32 несколько SPI. Нет нужды вешать ацп и карту на одну шину.

гениально ! ) я и повесил их на разные. но крутяться они у меня в одном лупе

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


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

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

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

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

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

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

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

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

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

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