Na FreeHostingu Endora běží desítky tisíc webů. Přidejte se ještě dnes!

Vytvořit web zdarma

Na FreeHostingu Endora běží desítky tisíc webů. Přidejte se ještě dnes!

Vytvořit web zdarma

Raspberry Pi Pico

      22.1.2022 Loni vydala organizace Raspberry Pi Foundation novou malou levnou destièku Raspberry Pi Pico, která se velmi podobá rùzným Arduino / BluePill destièkám s STM32, srovnání zde. Je osazena novým MCU RP2040 (navrženým pøímo organizací) s 2 jádry ARM Cortex-M0+ na 133 MHz, 264 kB SRAM, 2x UART, 2x SPI, 2x I2C, 16x PWM, 4x 12b ADC 0,5 MS/s, DMA. Zajímavé jsou programovatelné jednotky PIO blokù (nezávisle bìžící stavová mašina - max. 32 instrukcí v ASM). Destièka dále obsahuje externí 2MB QuadSPI FlashROM (na èipu je pouze malá ROM s USB bootloaderem), krystalový oscilátor, USB konektor (podporuje USB 1.1 device i host) a 40 pinù ve tvaru pouzdra obvodu DIL. Napájecí napìtí je 1,8 – 5,5 V. GPIO nejsou 5 V tolerantní, max. 3,3 V a dají proud kolem 12 mA, max. jen 50 mA na všechny GPIO. U nás se dá Pico koupit za 109 Kè (v Praze ho má i GM Electronic za 149 Kè), èi ještì menší destièka s více GPIO, pøípadnì i samotný MCU RP2040 za pouhých 29 Kè (a v dnešní dobì nedostatku èipù jsou kupodivu skladem).
      Dozvìdìl jsem se o nìm z vlákna na OldCompu, kde si s ním zaèal hrát Panda (samozøejmì že né v Pythónu, ale pìknì low-level) a naprogramoval pìknou OpenSource C-èkovou grafickou knihovnu PicoVGA, resp. zjednodušené verze Pico16VGA a PicoQVGA, s kterou lze s pomocí pár odporù zobrazovat grafiku na bìžném VGA monitoru nebo LCD s paralelním RGB interfacem. Zde je podobný projekt pro generování obrazu na kompozitní výstup s jednoduchým odporovým R-2R DACem a experimentální projekt digitálního výstupu PicoDVI se silnì pøetaktovaným MCU. Spolehlivì prý bìží cca do 250 MHz (jako první zaène chybovat SPI FlashROM, ale zjistilo se, jak zvýšit dìlièku SPI hodin pro flešku a pak se dá dostat v pohodì pøes 300 MHz), utilita pro nastavení PLL je zde. Panda také pøipravil minimalistické RaspPicoSDK vèetnì popisu pro zaèáteèníky, které se obejde bez dalšího bloatware a vystaèí si jen s ARM-GCC (použité binárky nebìží na Windows XP, ale dají se nahradit tìmito ze SourceForge). Vìnoval se též assembleru a mìøení doby zpracování instrukcí.

      28.1.2022 mi z RPiShopu dorazily 2 Pico destièky a 1 samostatný èip RP2040. Dále jsem se dozvìdìl o další vìtší OpenHW destièce VGA, SD Card & Audio Demo board for Raspberry Pi Pico aka Pimoroni Pico VGA Demo Base. Ta obsahuje VGA konektor s odporovým DACem RGB555, audiokodek PCM5101 s výstupem na stereo jack, slot na microSD kartu, microUSB host konektor, 3 tlaèítka a ladicí pin header. PCB Layout a schéma v KiCADu je zde a zdrojáky demo programù jsou na GitHubu. Za jednu neosazenou destièku dìkuju vanthomasovi z OldComp fóra. Chtìl bych na ní zkusit rozjet Pandovu knihovnu PicoVGA, která používá ménì barevný výstup RGB332 mapovaný na jiné GPIO a také slouèený signál SYNC místo HSYNC a VSYNC. Snad to pùjde pøizpùsobit úpravou souboru vga_config.h. Nechal jsem si také vyrobit u JLCPCB 5 destièek PicoDVI.

      5.2.2022 Od Pandy jsem se dozvìdìl, že výstupy pro RGB DAC na výše zmínìné destièce bohužel pøemapovat nepùjdou, protože program pro PIO blok prochází popoøadì za sebou jednotlivé GPIO, což zde není splnìno, nebo� GPIO5 je použit pro hodiny microSD karty. Také nepotìší, že použité footprinty pro tyto SMD odpory jsou zcela zbyteènì velikosti 0402, když by se tam v pohodì vešly 0603. Vyøešil jsem to jednoduše pøelepením dané oblasti na desce proužkem kaptonové pásky a pøipájením 0603 odpùrkù podle Pandova zapojení pøímo k vývodùm Pico modulu. Na druhé konce odpùrkù jsem pøipájel drátky a propojil je v odpovídajícími R, G, B piny VGA konektoru. Panda šetøí GPIO a používá smíšenou synchronizaci zavedenou na pin HSYNC (13) místo pùvodních HSYNC a VSYNC.

Raspberry Pi Pico na VGA demoboardu

      Po prvním pøipojení Pica do PC pøes USB se mi detekovalo složené USB zaøízení se zaøízením tøídy mass storage a neznámé zaøízení "RP2 Boot" s USB PID: 0003h, k nìmuž není pro Windows žádný ovladaè, ale není pro naprogramování potøeba. Raspberry Pi Foundation používá USB VID: 2E8Ah a zde je seznam všech jejich PIDù. Nìkteré programy dále používají virtuální sériový port (CDC), pro který staèí nainstalovat tento INF soubor. Jak jsem zjistil, zaøízení "RP2 Boot" využívá utilita picotool (zdrojáky zde) ke komunikaci s bootloaderem pøes knihovnu libusb. Zaøízení je tøeba ruènì zaregistrovat k WinUSB/libusb driveru pomocí utility Zadig, viz obrázek níže. Jediná binárka picotool.exe 1.1.0, kterou jsem našel, bohužel nebìží pod Windows XP a pod Windows 10 mi pøi pokusu o spojení s Picem opakovanì spadla. Nakonec se mi podaøilo zkompilovat vlastní build verze 1.1.0 [422 kB], který funguje i pod Windows XP. Umožòuje nahrávat a verifikovat programy pro Pico do/z SPI FlashROM, restartovat z boot módu do aplikaèního módu (obrácenì mi to nefungovalo) a vypsat nìjaké informace, viz níže.

Installing RP2 Boot driver - libusb in Zadig


C:\RaspPicoSDK\_exe>picotool.exe info -a

Program Information
 name:          pico
 web site:      https://github.com/raspberrypi/pico-examples
 features:      USB stdin / stdout
 binary start:  0x10000000
 binary end:    0x10055bc0

Fixed Pin Information
 none

Build Information
 sdk version:       1.0.1
 pico_board:        pico
 build date:        Jun  6 2021
 build attributes:  Release

Device Information
 flash size:   2048K
 ROM version:  2

      Zkusil jsem do Pica nahrát program Vlak (Train), který je portem stejnojmenné staré DOSové hry od Golem Software. Naprogramování (pokud už bylo do Pica døíve nìco nahráno, je tøeba zmáèknout tlaèítko BOOTSEL a RUN/RESET#, pak se jednoduše zkopíruje zkompilovaný .UF2 soubor na virtuální disk Pica) a start programu probìhl bez problémù a na monitoru se objevil starý známý Vlak, který jsem mohl ovládat klávesama pøes Putty (115200 baud) skrz virtuální sériák (lze pøekonfigurovat i na UART na GPIO). Obraz bìžel rychle a stabilnì bez jakýchkoliv rušivých jevù. UPDATE: Na Pico byla portována i legendární støíleèka Doom. Zdrojáky jsou k dispozici na GitHubu a ukázkové video je zde. Sharewarová epizoda Doomu se díky kompresi vešla do standardní 2MB SPI FlashROM a obraz se generuje odporovým DACem na VGA v 16-bitových barvách RGB565. Za zmínku stojí také projekt emulátoru Pico-ZXspectrum, který využívá výše zmínìnou knihovnu PicoDVI.

      30.3.2022 Tak mi koneènì s várkou plošòákù z JLCPCB dorazily 4-vrstvé destièky na PicoDVI zmínìné výše, mírnì upravené pro jiný footprint HDMI konektoru. Mám navíc 5 ks, takže pøípadným zájemcùm mùžu z tohoto pøebytku nabídnout. Zatím jsem osadil MCU RP2040 v QFN pouzdru a 12MHz krystal, ale chybí mi pasiva velikosti 0402, která budu muset nìkde koupit (toto smetí bìžnì nevedu).

Raspberry Pi PicoDVI PCB-top Raspberry Pi PicoDVI PCB-bottom
PicoDVI PCB top PicoDVI PCB bottom

      20.4.2022 Pøed 2 týdny jsem sehnal souèástky a doosadil destièku, ale nevyzkoušel ji, protože jsem nikde nenašel zkompilovanou binárku s nìjakým demem pro správnou konfiguraci pinù (našel jsem akorát zkompilované binárky, které byly urèené pro Wrenùv adaptér DVI Sock s jiným zapojením TMDS párù). Nyní jsem koneènì pøekonal nechu� a odhodlal se rozbìhnout toolchain s CMake. Kompilace se samozøejmì (na Windows) neobešla bez problémù. Použil jsem poslední verzi CMake 3.23.1, Python 3.10.4 (vyžadovaný nìjakými build skripty) a ARM-GCC 9.3.1 toolchain. Dále je potøeba mít nìkde staženou a rozbalenou originální verzi PicoSDK 1.3.0 (ne tu upravenou Pandovu verzi). Pustil jsem CMD a nastavil cesty k ARM-GCC, MinGW, CMake, Pythonu a nastavil promìnnou PICO_SDK_PATH do adresáøe s rozbaleným PicoSDK. V top-level adresáøi zdrojákù PicoDVI jsem v souboru CMakeLists.txt zmìnil øádek s konfigurací pinù z set(DVI_DEFAULT_SERIAL_CONFIG "pico_sock_cfg" CACHE STRING na set(DVI_DEFAULT_SERIAL_CONFIG "picodvi_dvi_cfg" CACHE STRING (pøíp. lze pøedat jako parametr CMake -DDVI_DEFAULT_SERIAL_CONFIG=picodvi_dvi_cfg). Vytvoøil jsem podadresáø build, vstoupil do nìj a spustil cmake -G "MinGW Makefiles" -DPICO_COPY_TO_RAM=1 .., mìl by vzniknout soubor Makefile a mìlo by staèit už jen zavolat make. Ale protože mi nìjak selhala kompilace utilit pioasm a elf2uf2 z PicoSDK, tak jsem nakopíroval staženou binárku pioasm.exe do build\pioasm\ a elf2uf2.exe do build\elf2uf2\. Pak jsem musel zavolat make -i, aby se ignorovaly errory bìhem kompilace, protože CMake se pokoušel pomocí ARM-GCC zkompilovat nìjaký testovací soubor pro Windows s neznámým linker parametrem --major-image-version, ale to nemá vliv na kompilaci ARMového kódu a nakonec se mi pøeložily všechny dema. Pro test zde pøikládám zkompilovaný image dema christmas_snowflakes.uf2 [114 kB], které je vidìt na fotce níže. Vyzkoušel jsem všechny dema a zobrazení bylo v poøádku, až na 1 demo vista-palette, které mi negenerovalo žádný obraz.

Raspberry Pi PicoDVI assembled PCB-top Raspberry Pi PicoDVI assembled PCB-bottom Raspberry Pi PicoDVI-Christmas snowflakes demo Raspberry Pi PicoDVI-Pico-ZXspectrum
PicoDVI top PicoDVI bottom Christmas snowflakes Pico-ZXspectrum

      Povedlo se mi též zkompilovat emulátor Pico-ZXspectrum, který využívá knihovnu PicoDVI. Pro jeho kompilaci je tøeba navíc stáhnout balíèky (nejlépe pøes GIT dle popisu v odstavci Build) no-OS-FatFS-SD-SPI-RPi-Pico, pico-dvi-menu, pico-emu-utils a upravenou knihovnu TinyUSB, kterou nahradíme starší verzi v PicoSDK (nezapomenout na git checkout hid_micro_parser). Konfigurace pinù pro HDMI výstup se použije dle konfiguraèní promìnné DVI_DEFAULT_SERIAL_CONFIG z nadøazeného CMakeLists.txt z PicoDVI knihovny, pak už jen staèí pøeložit make -i zxspectrum. Emulátor podporuje funkci USB host a lze ho ovládat USB HID zaøízeními (klávesnice a joysticky), které lze pøipojit i pøes USB hub. Zatím ale nemám pøipájený konektor pro microSD kartu.

      30.6.2022 Raspberry Pi Foundation pøedstavilo novou verzi Raspberry Pi Pico W za 6$, která ke stávajícímu MCU RP2040 pøidává Wi-Fi modul založený na èipu Infineon CYW43439. Ten podporuje též Bluetooth 5.2, ale tato funkcionalita zatím není na Pico W k dispozici (v budoucnu možná bude). Softwarová podpora založená na sí�ovém stacku lwIP je zahrnutá v Pico SDK. Rozmìrovì a pinovì je nové Pico kompatabilní s pøedchozí verzí.

      12.1.2023 Raspberry Pi Pico lze také použít jako levný logický analyzátor s 21 digitálními kanály s vzorkováním do 120 MHz a 3 analogovými kanály s vzorkováním do 500 KHz. Viz též diplomová práce z ÈVUT: Vít Vanìèek - Logický analyzátor s Raspberry Pi Pico. Zásadní omezení je úzké hrdlo v podobì pomalého USB, nicménì kratší záznamy se vejdou do interní RAM (lze samplovat rychle na limitu pøenosu GPIO-DMA) a u signálù s málo zmìnami v èase mùže pomoci RLE komprese. Uživatel Pico-coder na svém GitHubu dal k dispozici OpenSource firmware pro Pico vèetnì zkompilovaného UF2 souboru, napsal driver do knihovny libsigrok (zatím se nedostal do oficiální vìtve), kterou využívá populární aplikace PulseView - zde je tøeba použít speciální build se zakompilovaným driverem (mùže vyžadovat knihovnu mscvr100.dll, pokud ji už nemáte v systému). Firmware Pica komunikuje s libsigrok pøes virtuální sériový port (CDC). Po pøipojení se objeví jako USB zaøízení s VID, PID: 2E8A:000A:00 - Board CDC (Interface 0) a je pro nìj tøeba nainstalovat INF soubor zmínìný výše. Èíslo sériového portu zjistíme ve Správci zaøízení a v PulseView v menu "Connect to Device" vybereme driver "raspberrypi-pico" a pøíslušný Serial Port (bitovou rychlost není tøeba u CDC zadávat). Pozor na to, že GPIO na Pico jsou nechránìné a snadno by se mohly odprásknout vìtším napìtím než 3,3 V, takže doporuèuji pøidat alespoò nìjaké sériové odpory pár set ohmù.

PulseView configuration

      9.2.2023 Raspberry Pi Pico bylo použito jako základ OpenHW/FW emulátoru PicoGUS historické zvukové karty Gravis Ultrasound (podporuje též AdLib/OPL2 a MPU-401 MIDI v provedení 8-bitové ISA karty). Zatím není zdaleka 100% kompatabilní, ale s novìjším FW se to postupnì zlepšuje, viz compatibility list. Nová verze firmware 1.2.0 pøidává podporu emulace Sound Blaster 2.0.

      11.2.2024 Další využití Raspberry Pi Pico jako experimentální analyzátor LPC sbìrnice pøináší projekt Pico TPMSniffer. Využívá k tomu rychlé PIO (modul lpc_sniffer.pio), výstup je na sériový port.


Raspberry Pi Pico 2

      8.8.2024 pøedstavila organizace Raspberry Pi Foundation novou verzi destièky Raspberry Pi Pico 2 s novým MCU RP2350. Jeho nejvìtší zajímavostí je, že obsahuje 2 páry jader rùzných architektur a instrukèních sad: ARM Cortex-M33 a RISC-V Hazard3. Nejde však o 4-jádro, lze si to pøedstavit tak, že vnitønì jsou k dispozici 2 CPU "sockety" a každý mùže mít nezávisle pøipojeno buï jádro ARM nebo RISC-V podle nastavení konfiguraèních registrù, pøièemž druhé neaktivní jádro je drženo v resetu a s vypnutými hodinami. Hodnoty tìchto konfiguraèních registrù se ètou pouze pøi resetu MCU (ten lze vyvolat i programovì pøes watchdog). ROMkový bootloader je schopen podle familyID v UF2 image sám poznat, pro kterou architekturu je nahraný kód ve FlashROM a podle toho aktivuje pøíslušná jádra. Též je možné zápisem do OTP pamìti trvale vypnout RISC-V jádra, zøejmì z bezpeènostního dùvodu, že bootloader pro RISC-V neimplementuje Secure Boot. RP2350 pøinesl nejlevnìjší zpùsob, jak si platformu RISC-V osahat.
      Mezi další novinky a vylepšení patøí zvýšení frekvence jader na 150 MHz, zvìtšení interní SRAM na 520 kB, externí FlashROM by mìla být 4MB QSPI, rozšíøení na 12 jednotek PIO, pøibyl rychlý serializér HSTX s HW TMDS enkodérem (podpora DVI / HDMI), SHA-256 akcelerátor, ARM TrustZone, bylo vylepšeno DMA a další. USB periferie zùstává u verze 1.1. Zde jsou postøehy uživatele Dmitry.GR, který mìl možnost bìhem vývoje nový MCU rok testovat. Uživatel Wren6991 už portoval na RP2350 svùj projekt PicoDVI (libdvi) s využitím nového TMDS enkodéru a též ve verzi pro RISC-V. U nás je už nové Pico 2 k dostání na RPishopu za 135 Kè, což je poøád dosti lidová cena.

      17.3.2025 Po pár letech jsem opìt vyrazil do Nìmecka na veletrh Embedded World s bývalými kolegy z pøedchozí práce a dovezl si jedno Raspberry Pi Pico 2. Porozhlédl jsem se tedy po alternativním SDK a Miroslav Nìmeèek AKA Panda opìt nelenil. Vydal novou verzi PicoLibSDK (ke stažení na GitHubu) unifikovanou pro všechny 3 Pico CPU architektury: RP2040, RP2350-ARMv8 a RP2350-RISC-V. Tzn. v každém projektovém adresáøi jsou odpovídající ba�áky pro kompilaci na danou platformu. Chtìl jsem vyzkoušet novou alternativu RISC-V, pro kterou je potøeba si stáhnout RISC-V GCC toolchain (použil jsem verzi 14.2.0 pro Windows, k dispozici je už pouze 64-bitová verze). Následnì jsem musel upravit prefix v souboru Makefile.inc z riscv32-unknown-elf- na riscv-none-elf- (Panda používá starší RISC-V32 GCC toolchain 13.2.0). Zkusil jsem zkompilovat základní example na blikání LED a fungoval bez problémù. Podle Pandy je nový RP2350 asi 2x rychlejší než pøedchùdce RP2040 a programy na RP2350 RISC-V jádrech bìží asi o 15% pomaleji než na ARMv8 jádrech (nepomohly moc ani ruèní optimalizace v assembleru), patrnì díky specializovaným koprocesorùm, které mùžou využít jen ARMv8 jádra.
      Panda už na Pico 2 prohání HDMI výstup s využitím periferie HSTX, rychlou matematickou knihovnu pro RISC-V Hazard3 jádro, MP3 pøehrávaè... Zajímavá je též kapesní herní konzole PicoPad, která se doèkala i vlastního chytlavého AI songu.



Zpìt

Aktualizováno 18.3.2025 v 5:36