Elvis Napisano Marzec 26, 2022 Udostępnij Napisano Marzec 26, 2022 Od jakiegoś czasu moduły "Sipeed Tang Nano 4k" pojawiają się podczas dyskusji na forum, postanowiłem więc spróbować pobawić się wspominanym układem. FPGA działa bardzo fajnie, pod Windowsem wszystko działa w domyślnych ustawieniach, natomiast pod Linux-em jest problem z programowaniem. Na szczęście zamiast narzędzi dostarczanych przez Gowinsemi można użyć: https://github.com/trabucayre/openFPGALoader Niestety nie udało mi się jak na razie połączyć z MCU, czyli rdzeniem Cortex-M3. W narzędziach producenta można przełączyć tryb działania układu na "MCU JTAG", ale dalej jest problem. Na płytce znajdziemy klon FTDI, coś w rodzaju FT2232H, tylko jak tego użyć jako JTAG-a? Może komuś na forum udało się zaprogramować MCU w "Sipeed Tang Nano 4K"? 2
FlyingDutch Marzec 26, 2022 Udostępnij Marzec 26, 2022 Cześć @Elvis może ten link będzie przydatny: Pozdrawiam 1
Elvis Marzec 26, 2022 Autor tematu Udostępnij Marzec 26, 2022 Cześć @FlyingDutch , dzięki za podpowiedź. Niestety użycie "dedykowanej" wersji programatora niewiele zmieniło Konfiguracja FPGA działa bez problemu, ale z MCU nadal nie mogę się połączyć. W programatorze zmieniam tryb na MCU jak poniżej: Już na tym etapie jest coś dziwnego - po przełączeniu w tryb MCU nie można już łączyć się z poziomu programatora. Wcześniej mogłem bez problemu konfigurować FPGA, odczytywać identyfikator układu it. Przełączenie na MCU działa raz, a później już są błędy "Error: Devices not found". Próba wgrania przykładowego kodu z poziomu Eclipse / GMD kończy się też błędem: W sumie to nie powinno nawet dziwić. Manager urządzeń nie widzi J-Linka, więc byłoby zaskakujące gdyby GMD widział. Ciekawe jak ten układ ma działać z oryginalnym softem od SEGGERA.... ale chińskie układy wiele pewnie potrafią. Niestety nadal nie mam pomysłu jak dobrać się do tego Cortex-M3 Szkoda, bo FPGA + rdzeń mikrokontrolera daje duże możliwości. O ile działa oczywiście 1
FlyingDutch Marzec 26, 2022 Udostępnij Marzec 26, 2022 Cześć @Elvis, a jak próbujesz uruchomić polecenie Debug (F11) z "Gowin MCU Designer", to co się dzieje? Masz zdefiniowany parametry dla "Debug configuration" z menu Eclipse'a? Niestety jeszcze nie próbowałem uruchamiać CPU z "Tang Nano 4K", więc nie za bardzo mogę pomóc. Pozdrawiam
Gieneq Marzec 26, 2022 Udostępnij Marzec 26, 2022 Fajnie, że temat chwycił Patrzac na google to wygląda na to, że z polskojęzycznych strony tylko tu coś o tym piszemy.
FlyingDutch Marzec 26, 2022 Udostępnij Marzec 26, 2022 (edytowany) Hej @Elvis, powtórzyłem dokładnie czynności tak, jak Ty próbowałeś (z oryginalnym programatorem Gowin) i u mnie połączenie z MCU (JTAG) działa poprawnie - patrz zrzut ekranu: "Gowin Programmer" był uruchomiony z menu "Tools" w "Gowin EDA" (z projektem z ustawionym FPGA device). Wiec może być błędne: 1) Software "Gowin EDA"/"Gowin MCU designer"/"Programmer" w jakiejś konkretnej wersji (także dla konkretny ) ma błąd 2) Coś jest nie tak z kablem "USB C" 3) Coś jest nie tak z portem/hubem USB na twoim kompie 4) Twoja płytka "Sipeed tang Nano 4K" jest uszkodzona BTW: samo urządzenie FPGA (device) masz ustawione poprawnie na: GW1NSR-LV4CQN48PC7/16 - patrz obrazek: Pozdrawiam Edytowano Marzec 26, 2022 przez FlyingDutch update
Elvis Marzec 26, 2022 Autor tematu Udostępnij Marzec 26, 2022 @FlyingDutch A możesz spróbować jeszcze raz? Bo u mnie za pierwszym razem też działa. Ale już kolejne użycie "Program/Configure" zwraca błędy. Natomiast wgrywanie wsadu do FPGA działa poprawnie, więc nie sądzę, żeby to był problem USB/płytka. Chociaż mogę na innej sprawdzić.
FlyingDutch Marzec 26, 2022 Udostępnij Marzec 26, 2022 4 minuty temu, Elvis napisał: @FlyingDutch A możesz spróbować jeszcze raz? Bo u mnie za pierwszym razem też działa. Ale już kolejne użycie "Program/Configure" zwraca błędy. Natomiast wgrywanie wsadu do FPGA działa poprawnie, więc nie sądzę, żeby to był problem USB/płytka. Chociaż mogę na innej sprawdzić. Za drugim razem już nie działa, ale mam inny kod błędu niż u Ciebie - patrz zrzut ekranu: Pozdrawiam
Elvis Marzec 26, 2022 Autor tematu Udostępnij Marzec 26, 2022 Ja właśnie testuję na drugiej płytce Tang oraz kablu USB i efekt jest identyczny. W każdym razie jedno przełączenie w tryb MCU niby działa i to powinno wystarczyć. Ale system nie widzi J-Linka więc wgrywanie programu przez JTAG nie zadziała
FlyingDutch Maj 1, 2022 Udostępnij Maj 1, 2022 Cześć @Elvis znalazłem tutorial jak zaprogramować ARM Cortex-M3 na tej płytce (Tang Nano 4K) - podaję link: https://github.com/magicjellybeanfpga/MiniStar/tree/main/projects/Tutorials/GW1NSR Demo Jak kończy się tutorial migania diodą LED w FPGA, zaczyna się ten dotyczący programowania Cortex-M3 z płytki Tang Nano 4K. Dzisaj już nie zdążę tego przetestować, ale w najbliższych dniach na pewo to zrobie. Pozdrawiam 1
Elvis Maj 1, 2022 Autor tematu Udostępnij Maj 1, 2022 @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ść. 2
FlyingDutch Maj 3, 2022 Udostępnij Maj 3, 2022 (edytowany) Cześć, dzisiaj spróbowałem zaprogramować ARM Cortex-M3 z zestawu FPGA SoC "Sipeed Tang nano 4K". Postępowałem zgodnie z tym tutorialem: https://github.com/magicjellybeanfpga/MiniStar/tree/main/projects/Tutorials/GW1NSR Demo Jedyna różnica jest taka, że w IPCore "Hard-Core-MCU" nie aktywowałem SPI (aktywowałem tylko UART0 i GPIO) ponieważ nie zamierzałem testować SPI. Tutaj projekt FPGA IP Core "Hard_Core_MCU, który normalnie syntezujemy (uruchamiamy syntezę a potem implementację) w "Gowin EDA" powstanie wtedy plik konfiguracyjny dla układu FPGA z rozszerzeniem .fs . Potem zgodnie z tutorialem pobieramy ze strony WWW firmy Gowin - "MCU SDK for Gowin EMPU(CW1NS-4C)" : Pobrane archiwum zip rozpakowujemy : W podkatalogu D:\_CurrentProjGowin_EMPU(GW1NS-4C)_V1.1.3\Gowin_EMPU(GW1NS-4C)_V1.1.3\ref_design\MCU_RefDesign\GMD_RefDesign Będziemy mieli wiele projektów dla ARM Cortrex-M3 z płytki Tanb Nano 4K, które możemy importować i otwierać w "Gowin MCU Designer"(jest on oparty na Eclipse i jest duża szansa, że jesteś już zaznajomiony z tym IDE). Otwieramy projekt w GMD (to skrótowa nazwa IDE o którym była mowa wyżej) - patrz zrzut ekranu: Nastepnie wybieramy z menu opcje: "project"-> "Build Project" - projekt powinien się zbudować bez błędów. Po zbudowaniu projektu powstanie plik bin (poza oczywiście plikiem elf), którym możemy zaprogramować MCU ARM Cortex-M3. Programowanie jest trochę bardziej skomplikowane bo jednym programem programujemy zarówno układ FPGA jak i MCU. Uruchamiamy "Gowin Programmer" (można go wywołać z "Gowin EDA" "GDM" jak i jako osobny program. Gdy "Gowin Programmer" się otworzy - patrz zrzut ekranu: Zmieniamy opcje "SRAM Program" na "MCU mode" -> "Firmware Erase, Program, Verify" , tak jak widać na zrzucie ekranu programu. W miejscu okienka z nazwą pierwszego pliku wybieramy plik .fs który powstał po implementacji w "Gowin EDA", a wdrugim okienku (drugi plik) wybiaramy plik .bin ,który powstał w GDM po zbudowaniu projektu dla MCU ARM. Następnie klikamy na ikonie z zielonym trójkątem i zaczyna się proces programowania - patrz zrzut ekranu Proces programowania i weryfikacji trwa dość długo. Gdy się skończy możemy uruchomić nasz program w układzie FPGA. Opis pinów dla układu bierzemy z pliku "Tang4K_CortexM3_01.cst" z pojektu FPGA - tutaj ten plik: //Copyright (C)2014-2022 Gowin Semiconductor Corporation. //All rights reserved. //File Title: Physical Constraints file //GOWIN Version: 1.9.8.03 //Part Number: GW1NSR-LV4CQN48PC7/I6 //Device: GW1NSR-4C //Created Time: Tue 05 03 07:24:17 2022 //Main clock IO_LOC "sys_clk" 45; IO_PORT "sys_clk" IO_TYPE=LVCMOS33 PULL_MODE=UP; IO_LOC "reset_n" 14; IO_PORT "reset_n" IO_TYPE=LVCMOS33 PULL_MODE=UP; //UART interface IO_LOC "uart0_txd" 44; IO_PORT "uart0_txd" IO_TYPE=LVCMOS33 PULL_MODE=NONE DRIVE=8; IO_LOC "uart0_rxd" 46; IO_PORT "uart0_rxd" IO_TYPE=LVCMOS33 PULL_MODE=UP; //SPI interface //IO_LOC "nss" 31; //IO_PORT "nss" IO_TYPE=LVCMOS33 PULL_MODE=NONE DRIVE=8; //IO_LOC "sclk" 43; //IO_PORT "sclk" IO_TYPE=LVCMOS33 PULL_MODE=NONE DRIVE=8; //IO_LOC "mosi" 32; //IO_PORT "mosi" IO_TYPE=LVCMOS33 PULL_MODE=NONE DRIVE=8; //IO_LOC "miso" 34; //IO_PORT "miso" IO_TYPE=LVCMOS33 PULL_MODE=UP; //GPIOs IO_LOC "gpio[15]" 29; IO_PORT "gpio[15]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8; IO_LOC "gpio[14]" 28; IO_PORT "gpio[14]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8; IO_LOC "gpio[13]" 27; IO_PORT "gpio[13]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8; IO_LOC "gpio[12]" 23; IO_PORT "gpio[12]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8; IO_LOC "gpio[11]" 22; IO_PORT "gpio[11]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8; IO_LOC "gpio[10]" 21; IO_PORT "gpio[10]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8; IO_LOC "gpio[9]" 20; IO_PORT "gpio[9]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8; IO_LOC "gpio[8]" 19; IO_PORT "gpio[8]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8; IO_LOC "gpio[7]" 18; IO_PORT "gpio[7]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8; IO_LOC "gpio[6]" 17; IO_PORT "gpio[6]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8; IO_LOC "gpio[5]" 13; IO_PORT "gpio[5]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8; IO_LOC "gpio[4]" 16; IO_PORT "gpio[4]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8; IO_LOC "gpio[3]" 39; IO_PORT "gpio[3]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8; IO_LOC "gpio[2]" 8; IO_PORT "gpio[2]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8; IO_LOC "gpio[1]" 33; IO_PORT "gpio[1]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8; IO_LOC "gpio[0]" 35; IO_PORT "gpio[0]" IO_TYPE=LVCMOS33 PULL_MODE=UP DRIVE=8; Zamieszczam w poście oba projekty: 1. dla FPGA "Gowin EDA" 2. dla MCU z GDM Tang4K_CortexM3_01.zip gowin_empu_gw1ns4c.zip Oraz spakowane jako jedno archiwum zip: 1. plik z konfiguracją FPGA 2. Plik bin z programem dla MCU gowin_empu_gw1ns4c.zip Wnioski z uruchomienia: 1) Zasilanie płytki "Sipeedd Tang Nano 4K" przez kabel USB-C (przynajmniej w moim przypadku - slot w komputerze PC) dostarcza płytce mocy na styk. Podłączenie przejściówki USB-UART, czy po prostu podłączenie kilku pinów I/O do napięcia 3,3 V z płytki FPGA powoduje, że układu nie da się zaprogramować. 2) Wczytany program dla ARM Cortex-M3 jakoś działał, ale: a) częstotliwość zmiany stanów LED była dużo za mała (powinny zmieniać się co jedną sekundę). Z komentarza w kodzie "main.c" wynika, że była zakładana częstotliwość 25 MHz a Płytka FPGA ma 27 Mhz, czyli nieduża róznica. Wygląda na to, że zegar w układzie MCU ARM został źle zainicjowany b) UART0 cyklicznie wyrzuca komunikaty, ale nie daje się ich odczytać - wyświetla krzaki (próbowałem z różnymi prędkościami od 9600 do bodów do 115200). Wygląda na ten sam błąd co z zegarem dla GPIO - zła inicjacja zegara. Ogólnie jestem dość rozczarowany po tej pierwszej próbie, bo MCU pracuje niepoprawnie. Może dalsze próby pozwolą ustalić co jest źle. Już ustaliłem co się nie zgadzało: w pliku projektu w C dla MCU (GDM) o nazwie "system_gw1ns4c.C" jest definicja zegara dla MCU: /*---------------------------------------------------------------------------- Define clocks *----------------------------------------------------------------------------*/ #define __XTAL (160000000UL) /* Oscillator frequency */ #define __SYSTEM_CLOCK (__XTAL / 2) /* 80MHz */ /** * @} */ /** @addtogroup GW1NS4C_System_Private_Variables * @{ */ /*---------------------------------------------------------------------------- Clock Variable definitions *----------------------------------------------------------------------------*/ uint32_t SystemCoreClock = __SYSTEM_CLOCK;/*!< System Clock Frequency (Core Clock)*/ uint32_t PCLK1 = __SYSTEM_CLOCK; /*!< APB1 Clock Frequency */ uint32_t PCLK2 = __SYSTEM_CLOCK; /*!< APB2 Clock Frequency */ uint32_t HCLK = __SYSTEM_CLOCK; /*!< AHB Clock Frequency */ Z tego wynika, że zakładana częstotliwość głównego zegara miała wynosić 80 MHz (a rzeczywista była 27 Mhz). Dlatego didy migały z zadługim okresem i nie zgadzała się baudrate dla układu UART. Trzeba po prostu w projekcie FPGA dodać pętlę PLL z zegarem 80 MHz i powinno być OK. BTW: do debugowania MCU ARM Cortex-M3 z płytki "Tang Nano 4K" potrzebny jest programator/debugger "Segger J-link" (oryginalny kosztuje około 2,5 K PLN) i na taki mnie nie stać, ale planuję zakup klona z Aliexpress.com: https://pl.aliexpress.com/item/4000182310208.html?spm=a2g0o.productlist.0.0.63af593b0Ga0B4&algo_pvid=8fb8045a-dbb6-4c09-b999-35ed8872937a&algo_exp_id=8fb8045a-dbb6-4c09-b999-35ed8872937a-3&pdp_ext_f={"sku_id"%3A"10000000666299718"}&pdp_npi=1%40dis|PLN||81.18|||||%402100bddd16515831109761534e8335|10000000666299718|sea Za 81 PLN. Pozdrawiam gowin_empu_gw1ns4c.zip Edytowano Maj 3, 2022 przez FlyingDutch 1 1
FlyingDutch Maj 3, 2022 Udostępnij Maj 3, 2022 Dnia 1.05.2022 o 18:45, Elvis napisał: @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ść. Cześć @Elvis, na pinout'cie dla "Tang Nano 4K" są zaznaczone piny JTAG, czy nie można do nich podłączyć zewnętrznego debuggera JTAG i nim debugować program? Patrz ten link: Czy próbowałeś do tych pinów podłączyć zewnętrzny debuger JTAG? Pozdrawiam
Elvis Maj 3, 2022 Autor tematu Udostępnij Maj 3, 2022 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, powinno być możliwe używanie Gowin tak samo jak stm32, czyli z "normalnym" debuggerem i szybkim wgrywaniem zmian w programie. Tylko obawiam się, że płytki sipeed tego nie obsługują 1
FlyingDutch Maj 3, 2022 Udostępnij Maj 3, 2022 1 godzinę temu, Elvis napisał: 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. Muszę obejrzeć schemat dla tej płytki, bo jeszcze tego nie robiłem. Pozdrawiam
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »