Jump to content
    

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

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

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

Share this post


Link to post
Share on other sites

1 hour ago, alexan300 said:

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

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

Share this post


Link to post
Share on other sites

28 minutes ago, aaarrr said:

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

3 minutes ago, makc said:

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Видимо мне нужно более обширно описать задачу. есть ацп с 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. 

Share this post


Link to post
Share on other sites

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 часов, с гарантированным пониманием: результат достигнут - вот деньги. А что у нас критерий достижения результата?

Share this post


Link to post
Share on other sites

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

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

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

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

 

Share this post


Link to post
Share on other sites

41 minutes ago, alexan300 said:

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

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

 

44 minutes ago, alexan300 said:

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

 

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

 

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

1 генераторы

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

3 карта

?

 

 

Share this post


Link to post
Share on other sites

38 minutes ago, _4afc_ said:

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

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

 

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

 

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

1 генераторы

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

3 карта

?

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

 

 

Share this post


Link to post
Share on other sites

1 minute ago, rkit said:

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji 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.

×
×
  • Create New...