Skocz do zawartości

Elvis

Użytkownicy
  • Zawartość

    2 868
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    217

Wszystko napisane przez Elvis

  1. @virtualny Nazwa użytego sterownika jest wymieniona w pierwszym poście i jest to ST7735S. Mógłbyś podać gdzie dokładnie znalazłeś informację o "zaimplementowanej procedurze czyszczenia/wypełniania wypełnianiu obszaru" przez ten sterownik?
  2. @Wloczykij555 Błąd inicjalizacji DMA to nic nowego... Pisałem o tym samym błędzie dwa lata temu: Podczas przygotowywania kursu STM32L4 inicjalizacja DMA wyglądała poprawnie, więc jak widać błąd wrócił później. Ciekawe jak ST wykonuje testy zmian kodu, jak widać mają jeszcze sporo do poprawy
  3. Cześć @Gieneq Pisałem na szybko, więc może nieco nieprecyzyjnie się wyraziłem. Chodziło mi o sprawdzenie jak zachowuje się ADS1256, kiedy odbierasz z niego 32 bity, czyli 4 bajty w trybie DMA. Dla SPI nie ma różnicy czy to 4x8b czy 1x32b, DMA jest ważne, żeby między danymi nie było przerw. Nie mam niestety tego układu, więc nie mogę przetestować, ale ciekaw jestem jak zachowa się pin DRDY jeśli będziemy odbierać >24 bity. Kolejny test to byłoby odebranie 8 bajtów i obserwacja DRDY. Przy odrobinie szczęścia i taktowaniu ADS1256 z 8MHz oraz ustawieniu SPI na 1MHz, mogłoby
  4. To może jeszcze jeden test - czy jeśli wywołanie GPS() zastąpisz czekaniem (Delay) przez powiedzmy 200ms, to program będzie działał? Wydaje mi się, że dla krótkich komend, czyli "Z" i "W" powinien działać, natomiast dla długich "GPS_ON"/"GPS_OFF" ma prawo mieć problemy. Ale warto byłoby to sprawdzić. Bo jeśli działa dla "Z" i "W" to raczej problem nie wynika z przepełniania bufora Serial2 i może trzeba poszukać innej przyczyny.
  5. Ciekawe, też myślałem że problemem jest odczyt z serial2, ale teensy 4.0 ma niby 4 bajtowy bufor, wiec dla krótkiego komunikatu powinno działać. Ale skoro nie działa, to może problem jest gdzie indziej. Czy serial2 to sprzętowy uart, czy SoftSerial?
  6. @keram167 czy mógłbyś zrobić mały test i zamiast GPS_ON i GPS_OFF użyć krótkich napisów, np. „N”, „F”?
  7. Faktycznie, jest tam więcej przykładów. Chociaż z tego co widzę to są one przeznaczone dla innych płytek: Ale warto chociaż spróbować, może faktycznie GW1NSR4C ma pamięć zintegrowaną. Inna sprawa, to nie wiem, czy model użyty w płytkach Sipeed nie ma prędzej HyperRAM niż PSRAM. W dokumentacji jest taki fragment: Wygląda jakby typ pamięci zależał od obudowy. Więc największa szansa, że w modułach Sipeed znajdzie się pamięć HyperRam. Ale moim zdaniem jedyny sposób na sensowną zabawę GW1NSR4C to kupienie jednej z płytek ewaluacyjnych. Ten wynalazek Sipeed jest delikatn
  8. Gdzie jest ten program testujący PSRAM?
  9. Trochę to dziwne - w przypadku stm32, powiedzmy stm32f429 jest tak, że pamięć nie jest zintegrowana, ale sterownik tak. Więc po podłączeniu i skonfigurowaniu zewnętrznej pamięci jest widoczna w przestrzeni adresowej jak wewnętrzny SRAM, czy Flash. Tylko dostępy są wolniejsze - ale jeśli nie zależy na szybkości, to można w niej nawet stos umieścić, a już stertę to jak najbardziej. Niestety bez pamięci cache, używanie pamięci po SPI/QSPI jest średnio wydajne. ESP32 ma właśnie dlatego cache dla danych i instrukcji, podobnie jest z większością mikroprocesorów.
  10. Czytam sobie na szybko o tej pamięci i moim zdaniem do ściema. Tutaj jest schemat z dokumentacji układu: PSRAM jest podłączony przez IOB, czyli to pamięć zewnętrzna. To nawet pasuje do dokumentacji IPU6525E, gdzie jako przykład podają układ W955D8MBYA, czyli zwykłą pamięć Winbond-a, nic zintegrowanego. Ciężko zrozumieć tę ich dokumentację, ale moim zdaniem zintegrowany jest tylko sterownik dla 64Mb pamięci PSRAM, 64Mb pamięci hyper i 32Mb flash. Na płytce Sipeed jest tylko flash, a reszta to "błąd w tłumaczeniu" - tylko przypadkowo na korzyść producenta
  11. Edit: Chociaż może i faktycznie ta pamięć jest zintegrowana... W dokumentacji na stronie: https://alcom.eu/uploads/gOWIN-DS861-1.4.2E_GW1NSR-series-of-FPGA-Products-Datasheet.pdf jest coś takiego: Jeśli faktycznie ten układ ma 64Mb PSRAM + 64Mb HyperRAM + 32Mb Flash to super. Informacja jak używać pamięci PSRAM jest tutaj: http://cdn.gowinsemi.com.cn/IPUG525E.pdf
  12. Jak chodzi o pamięć to na pewno dostępne jest co zdefiniowano w skrypcie linkera: /* @Description Linker script for GW1NS-4C Device with 32K-Byte FLASH, 16K-Byte RAM * Set heap size, stack size and stack location according to application * requirements. * Set memory bank area and size if external memory is used. */ MEMORY { FLASH (rx) : ORIGIN = 0x0, LENGTH = 0x8000 /* 32KByte */ RAM (rwx) : ORIGIN = 0x20000000, LENGTH = 0x4000 /* 16KByte */ } Na schemacie modułu Tang Nano 4K jest widoczna zewnętrzna pamięć Flash, jest jej 32mbit-y, czyli 4MB, podłączona j
  13. @Gieneq Próbowałeś może czytać 32 bity zamiast 24 z tego czujnika? Bo gdyby to działało poprawnie, tzn. ostatnie 8 bitów byłoby nieistotne, ale można byłoby spróbować bardzo uprościć całe zadanie. Przeczytałem tylko wyrywkowo i bardzo pobieżnie dokumentację od ADS1256, ale zauważyłem kilka ciekawych informacji. Po pierwsze samplowanie 30SPS jest podawane dla zegara f=7.68MHz. To "domyślna" konfiguracja, ale nie jedyna możliwa, można używać sygnału o częstotliwości od 0.1 do 10 MHz. Jeśli podzielimy 7.68MHz przez 30kHz to wychdzi równo 256, więc można się domyślać, że tyle trwa konwer
  14. @Gieneq Przerwanie jak najbardziej, ale po a nie przed transmisją. Czyli DMA powinno wykonać odczyt, a jak skończy to generowane jest przerwanie. Konfigurując DMA w trybie circular z przerwaniem w połowie mamy sporo czasu na obsługę przerwania, więc kolejny transfer może się rozpocząc nawet podczas wykonywanie procedury obsługi przerwania od poprzedniego. A co do ilości kodu w bibliotece HAL... to delikatnie mówiąc jest mało optymalna, SPI dla Arduino jest o wiele lepiej napisane. Więc jeśli w przerwaniu dopiero konfigurujesz transfer przez SPI to musi trwać wieki. Można użyć LL, ale najl
  15. Na stronie AliExpress jest informacja o 64mb, czyli 8MB pamięci PSRAM... ale nie jestem pewien, czy to prawda. O ile kontroler pamięci brzmi sensownie, to zintegrowana pamięć wydaje się nieco zbyt piękna. Jak chodzi o flash to jest trochę zintegrowanego - podobno 256kbit, więc nie za dużo, ale na bootloader wystarczy. Dodatkowe 32mb jest na płytce, podłączone przez SPI. Po przejściach z JTAG-iem mam bardzo ograniczone zaufanie do parametrów podawanych przez tego producenta Szkoda, bo układ zapowiadał się bardzo ciekawie, ale może pojawią się inne płytki, z lepszą dokumentacją i programa
  16. @FlyingDutch Mam kilka różnych J-Linków, najwięcej używałem wersji dedykowanej dla układów Atmela, nazywało się to chyba SAM-BA, w każdym razie był to zwykły J-Link z licencją na układy Atmel. Poza tym mam kilka programatorów z licencją "edu" i jeden J-Trace Pro. Przyznam się też że raz kupiłem "klona"... i przestał działać po aktualizacji softu. Więc ogólnie jak chodzi o J-Link to mam czym testować, a klonów stanowczo nie polecam.
  17. Nie próbowałem, bo te piny na płytce Sipeed są już podłączone... i nie miałem odwagi podłączać 2 programatorów jednocześnie. Gdzieś w sieci widziałem dokumentację, gdzie im to działało jako J-Link... dziwne trochę, ale gdyby nie licencja to pewnie miałoby szansę zadziałać, w końcu FT232H w zupełności wystarcza jako JTAG. Udało mi się zaprogramować ten układ tak jak opisałeś - tworząc plik z wsadu dla FPGA oraz programu i wgrywając wszystko do pamięci flash. Niestety zajmuje to sporo czasu, więc pisanie programu byłoby mega męczące. Teraz nie mogę odszukać tej dokumentacji, powin
  18. @Gieneq Pierwsze pytanie - jakich opcji optymalizatora używasz. A ogólnie to chyba lepiej użyć DMA, a do wyzwalania odczytu zamiast przerwania zdarzeń - obsługa przerwania też zajmuje czas. Edit: z tych zdarzeń chyba muszę się wycofać Chyba nie da się tego zrobić, a szkoda, bo dla wbudowanego ADC jest to chyba najlepsza metoda na odczytywanie danych w precyzyjnie określonych odstępach czasu. Edit2: jednak za szybko napisałem - wszystko się da, a nawet jeśli pozornie nie, to jest na to obejście. Można przykładowo skonfigurować timer, żeby generował zdarzenie po zmianie pinu DDRY, a
  19. @FlyingDutch Testowałem coś podobnego, czyli tworzenie pliku z konfiguracją FPGA oraz kodu dla Cortex-M3 i wgrywanie wszystkiego do GW1NSR. To działa całkiem fajnie, ale pisanie programu jest bardzo męczące - nie ma debuggera, a po każdej zmianie programu trzeba generować cały plik z wsadem dla FPGA i całość od nowa programować. Niby tak się da, ale moim zdaniem to trochę bez sensu. Teoretycznie można wgrać wsad dla FPGA, a później programować i debugować GW1NSR jak zwykły mikrokontroler - tylko chyba płytki Sipeed tego nie obsługują co niestety bardzo obniża ich użyteczność.
  20. Nie wiem jak miałoby pomóc tutaj przerwanie od powłowy transferu. Chyba że będziesz wtedy rysował tylko w górnej części ekranu - ale to raczej mało wygodne.
  21. Jak chodzi o ten bufor - to jest o tyle dobrze, że to zmienna globalna, ale musisz uważać żeby go nie zmieniać podczas transmisji przez DMA. A ponieważ program poza rysowaniem prawie nic nie robi, więc używanie DMA to trochę sztuka dla sztuki, bo i tak trzeba czekać na zakończenie transmisji. Można co prawda dodać drugi bufor, tylko pytanie, czy to ma jakikolwiek sens? Jeśli masz SPI na 10MHz, to przesłanie całej ramki zajmuje jakieś 6,5ms, a w pętli głównej i tak masz delay na 200ms. Więc większość czasu procesor nic nie robi, oczywiście można optymalizować program, ale tutaj nie jest to
  22. CS było ewidentnym błędem, dlatego nic nie działało. Ale warto jeszcze pomyśleć co dzieje się z buforem obrazu.
  23. Nie, tutaj raczej nie chodzi o flagę zajętości DMA (robi to HAL). Ale zrozumienie dlaczego ten program nie działa to świetne ćwiczenie, więc nie będę przynudzał tłumaczeniem
  24. Szkoda, bo program raczej nie ma szans działać poprawnie, więc dziwna zawartość ekranu nie musiała oznaczać błędu sprzętowego. Jako ciekawostkę proponuję zmienić funkcję writeFullBuffer() i dodać do niej delay: DC_SET; CS_RESET; HAL_SPI_Transmit_DMA(&spi2,frameBuffer,8192); HAL_Delay(100); CS_SET;
  25. Ciekawe, czy te paski to nie efekt zmian w programie. Proponowałbym wrócić do oryginalnej wersji, tzn. bez DMA, którego użycie i tak ma mało sensu w tym przypadku.
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.