Keil uVision MDK-Lite, płyta STM32F072B-Discovery i Flash API

10

Używam MDK-Lite w wersji 5.23 z płytą „Discovery” STMicroelectronics STM32F072B-Disco i próbuję użyć przykładu Flash dostarczonego przez próbki Discovery.

Użyłem tej płyty i łańcucha narzędzi do innych przykładów i napisałem trochę pracy w SPI i GPIO. IDE działa jak mistrz. Jednak w przypadku tego konkretnego projektu mogę zbudować kod i uruchomić go, pobierając i używając przycisku resetowania. Nie mogę użyć debugera w projekcie, jak tylko użyję procedury HAL_FLASHEx_Erase (). Po uruchomieniu tej procedury IDE wyświetla okno dialogowe „Nie można uzyskać dostępu do celu. Zamykanie sesji debugowania”.

Co do tego, co warto, wiem, że nie jest to błąd programowy, ponieważ jeśli pobiorę kod, a następnie wykonam go, naciskając przycisk reset, zadziała. Użyłem tego samego debugera z płytą TI i był on również w stanie zaprogramować flash i wykonać procedury flashowania. Jestem prawie pewien, że nie usuwam części flasha, w której przechowywany jest kod, więc to nie tak.

Jeśli przekroczę tę linię w main.c

if (HAL_FLASHEx_Erase(&EraseInitStruct, &PageError) != HAL_OK)

następnie przerywa sesję debugowania. Jeśli zamiast tego wejdę do tej samej linii, a następnie przejdę przez każde z wywołań procedury usuwania pamięci flash, to zadziała i ostatecznie wyjdzie poza procedurę i będę mógł debugować resztę kodu.

netskink
źródło
Nie jestem pewien, ale może po stronie USB CMSIS-DAP nastąpiła awaria zasilania. Ta płyta ma dość złożony rozdział mocy dla zewnętrznych komponentów debugowania. Nie można uzyskać dostępu do celu, prawdopodobnie oznacza to, że połączenie (przewodem szeregowym) z DAP zostało przerwane.
Sean Houlihane
Czy mówimy o wbudowanym ST-LINK / V2 jako debuggerze?
Bence Kaulics
Jeśli możesz udostępnić obraz kodu, ktoś inny może go zweryfikować (i wykluczyć problemy ze sprzętem). Mam tylko tablicę M7 ...
Sean Houlihane
Bence Kaulics, debugger wbudowany w płytę dyskotekową STM32F072B. Jest to debugger ST-Link, a nie debugger Keil ULINK2, którym jest ST-LINK / V2. Mam jeden z tych debugerów podłączonych do USB Keil, ale łączy się z płytą za pomocą kabla wstążkowego. Używam złącza mini-USB ST-Link na płycie, a nie złącza kabla taśmowego. Płytka pobiera energię ze złącza mini-usb, a nie z osobnego zasilacza.
netskink
1
Odnośnie próbki kodu. Próbka jest dostarczana przez repotekę wykrywania z STMicro. Ścieżka projektu w repocie ST to Projekty / STM32F072B-Discovery / Examples / FLASH / FLASH_EraseProgram. Korzystam z projektu MDK-ARM w tym katalogu. Nie działa w linii 108, gdzie wykonuje HAL_FLASHEx_Erase ()
netskink

Odpowiedzi:

7

Domyślam się, że na pewnym poziomie jest to zasilacz. Zasilanie zewnętrzne lub przełączanie szyn zasilających na pokładzie.

Aby wyjaśnić scenariusz, debugowanie działa dobrze po resecie sprzętowym, ale kiedy twój cel usuwa blok flash, połączenie debugowania jest przerywane?

Debugowanie nie dba o prawidłowe działanie kodu - możesz być w stanie blokady, a zatrzymanie debugowania powinno nadal działać. Jedyną rzeczą po stronie procesora, która blokuje debugowanie, jest zablokowany dostęp AHB. Oznacza to, że problem dotyczy albo interfejsu SWD między STM32F7, a wbudowanym układem interfejsu USB-SWD (również przypuszczam, że STM32). To urządzenie ma wbudowane przełączanie szyny zasilającej, co pomieszało mnie przy pierwszym użyciu płyty.

Warto zauważyć, że wymazywanie flash zwiększy bieżące zużycie urządzenia - czy Twój zewnętrzny zasilacz spełnia swoje zadanie i czy możesz użyć alternatywy?

Edycja: W oparciu o twoją opinię, że przekroczenie tego kodu powoduje awarię debugera, podczas gdy jednoetapowe nie, myślę, że twój problem jest związany z tym pytaniem .

Przełączanie jest realizowane przy użyciu punktu przerwania (i odpytywania dla stanu zatrzymania), podczas gdy pojedynczy krok jest obsługiwany sprzętowo. To nadal nie wyjaśnia, dlaczego debugger wydaje się być zdezorientowany, ale pozwala na to, że debuger próbuje uzyskać dostęp do kodu (z pamięci flash), gdy kontroler pamięci flash jest aktywny.

W oparciu o te obserwacje zasugerowałbym, aby ustawić punkt przerwania po wymazaniu i starać się unikać uruchamiania tego scenariusza.

Sean Houlihane
źródło
Zgadza się, działa dobrze, ale kiedy kasuję blok, połączenie USB z debuggerem spada. Korzystałem z niezasilanego koncentratora USB, więc wydawało się to logiczne; jednak bezpośrednie połączenie z komputerem i użycie innego koncentratora daje ten sam rezultat.
netskink
Jeśli korzystasz z kodu podczas korzystania z Flasha, zablokujesz AHB na chwilę. Wyobrażanie sobie, że wchodzenie w ten scenariusz może być nieporządne. stackoverflow.com/questions/3445598 ma więcej.
Sean Houlihane