Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

PY32F002 - chiński ARM za 8 centów firmy PUYA

piotr_go 03 Jan 2023 00:34 5472 38
Computer Controls
  • PY32F002 - chiński ARM za 8 centów firmy PUYA PY32F002 - chiński ARM za 8 centów firmy PUYA

    Był już ARM za 16 centów, teraz mamy ARMa za 8 centów. Tak, osiem. :)
    PY32F002/PY32F003 firmy PUYA to mikrokontrolery z rdzeniem ARM Cortex M0+ o taktowaniu 24/32MHz.
    PY32F002 posiadają 20kB FLASH, 3kB RAM, SPI, USART, I2C, ADC, timery... nie ma na co narzekać.
    PY32F003 dodatkowo DMA i kilka timerów więcej, jest też większy wybór pamięci.
    Jest interfejs SWD, tak że nie trzeba jakiegoś egzotycznego programatora.
    Zasilanie 1,7V...5,5V.
    Obudowy od standardowych SOP, przez TSSOP, po małe QFNy czy DFNy.

    PDFy do pobrania na chińskiej wersji strony:
    https://www.puyasemi.com/cpzx3/info_267_aid_242_kid_235.html
    Klikamy na pomarańczowy folder. W każdym jest ten sam RAR z paczką PDFów i innych pomocy. Część po chińsku, część po angielsku.

    PY32F002:
    PY32F002 - chiński ARM za 8 centów firmy PUYA
    PY32F003:
    PY32F002 - chiński ARM za 8 centów firmy PUYA

    Przykładowe obudowy:
    PY32F002 - chiński ARM za 8 centów firmy PUYA PY32F002 - chiński ARM za 8 centów firmy PUYA PY32F002 - chiński ARM za 8 centów firmy PUYA PY32F002 - chiński ARM za 8 centów firmy PUYA

    Hello world (źródła w załączniku):
    PY32F002 - chiński ARM za 8 centów firmy PUYA
    Migające LEDy i tekst na UART (9600 bps)

    Testy:
    Z tego co zauważyłem jest kilka problemów z resetem.
    1. Podłączając przycisk do pinu RESET czasem po wciśnięciu pojawia się przerwanie HardFault.
    Zewnętrzny reset można wyłączyć, tak że problem raczej mały. Już dawno nie korzystałem z zewnętrznego resetowania.
    2. Układ można przetaktować około 2-krotnie ustawiając "wait state" flasha na 1 i zmieniając kalibrację generatora.
    Problem jest tylko taki, że reset zeruje "wait state" flasha, a nie zeruje kalibracji generatora.
    Jak ktoś chce przetaktować, to nie resetować.

    Pobór prądu w uśpieniu to około 5 µA, tak że 8-bit killerem go nie nazwę. Choć cenowo... :)

    Programowanie:
    Aby dodać do J-Linka obsługę układów PUYA, należy wgrać pliki ".FLM" z załącznika do katalogu "/opt/SEGGER/JLink/Devices/Puya/" a do pliku "JLinkDevices.xml" należy dopisać:
    Quote:
    <!-- -->
    <!-- Puya -->
    <!-- -->
    <Device>
    <ChipInfo Vendor="ST" Name="PY32F002Ax5" WorkRAMAddr="0x20000000" WorkRAMSize="0xC00" Core="JLINK_CORE_CORTEX_M0"/>
    <FlashBankInfo Name="FLASH" BaseAddr="0x08000000" MaxSize="0x5000" Loader="Devices/Puya/PY32F0xx_20.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
    <FlashBankInfo Name="OPT" BaseAddr="0x1FFF0E80" MaxSize="0x10" Loader="Devices/Puya/PY32F0xx_OPT.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
    </Device>
    <Device>
    <ChipInfo Vendor="ST" Name="PY32F003x4" WorkRAMAddr="0x20000000" WorkRAMSize="0x800" Core="JLINK_CORE_CORTEX_M0"/>
    <FlashBankInfo Name="FLASH" BaseAddr="0x08000000" MaxSize="0x4000" Loader="Devices/Puya/PY32F0xx_16.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
    <FlashBankInfo Name="OPT" BaseAddr="0x1FFF0E80" MaxSize="0x10" Loader="Devices/Puya/PY32F0xx_OPT.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
    </Device>
    <Device>
    <ChipInfo Vendor="ST" Name="PY32F003x6" WorkRAMAddr="0x20000000" WorkRAMSize="0x1000" Core="JLINK_CORE_CORTEX_M0"/>
    <FlashBankInfo Name="FLASH" BaseAddr="0x08000000" MaxSize="0x8000" Loader="Devices/Puya/PY32F0xx_32.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
    <FlashBankInfo Name="OPT" BaseAddr="0x1FFF0E80" MaxSize="0x10" Loader="Devices/Puya/PY32F0xx_OPT.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
    </Device>
    <Device>
    <ChipInfo Vendor="ST" Name="PY32F003x8" WorkRAMAddr="0x20000000" WorkRAMSize="0x2000" Core="JLINK_CORE_CORTEX_M0"/>
    <FlashBankInfo Name="FLASH" BaseAddr="0x08000000" MaxSize="0x10000" Loader="Devices/Puya/PY32F0xx_64.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
    <FlashBankInfo Name="OPT" BaseAddr="0x1FFF0E80" MaxSize="0x10" Loader="Devices/Puya/PY32F0xx_OPT.FLM" LoaderType="FLASH_ALGO_TYPE_OPEN" AlwaysPresent="1"/>
    </Device>

    Cool? Ranking DIY
    About Author
    piotr_go
    DIY electronics designer
    Offline 
    Has specialization in: technika cyfrowa
    piotr_go wrote 2512 posts with rating 2781, helped 88 times. Been with us since 2003 year.
  • Computer Controls
  • #2
    xHaKeReK
    Level 20  
    Gdzie je można kupić?
  • #4
    szymon122
    Level 38  
    Dziwię się zatem, że wszystkie chińskie "zabawki" nadal są na współczesnych wersjach '51.

    Odnośnie chińskich układów, to może ktoś wie jak wygląda z kompatybilnością np. HC32F460KCTA oraz STM32F446RC? Zakładając używanie tych samych pinów oraz instrukcji zgodnych z jednym i drugim, to można po prostu przenieść program nie zmieniając nic oprócz "targetu" w środowisku?
    A może zna ktoś bezpośrednie odpowiedniki np STM32F405 itp?
  • #5
    ZbeeGin
    Level 39  
    szymon122 wrote:
    Dziwię się zatem, że wszystkie chińskie "zabawki" nadal są na współczesnych wersjach '51.

    Widocznie wychodzą z założenia, że jednak nie trzeba "armat na wróbla" (Już raz była akcja z wróblami).
  • #6
    Galareta
    Level 23  
    Bo '51 są za 4 centy a nie 8;) i mają programy od lat gotowe.
  • Computer Controls
  • #7
    interbudtr
    Level 2  
    Szkoda, że na ali nie są dostępne tego typu mikrokontrolery. Jakbym miał zamawiać tylko ten mikrokontroler z lscs, to i tak taniej byłoby coś ogarnąć na rynku lokalnym.
  • #8
    piotr_go
    DIY electronics designer
    szymon122 wrote:
    Dziwię się zatem, że wszystkie chińskie "zabawki" nadal są na współczesnych wersjach '51.

    Coraz więcej ARM czy RiscV, ale 8mio bitowce za 2 centy pewnie nie znikną.

    interbudtr wrote:
    Szkoda, że na ali nie są dostępne tego typu mikrokontrolery.

    Są PY32F003, tylko cena absurdalna.

    interbudtr wrote:
    Jakbym miał zamawiać tylko ten mikrokontroler z lscs, to i tak taniej byłoby coś ogarnąć na rynku lokalnym

    Ja zwykle zamawiam z płytkami, mam wtedy darmową wysyłkę.
  • #9
    gulson
    System Administrator
    szymon122 wrote:
    Dziwię się zatem, że wszystkie chińskie "zabawki" nadal są na współczesnych wersjach '51.

    Ktoś napisał 20 lat temu program dla zabawki i po prostu dalej ten program wykorzystują.
    Kwestia czasu i będą robić na ARMach. Na naszych oczach właśnie się dzieją zmiany, przynajmniej te cenowe.
    Oprócz tego rynek półprzewodników ma dostać od wszystkich rządów miliardy dolarów/euro/juanów więc prawdopodobnie procesory będą leżeć na ulicy, a każdy kontynent będzie produkował swoje (koniec globalizacji w półprzewodnikach). Czeka nas prawdziwy wyścig zbrojeń, nie tylko cenowych. Wygrają projektanci i inżynierowie.
  • #10
    Macosmail
    Level 34  
    gulson wrote:
    Czeka nas prawdziwy wyścig zbrojeń, nie tylko cenowych. Wygrają projektanci i inżynierowie.

    Miejmy nadzieję, choć w kontekście ostatniego wysypu wiadomości, jak to ChatGPT wypluwa programy na podstawie opisu słownego, to można poczuć się zmieszanym czy w dobrą stronę to wszystko zmierza.

    W wielu produktach, gdzie kiedyś występowały STM32, teraz często można spotkać chińskie zamienniki. Oczywiście nie dotyczy to tylko STM32F103, oferta tych chińskich producentów jest szeroka.
    PY32F002 - chiński ARM za 8 centów firmy PUYA
    PY32F002 - chiński ARM za 8 centów firmy PUYA PY32F002 - chiński ARM za 8 centów firmy PUYA PY32F002 - chiński ARM za 8 centów firmy PUYA PY32F002 - chiński ARM za 8 centów firmy PUYA PY32F002 - chiński ARM za 8 centów firmy PUYA PY32F002 - chiński ARM za 8 centów firmy PUYA PY32F002 - chiński ARM za 8 centów firmy PUYA
    PY32F002 - chiński ARM za 8 centów firmy PUYA
    Nawet ATmega328 doczekała się swojego zamiennika LGT328, co ciekawe zoptymalizowanego tak, że większość instrukcji, które potrzebowały więcej niż 1 cyklu wykonuje się 2x szybciej przy tym samym zegarze. W peryferiach też tam są jakieś ulepszenia.
  • #11
    krisRaba
    Level 31  
    piotr_go wrote:
    Jest interfejs SWD, tak że nie trzeba jakiegoś egzotycznego programatora.

    To duży atut. W wielu rozwiązaniach potrzebne do uruchomienia środowiska wygibasy są przeszkodą przy ograniczonym czasie. Fajnie, że idą w tę stronę :)
  • #12
    jarekgol
    Level 31  
    Galareta wrote:
    Bo '51 sa za 4 centy

    Gdzie się coś takiego kupuje i przy jakich ilościach?
  • #13
    l0ud
    Level 14  
    krisRaba wrote:
    piotr_go wrote:
    Jest interfejs SWD, tak że nie trzeba jakiegoś egzotycznego programatora.

    To duży atut. W wielu rozwiązaniach potrzebne do uruchomienia środowiska wygibasy są przeszkodą przy ograniczonym czasie. Fajnie, że idą w tę stronę :)

    To jest "gratis" wynikający z użycia rdzenia Cortex M. Nie było sensu wymyślać czegoś swojego, więc kompatybilność dostaliśmy gratis.

    Ostatnio stałem się posiadaczem kilkuset sztuk PY32F003 i też trochę się pobawiłem.
    Co najbardziej mnie zaskoczyło to to, że producent nie nakłamał w dokumentacji o poborze prądu. Testowałem różne konfiguracje wewnętrznego oscylatora i faktycznie wartości pokrywają się z kartą produktu. Ten mikrokontroler jest naprawdę całkiem oszczędny i zjada na śniadanie 8-bitowe Atmegi i stare STMy typu STM32F0. Na LSI i włączonym usypianiem flasha, można wykręcić naprawdę mały pobór bez uśpienia.
    Miłym zaskoczeniem jest też fakt, że to wariant rdzenia z szybszym mnożeniem i jednocyklowym I/O.

    Najbardziej upierdliwe było napisanie jako-takiego drivera flasha do OpenOCD i skryptu startowego (producent udostępnił startup w dialekcie jakiegoś zamkniętego asemblera od ARM). Po zrobieniu tych rzeczy, przykłady od producenta normalnie działają na GCC. HAL to chyba mniej lub bardziej syf ukradziony od STM, ale działa i daje wgląd w peryferia.
    Jestem zaskoczony, jak dobre są te MCU za tak śmieszną cenę.
  • #14
    piotr_go
    DIY electronics designer
    Macosmail wrote:
    Miejmy nadzieję, choć w kontekście ostatniego wysypu wiadomości, jak to ChatGPT wypluwa programy na podstawie opisu słownego, to można poczuć się zmieszanym czy w dobrą stronę to wszystko zmierza.

    Za 20 lat podyktujesz opis do smartfona, a po tygodniu przyjdzie gotowy zmontowany i zaprogramowany układ.
    Aż mnie skręca.
  • #15
    gulson
    System Administrator
    piotr_go wrote:
    Za 20 lat podyktujesz opis do smartfona, a po tygodniu przyjdzie gotowy zmontowany i zaprogramowany układ.
    Aż mnie skręca.

    Może nie za 20 lat, ale za 10 lat.
    I nie tylko gotowy zmontowany układ, ale możliwe, że całe urządzenie z obudową wydrukowaną na drukarce 3D ;)
    Co ciekawe, wszystko będzie kompletnie zautomatyzowane.

    Chyba, że wcześniej nas zresetują W.

    No nic, muszę trochę próbek pozamawiać.
  • #16
    Azbi
    Level 10  
    @piotr_go, jakiego środowiska lub sdk używasz do programowania tychże PUYA?
    Z chęcią bym też zaczął z nimi zabawę :)
  • #17
    piotr_go
    DIY electronics designer
    Zwykły edytor z kolorowaniem składni i wieloma kartami. Pasuje do wszystkiego.
    Tyle różnych scalaków męczyłem, że się przyzwyczaiłem.
    Do tego GCC/SDCC czy co tam do danego układu jest.
  • #18
    l0ud
    Level 14  
    Całkiem dobrze się sprawdza VSCode z wtyczką Cortex Debug, odpowiednią konfiguracją i OpenOCD.
  • #19
    szymon122
    Level 38  
    Macosmail wrote:
    W wielu produktach, gdzie kiedyś występowały STM32, teraz często można spotkać chińskie zamienniki

    Jak wygląda kompatybilność takich programów?
    Rozumiem, że "hex" nie podejdzie, ale mając kod źródłowy wystarczy go skompilować używając "chińskich narzędzi"?
  • #20
    Macosmail
    Level 34  
    Na razie tylko obserwuję temat. Posiadam GD32, ale na razie brak czasu na testy. Z tego co się orientuję, to w większości przypadków binarka skompilowana pod STM32 powinna działać na chińskim zamienniku. W końcu te układy po to przejęły system nazewnictwa z STM32.
    Ew. zmiany i udoskonalenia są myślę zaimplementowane w sposób "niekolizyjny" np. wykorzystując puste (czy zarezerwowane) fragmenty rejestrów oryginalnego MCU.
    Większe różnice mogą wystąpić w GD32 ze względu na zastosowanie szeregowej pamięci Flash, z której kod programu po starcie i wybudzeniu z STBY kopiowany jest do SRAMu, co zajmuje określoną ilość czasu. W "enerogooszczędnych" softach to może być problem.
    Oczywiście bezpośrednio z CubeIDE, raczej nie uda się zaprogramować żadnego z tych układów, ale warto spróbować starszych wersji STM32 ST-LINK utility ew. dedykowanych chińskich narzędzi, choć niektóre są tylko po chińsku.
  • #21
    piotr_go
    DIY electronics designer
    Udało mi się trochę dokładniej namierzyć problem zewnętrznego resetu. HardFault pojawia się przy dostępie do AHB/APB.

    Echhh, nakłamali w dokumentacji. PY32F002AA15M6TU ma 32kB FLASH i 4kB RAM. :)
    Poszukam jeszcze DMA.

    ================ update ================

    Wygląda na to, że jest i DMA.
    Napisałem prosty kod wysyłający dane do SPI i jest zegar na SCK.
    Po wyłączeniu DMA zegar znika.

    Minimalny dzielnik SPI w trybie master to 2.
  • #22
    piotr_go
    DIY electronics designer
    Coraz lepiej. W PY32F002AA15M6TU jest PLL. :)
    Same bonusy.

    ================ update ================

    Przetaktowałem go na ~96 MHz. Prosty kod z RAMu działa stabilnie. FLASH nie da rady (1 to maksymalny wait state).
  • #23
    Macosmail
    Level 34  
    Być może są to jakieś niepełnowartościowe struktury z PY32F003.
    Czy udało się komuś znaleźć Reference Manual po angielsku? Karty katalogowe są po angielsku, a to co najważniejsze nie.
    W ogóle jakaś dziwna sytuacja jest z tym bo np. tutaj ( http://47.103.60.28:8090/en/download1.aspx) jest podobny µC (chociaż inny - i cena inna) i też brak RM.
    W ogóle, gdzieś natknąłem się na informację nie pamiętam teraz, którego producenta MCU, ale aby dostać się do dokumentacji trzeba użyć VPNa :-)
    EDIT:
    Update 2020-06-13: The website is not reachable from Europe. However, using a VPN with an Asian exit point gives access to the website. Even though the website appears only to work when accessed from Asia, the Datasheet is available in English. Besides the datasheet, there are development libraries available, however, I haven’t been able to locate a user manual (any documentation discussing the register values). Therefore I state the documentation to be incomplete.
  • #24
    piotr_go
    DIY electronics designer
    Macosmail wrote:
    Być może są to jakieś niepełnowartościowe struktury z PY32F003.

    PY32F003 (wg PDFa) nie ma PLLa.
    Macosmail wrote:
    Czy udało się komuś znaleźć Reference Manual po angielsku?

    Jest do PY32F030.
    https://www.puyasemi.com/cpzx3/info_267_aid_242_kid_235.html

    ================ update ================

    2 USARTy, 2 SPI.
    PY32F030 do PY32F002 pakują :)
  • #26
    Macosmail
    Level 34  
    To do PY32F003 pewnie też (takie zamówiłem :) ). Ciekawe czy ten LED Driver do wyświetlaczy 7 segmentowych też jest. Z tego co rozumiem, to piny powinny mieć wtedy charakter źródeł prądowych (20-40-60-80 mA). Przy tej obudowie 10-pinowej w PY32F002 na PB3 można mieć wspólną katodę pierwszej cyfry, a na PA1 anodę segmentu C.
    Można by podłączyć LED i zobaczyć czy można go włączać i wyłączać, zmieniać jasność wydajnością prądową i częstotliwość multipleksowania. Wtedy byłoby już 99,9% pewności, że to PY32F030 :)
    Liczniki i pewnie większość peryferiów to widzę identyczne jak w STM32 :)
  • #28
    Macosmail
    Level 34  
    Rejestr przyjmuje dane (w ramach swoich 8 - bitów) po dostarczeniu zegara. Czyli pewnie i fizycznie by działało :) chociaż 8-pinowa obudowa może nie mieć takich możliwości :-)
    Z marketingowego punktu widzenia być może jest lepiej, gdy producent oferuje całą serię układów, niż tylko jeden w różnych obudowach :)
  • #29
    piotr_go
    DIY electronics designer
    Zamówiłem PY32F002 w TSSOP20, QFN16 i SOP16, powinny już do mnie iść. Podobno w LCSC mają C19, więc są opóźnienia.
    Do tego adaptery i różne uniwersalne płyteczki.
  • #30
    jarekgol
    Level 31  
    piotr_go wrote:
    w LCSC mają C19

    Co to znaczy?