logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[stm32][C] Operacja na wskaźnikach - jakby zapętlanie.

mrh 15 Wrz 2011 14:48 2137 18
REKLAMA
  • #1 9929716
    mrh
    Poziom 18  
    Posty: 572
    Pomógł: 15
    Ocena: 13
    Od dłuższego czasu nie mogę się uporać z obsługą FSMC a szczególnie odczytem i zapisem do jednego z banków.
    Mam kod:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Podczas debuggowania gdy pochodzę do linii:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    to się dzieje tak jakby tu była pętla while po prost nie mogę iść dalej.
    Oczywiście kontroler mam skonfigurowany i wydaje mi się że dobrze.
    Moje przypuszczenia jest takie, że to może być błąd sprzętowy... bo próbowałem już różnie skonfigurować kontroler FSMC i dalej nic.
  • REKLAMA
  • #2 9929784
    nsvinc
    Poziom 35  
    Posty: 2870
    Pomógł: 262
    Ocena: 88
    To jest trochę dziwne. Próbowałeś iść debuggerem przez kod w asemblerze (nie C), i sprawdzić, na której instrukcji powstaje zonk? Sama ta linijka będzie składać się z kilku instrukcji asemblera...

    Poza tym, czemu najpierw podajesz rozkaz, potem adres? Na rozum powinno być odwrotnie (ale nie mam pewności, nie pracowałem z nand flashem+FSMC)...
  • #3 9929864
    mrh
    Poziom 18  
    Posty: 572
    Pomógł: 15
    Ocena: 13
    nsvinc napisał:
    Poza tym, czemu najpierw podajesz rozkaz, potem adres?

    Tak piszą w dokumentacji układu.

    Zrobiłem tak jak mi piałeś i ta linia z którą mam problem w asemblerze wygląda następująco:
    Kod: text
    Zaloguj się, aby zobaczyć kod

    Natomiast procesor staje w ostatniej linii gdzie jest instrukcja strb.
  • #4 9929873
    Piotr Piechota
    Poziom 22  
    Posty: 519
    Pomógł: 55
    Ocena: 85
    Witam

    Może masz błąd w konfiguracji FSMC w moim przypadku zapomniałem o zezwoleniu na zapis FSMC_BCRx->WREN i też program się zatrzymywał na strb (HardFault)
    Pokaż konfiguracje fsmc.

    Pozdrawiam
  • #5 9929954
    mrh
    Poziom 18  
    Posty: 572
    Pomógł: 15
    Ocena: 13
    Piotr Piechota napisał:
    Pokaż konfiguracje fsmc.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #6 9930096
    Piotr Piechota
    Poziom 22  
    Posty: 519
    Pomógł: 55
    Ocena: 85
    Dalej nie widać czy ustawiasz FSMC_BCR2_MBKEN jest to chyba ustawienie domyślne ale spróbuj ustawić ten bit.
    Masz załączony zegar dla FSMC?

    RCC->AHBENR |= RCC_AHBENR_FSMCEN;

    Pozdrawiam Piotr
  • REKLAMA
  • #7 9930255
    mrh
    Poziom 18  
    Posty: 572
    Pomógł: 15
    Ocena: 13
    Piotr Piechota napisał:
    FSMC_BCR2_MBKEN

    Rejestr BCR2 jest tylko jak chcę obsłużyć pamięć NOR lub SRAM.
    Patrz RM0008.
  • #8 9930273
    Piotr Piechota
    Poziom 22  
    Posty: 519
    Pomógł: 55
    Ocena: 85
    Na 90% to błędna konfiguracja FSMC. Co dokładnie obsługujesz?
    Nie wiem czy źle skonfigurowanie GPIO nie może powodować HardFaul'a
  • REKLAMA
  • #9 9930293
    mrh
    Poziom 18  
    Posty: 572
    Pomógł: 15
    Ocena: 13
    Piotr Piechota napisał:
    Co dokładnie obsługujesz?

    Pamięć NAND - K9F1G08U0B.
    Na innym uC ta konfiguracja działa normalnie.
  • #10 9931871
    Konto nie istnieje
    Konto nie istnieje  
  • #11 9931909
    nsvinc
    Poziom 35  
    Posty: 2870
    Pomógł: 262
    Ocena: 88
    albertb napisał:
    To po co ten wątek?

    Aby był fun i impreza ;] ;]

    Piotr Piechota napisał:
    Nie wiem czy źle skonfigurowanie GPIO nie może powodować HardFault'a

    Nie, nie może. Źle skonfigurowane GPIO przy wykorzystaniu FSMC po prostu będzie uniemożliwiać/przekłamywać komunikację z zewn scalakiem...
  • #12 9932146
    mrh
    Poziom 18  
    Posty: 572
    Pomógł: 15
    Ocena: 13
    albertb napisał:
    To po co ten wątek?

    Bo na tym układzie co ma działać... to nie działa.

    GPIO sprawdziłem już parę razy i jest dobre... to raczej nie to.
  • #13 9932167
    Konto nie istnieje
    Konto nie istnieje  
  • #14 9932203
    mrh
    Poziom 18  
    Posty: 572
    Pomógł: 15
    Ocena: 13
    Pamięci są te same tylko że jedna jest podłączona do STM32F1, a druga pamięć do STM32F2. Konfiguracja FSMC jest taka sama, tylko GPIO jest trochę inne - które jest na pewno dobrze skonfigurowane.
  • REKLAMA
  • #15 9936468
    mrh
    Poziom 18  
    Posty: 572
    Pomógł: 15
    Ocena: 13
    Odkryłem, że zawsze podczas używania wskaźnika do zapisu adresy:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    np. podczas próby zapisu do pamięci uC się zawiesza. Chciał się zapytać co może być przyczyną tego zjawiska ?
    A może bym wymienił pamięć na nową ?
  • #16 10610839
    soldi
    Poziom 11  
    Posty: 31
    siedziałem nad tym kilka dni.. przyczyną okazała się nowa biblioteka, w której dodano funkcję "FSMC_AsynchronousWait".. niby standardowo jest disabled, ale po włączeniu program się zawieszał na zapisywaniu do pamięci :) podczas konfiguracji w strukturze należy dodać

    FSMC_NORSRAMInitStructure.FSMC_AsynchronousWait = FSMC_AsynchronousWait_Disable;
  • #17 10610888
    Pituś Bajtuś
    Poziom 28  
    Posty: 934
    Pomógł: 137
    Ocena: 10
    soldi napisał:
    przyczyną okazała się nowa biblioteka

    Trzabyło tak od razu :D :D :D
  • #19 10611267
    soldi
    Poziom 11  
    Posty: 31
    dopiero od zeszłego tygodnia się za to brałem i dziś, po długich poszukiwaniach, sprawa wyszła na jaw

    niestety sporo bibliotek robi podobne "psikusy"

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik ma problemy z obsługą FSMC w STM32, szczególnie z odczytem i zapisem do pamięci NAND. W kodzie występuje zawieszenie programu podczas zapisu do adresu pamięci. Uczestnicy dyskusji sugerują sprawdzenie konfiguracji FSMC, w tym ustawień rejestrów oraz włączenie zegara dla FSMC. Wskazano również na możliwość błędnej konfiguracji GPIO, która może prowadzić do problemów z komunikacją. Ostatecznie, rozwiązaniem okazała się nowa biblioteka, w której funkcja "FSMC_AsynchronousWait" była włączona, co powodowało zawieszanie się programu. Użytkownik został poinstruowany, aby wyłączyć tę funkcję w konfiguracji.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA