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

STM32 - Karta SD i HardFault

kornik280 15 Sie 2015 19:10 972 13
  • #1 15 Sie 2015 19:10
    kornik280
    Poziom 18  

    Dzień dobry,

    Próbuje uruchmomić program który zpisuje dane na kartę SD.
    Jednak od razu przy inicjalizacji zegara dostaję hardfault co może być przyczyną ?Jak do tego dojść, używam Keil

    0 13
  • #3 16 Sie 2015 10:41
    kornik280
    Poziom 18  

    Procesor to stm32f103RB, moja płytka to tylko procesor + stabilizator napięcia.
    Ten problem się pojawia zaraz po wejściu do pierwszej linijki inicjalizującej zegar.
    Ponadto w debugerze pisze mi "Cannot access memory"

    0
  • Pomocny post
    #4 16 Sie 2015 12:14
    nsvinc
    Poziom 35  

    piotrva napisał:
    Hard Fault może oznaczać włączenie przerwania do którego nie napisano obsługi.

    Mylisz się. Standardowa rozbiegówka definiuje "słabe" handlery przerwań zawierające puste nieskonczone pętle. To nie ma nic wspolnego z hardfault'em.
    Hardfault leci generalnie na 1) dostęp do nieistniejącej pamięci, 2) nierozpoznaną instrukcję rdzenia, 3) nadużycie magistral wewnętrznych (np. niewyrównany zapis wielobajtowy nieobsługiwany na danej magistrali/architekturze)

    kornik280 napisał:
    Ten problem się pojawia zaraz po wejściu do pierwszej linijki inicjalizującej zegar.

    To nie inicjalizuj zegara. Sprawdź co robi procek jeśli nie dotkniesz jakichkolwiek SFRów, spróbuj go zapuścić na kodzie typu

    Kod: C
    Zaloguj się, aby zobaczyć kod


    i sprawdź spod debuggera czy cntr po prostu sobie rośnie...

    piotrva prosił o kod, nie pokazałeś go. Ja też proszę o kod. Bez kodu to tylko Wróżbita Maciej da radę ci pomóc.
    Mi wygląda na to, że nie panujesz nad tym co robi kompilator, albo masz błędy w pliku nagłówkowym procesora.

    Hardfault nie dzieje się bez przyczyny. Aby znać przyczynę, zastosuj:
    Kod: C
    Zaloguj się, aby zobaczyć kod

    Jak sie rdzeń wywróci, to spod debuggera oglądasz sobie zawartosc hardFauldDump, i dowiadujesz się, gdzie się wywrócił, i dlaczego...

    1
  • #6 16 Sie 2015 16:03
    kornik280
    Poziom 18  

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Jak zkomentowałem fragment od "p=Info" do "while(1)" to nic się nie wiesza , czyli ten fragment kodu jest odpowiedzialny za zwis.

    Ta funkcja void hardFaultHandlerC(u32 *stack) to jest uchwyt do przerwania czy to jest funkcja którą muszę gdzieś wywyołać?

    0
  • #9 17 Sie 2015 15:54
    nsvinc
    Poziom 35  

    kornik280 napisał:
    Ta funkcja void hardFaultHandlerC(u32 *stack) to jest uchwyt do przerwania czy to jest funkcja którą muszę gdzieś wywyołać?

    Ta funkcja to jest tylko funkcja, uchwyt to ta funkcja nizej napisana w asmie...

    0
  • #10 17 Sie 2015 20:18
    kornik280
    Poziom 18  

    Mam dalszy problem z obsługą karty SD .
    Myślę ,że nie będę zakładał kolejnego wątku
    Funkcja disk_read nie zwraca mi RES_OK:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Ciało funkcji:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    drv=0,count=1,sector=0 Niestety warunek:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    jest nie spełniony dlatego count nie ustawia się na 0 i efekt funkcji jest taki że dostaje RES_ERROR
    Sprawdziłem pod warunki: send_cmd(CMD17, sector) daje 4 a rcvr_datablock(buff, 512) daje 0

    0
  • #11 17 Sie 2015 20:53
    piotrva
    Moderator na urlopie...

    Kiedyś miałem ten sam problem - w driverach od ST był błąd z rozmiarem sektora.
    Gdzieś na elektrodzie publikowałem o tym informacje - w tej chwili nie pamiętam co to była za 1 linijka, którą zmieniłem.
    EDIT:
    Prześledź ten wątek: https://www.elektroda.pl/rtvforum/topic2602323.html

    0
  • #12 25 Sie 2015 18:49
    kornik280
    Poziom 18  

    Ściągnąłem najnowsze biblioteki fatfs, kompiluje i mam problem z
    sdcard.h oraz atadrive.h skąd je wziąć?

    Moderowany przez piotrva:

    Poprawiam pisownię...

    0
  • #14 26 Sie 2015 20:23
    kornik280
    Poziom 18  

    Czy mam coś źle w tej funkcji?:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Gdyż wciąż mi zwraca RES_ERROR
    Warunek:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    jest nie spełniony.Sprawdzałem już dwie karty.

    0