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

[Rozwiązano] Dlaczego [I2C] odczyt rejestru MSR wyrzuca błąd HardFault?

sawitar 15 Gru 2020 14:14 489 7
REKLAMA
  • #1 19115815
    sawitar
    Poziom 18  
    Posty: 226
    Pomógł: 20
    Ocena: 19
    Próbuje odczytać rejestr MSR w module I2C instancja 0.
    Base addres 0x4006600
    Rejestr MSR ma offset 0x14
    Przy próbie odczytu dostaje HardFault
    Procesor to S32K116

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Jakieś sugestie co robię źle?[/code]
  • REKLAMA
  • REKLAMA
  • REKLAMA
  • #4 19115969
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    W dokumentacji ten rejestr jest opisany jako "write 1 to clear", nie ma info o tym że można go odczytywać, a nad rozpiską rejestrów od I2C jest - "Writing a Read-Only (RO) register or reading a Write-Only (WO) register can cause bus errors". Spróbuj odczytać np. rejestr MCR, który jest w tabelce jako RW. Inną przyczyną potencjalnych problemów może być to, że zanim zaczniesz cokolwiek robić z I2C0, to trzeba mu gdzieś włączyć zegar (PCC_LPI2C0), ale tu tylko hipotetyzuję (w sensie tego czy brak zegara może powodować fault, bo że zapis się nie uda to akurat inna sprawa, ale jeszcze niekoniecznie błąd krytyczny).
  • REKLAMA
  • #5 19115975
    sawitar
    Poziom 18  
    Posty: 226
    Pomógł: 20
    Ocena: 19
    MCR to samo.

    Też właśnie sprawdzam wątek zegara. Ale do tej pory nigdy nie spotkałem się z takim wymaganiem.


    Głupi ja:
    Cytat:
    27.5 Any bus access to a peripheral that has its clock disabled generates an error termination.
  • Pomocny post
    #6 19116002
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Posty: 13336
    Pomógł: 1712
    Ocena: 870
    Inne miejsce z manuala:

    "Modules that are disabled via their clock gate control bits in the PCC/SIM registers
    disable the associated AIPS-Lite slots. Access to any address within an unimplemented or
    disabled peripheral bridge slot results in a transfer error termination."

    Teraz pytanie, czy "error termination" oznacza faulta. No ale generalnie zegar i tak dobrze włączyć (i skonfigurować na odpowiednie źródło), wiec może akurat po tych zmianach pójdzie lepiej.
  • #7 19116438
    sawitar
    Poziom 18  
    Posty: 226
    Pomógł: 20
    Ocena: 19
    W rzeczy samej ruszyło po włączeniu zegara.
  • #8 19116440
    sawitar
    Poziom 18  
    Posty: 226
    Pomógł: 20
    Ocena: 19
    W rzeczy samej ruszyło po włączeniu zegara.

    Dodano po 57 [sekundy]:

    Wszystko ruszyło po włączeniu zegara.

Podsumowanie tematu

✨ Użytkownik próbował odczytać rejestr MSR w module I2C na procesorze S32K116, co skutkowało błędem HardFault. Po analizie problemu, zasugerowano sprawdzenie dokumentacji, która wskazuje, że rejestr MSR jest rejestrem tylko do zapisu (write-only), co może powodować błędy przy próbie odczytu. Dodatkowo, zwrócono uwagę na konieczność włączenia zegara dla modułu I2C0, co może być przyczyną problemów. Po włączeniu zegara, odczyt rejestru MSR zaczął działać poprawnie.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA