Wpis z mikrobloga

Mirki, mam prośbę o pomoc dla osób biegłych w #stm32 ( ͡° ͜ʖ ͡°)
Pacjent to STM32F746 na własnej elektronice i przepisuję na nim obsługę ADC po SPI z HALa na biblioteki LL. Problem jest taki, że zawsze odczytuje z rejestru 255, chociaż na oscylogramie widzę co innego. No i na HALu to po prostu działało, a chcę przejść na LL aby dobrze poznać peryferia i znacznie przyspieszyć program.
Ma ktoś z Was doświadczenie w temacie? Przejrzałem tony przykładów, analogicznych problemów i po naprawdę wielu próbach wszystkiego rozkładam już ręce.

Kod i ciut więcej informacji znajdziecie w wątku który założyłem na community.st.com:
https://community.st.com/s/question/0D53W00000Y3jpzSAB/moving-from-hal-working-to-ll-issue-spi-receives-always-255

Będę wdzięczny za info co może być problemem albo co przetestować :D

#elektronika #mikrokontrolery #embedded
Visher - Mirki, mam prośbę o pomoc dla osób biegłych w #stm32 ( ͡° ͜ʖ ͡°)
Pacjent to...

źródło: comment_1612636764RCEbwvzxG39SHnU2oWw5ru.jpg

Pobierz
  • 13
@Visher: rozwiązane! odpowiedź w wątku na community.st.com, ale tl;dr: w którymś momencie po sklonowaniu projektu i wygenerowania kodu na nowo, CubeMX przestawił mi pin MISO do domyślnego pinu. Nie ma opcji żebym to sam zrobić, bo nie kombinowałem z przypisaniami od projektu elektroniki >.>
@Analityk: niestety jestem jeszcze chyba na za wczesnym etapie, aby zrozumieć w praktyce, do czego mogą być potrzebne własne skrypty linkera ( ͡° ʖ̯ ͡°)
Ale za to pochwalę się, że udało mi się dołożyć DMA do tego SPI ( ͡° ͜ʖ ͡° )*:
Trochę jitteruje i marnuje czas CSa, ale te ~3 us wynagradza możliwość odpalenia
Visher - @Analityk: niestety jestem jeszcze chyba na za wczesnym etapie, aby zrozumie...

źródło: comment_16127761906FeQ33Q28KelCNw9HdR5um.jpg

Pobierz
STM32F746


@Visher: o to Cortex M7 - ma coś takiego jak TCM, to cecha rdzenia - masz dostęp do pamięci ram w jednym takcie zegara zamiast czekać na zwolnienie magistrali AHB lub kraść takty DMA. Możesz tam umieścić swój kod/dane, żeby procek mógł działać na 100% swoich możliwości.
Ale ten kod trzeba skopiować z flash do ram i powiedzieć programowi, gdzie on jest. Do tego przyda się linker.
@Analityk: ah tak, słyszałem o tym, ale nie wiedziałem że to się za tym kryje. Na pewno będzie do rozważenia, choć przy nowej architekturze którą teraz testuję, obciążenie procesora powinno być znacznie mniejsze i może da radę na serii F4. Sporo dzięki LL zamiast HAL, ale przede wszystkim wyrzucam stos TCP/IP (LwIP) z MCU do układu W5500. F7 wybrałem aby mieć zapas na pierwszą i drugą iterację. Dzięki za info!
@Analityk: mam wąskie gardło przy przekazywaniu danych z SPI do wątku TCP albo UDP, nawet jak obskoczyłem wszystko na DMA i możliwie krótkich przerwaniach, to nie nadąża z odbieraniem ich i pakowaniem do bufora nadawczego. Blokuje się na mojej dwustronnej kolejce (2x queue z FreeRTOS). Aby przyspieszyć musiałem buforować w ISR po 32 próbki zanim poszło do kolejki, więcej nie przyspiesza. Zero copy w stosie nie pomaga. Przesyłam dane z ADC
@Analityk: a no i nie zamierzam się rzucać na głęboką wodę i pisać swoją implementację stosu ani poprawiać gotowe biblioteki (ciekawy link tutaj - najpopularniejsze liby są podobno spieprzone), chcę osiągnąć cel i bardziej interesuje mnie hardware lub Java, a embedded mnie mierzwi xD
@Visher: Może masz jakiś zegar 12MHz zamiast 300MHz?
Ja bawiłem się w przesyłanie dźwięku przez eth i 2 kanały aduio (surowe dane, 44.1ksampla na kanał po 16 bitów próbka więc w sumie to 44100s x 2kanały x 2bajty = 175kB/s leciało na żywo i procek miał jeszcze zapas 70% czasu. Ale przez eth przychodziły paczki po 1kB.
A jak masz rtos'a to pewnie małe paczki danych limitują ci szybkość komunikacji.