Elektroda.pl
Elektroda.pl
X
Arrow Multisolution Day
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

FATFS, SDIO - Szybkość zapisu karty SD

Petros 16 Lut 2016 12:55 594 4
  • #1 16 Lut 2016 12:55
    Petros
    Poziom 20  

    Witam

    Napisalem działajacą aplikacje na mikrokontroler (STM32F4)
    Aplikacja odczytuje dane z czujnikow i zapisuje wyniki na kate SD.

    Zastanawia mnie dlaczego czas zapisu na karte SD jest mocno nieregularny.
    Zazwyczaj zapis jednego bloku pamięeci trwa 2ms ale sporadycznie trwa to 30ms, bardzo rzado (1 na 1000) nawet przekracza 100ms!

    Blok jest wielkosci 4096 bajtow.
    Biblioteka FATFS, Ciągłly zapis do jednego pliku.
    DMA i SDIO.

    Dane nie są uszkodzone i kompletne na karcie SD.
    Ale jeśsli zwiekszęe pręedkość pomiaru bede mial klopoty bo karta będzie długo zapisywać

    To jest normalne zachowanie kart SD / systemu FAT ?
    Testowalem 2 karty SD 2GB i 16GB. Karta 16GB jest szybsza (20 ms na blok), karta 2 GB potrzebuje 60ms na blok

    (pomiar czasu zapisu jest wykonywany poprawnie, Timer 32bitowy rozdzielczość 0,1 ms)

    0 4
  • Arrow Multisolution Day
  • Pomocny post
    #2 16 Lut 2016 13:12
    grko
    Poziom 33  

    Specyfikacja kart SD mówi że zapis pojedynczego bloku może trwać do 250ms a wielu bloków (tak jak w Twoim przypadku) 500ms. Ja osobiście rozwiązuję to w ten sposób, że tworzę cache bloków i w systemie wielowątkowym w jednym zadaniu cyklicznie wykonuję operację flush na cache. Wtedy większość operacji na pliku nie blokuje programu.

    FATFS takiego mechanizmu nie ma więc trzeba coś takiego dorobić. Moja implementacja ext2/3/4 ma buforowanie bloków. Niestety wymaga to pewnej ilości pamięci RAM.

    0
  • Arrow Multisolution Day
  • #3 17 Lut 2016 12:29
    Petros
    Poziom 20  

    500ms to stasznie długo!

    Mam 2 buffory teraz po 4096B, jeden do zapisu danych a drugi do zapisu na SD (naprzemiennie)

    Aby sie zabezpieczyć na 500ms potrzebuje 60kB Ramu a tyle nie mogę poświęcić.

    Co ta karta robi przez 500ms, skoro normalnie zapis trwa zazyczaj 2ms ?!

    Może są jakieś specialne karty które robią to szybciej?

    0
  • #4 17 Lut 2016 12:35
    grko
    Poziom 33  

    Cytat:

    Co ta karta robi przez 500ms, skoro normalnie zapis trwa zazyczaj 2ms ?!
    Może są jakieś specialne karty które robią to szybciej?


    1. Karta najprawdopodobniej dba o to aby zapisy były na niej równo rozłożone (wear leveling)
    2. Z moich obserwacji wynika, że są karty lepsze i gorsze. Ale wszystkie łapią co jakiś czas tego typu zwiechy. Raz się na tym przejechałem i od tamtej pory zawsze zakładam że zapis może trwać nawet 500ms.

    BTW: co takiego mierzysz, że masz 4KB danych co 60ms ?

    0
  • #5 17 Lut 2016 13:48
    vonar
    Poziom 28  

    Petros napisał:
    Aby sie zabezpieczyć na 500ms potrzebuje 60kB Ramu a tyle nie mogę poświęcić.

    Są pamięci SRAM podłączane przez (Q)SPI. Co prawda do najtańszych nie należą ($1,5-2 / 512 kbit) ale to chyba lepsze niż szukanie specjalnych kart SD.

    0