Hlavní navigace

Názor k článku Raspberry Pi Pico s RP2040: proč vlastně vyvíjet vlastní jednočip? od dsfghjzukztersdycx vbhgnjuzrte - Nechci být příliš kritcký, ale tady tato diskuze,...

  • Článek je starý, nové názory již nelze přidávat.
  • 26. 1. 2021 9:04

    dsfghjzukztersdycx vbhgnjuzrte

    Nechci být příliš kritcký, ale tady tato diskuze, diskuze např. na zive.cz a tento článek obsahují hodně závadějících informací, řadu doměnek, které by s trochu nadsázky šlo považovat za konspirační teorie a občas i faktické nesmysly. Rozeberu tedy tento článek.

    > Opustila svoji doménu jednodeskových linuxových počítačů s výkonným procesorem a pustilo se do vod malých embedded procesorů, na kterých Linux nepustíte.

    Linux na tom s řadou kompromisů spustíte. Nebude to kdo ví jak pohodlné, ale jde to. Linux jde spustit (nikoli používat) i na AVR. https://www.youtube.com/watch?v=nm0POwEtiqE To je jedna z informací, kterou považuji za zavádějící a nepřesnou.

    > Obecně se ale nedá říct, že v porovnání s konkurencí jako je STM32, ESP32, SAM a mnoho, mnoho dalších je to něco, co by vám vyrazilo dech.

    To bych úplně neřekl. Je zde řada věcí (pozitivních i negativních), která Vám mohou "vyrazit dech". Za pozitivní věci jde považovat dual-core a vysoká frekvence (které sice nejde dosáhnout vždy, ale i tak). Za negativní nutnost externí flash nebo třeba málo pinů a dostupnost jen jednoho package.

    Trochu bych se vrátil k té frekvenci. Cortex-M0 používá třístupňovou pipeline. To znemená že každá instrukce se vyokánává 3 takty, ale tím že se začne další instrkuce vykonávat již v proůběhu předchozích, tak efektivně procesor vykoná instrukci za takt. Čas od času se ale při zpracování instruce stane, že je třeba na něco počkat. Typicky to může být třeba když výsledek jedné instrukce závisí na předchozí. U RP2040 je ale ve skutečnosti ještě jeden velký problém. První fáze zpracování instrukce je její načtení z paměti. Pokud vykonáváte instrukci z RAM tak to bude trvat cca 1 cykl (ono to může být víc, pokud jsou nutné wait states, ale v dokumentaci o tom mení zmínka). Problém je že RP2040 nemá interní flash. Interní flash by umožňovala vykoávat instrukce podobně rychle jako ze SRAM (tam je obvykle více wait states, ale ani tak to není nic dramtického). Tím že RP2040 má jen externí flash, tak pokud je vykonávaná instrukce, která není v 16 KiB cache (ta cache je velmi důležitá), tak její načtení trvá podstatně déle. DO Flash paměti se musí přenést instrukční kód READ, což trvá 8 cyklů na QSPI sběrnici, pak se musí přenést adresa, což jsou obvykle 3 byty a tedy 24 cyklů, pak se musí počkat 8 cyklů než se Flash připraví rychle dumpovat data teprve pak se začnou přenášet data. Potřebných 32bit se po čtyřech vodičích přenese za 8 taktů. Za předpokladu že RP2040 i Flash běží na 133 MHz (u jiných frekvencí ty výpočty mohou být jiné, protože s emohou vynechat například ty wait states), tak čtení instrukce bude trvat 48 cyklů. Což je 24x pomalejší než u běžné integrované Flash v jiných MCU. Efektivně tak doáhnete výrazně nižší rychlosti než očekáváte od 133 MHz. Většinou to není problém, protože tento problém efektivně řeší ta cache, která data poskytuje za jeden takt (jako SRAM), ale v okamžiku kdy začnete vykonávat kód, který není v cache, tak nastane dočasně dramatický pokles výkonu. navíc bych upozornil, že tento výpočet má předpoklad že i externí Flash běží na 133 MHz, ale to nemusí být. Samotná dokumentace doporučuje kvůli integrity vysokorychlostního signálu používat frekvenci vydělenou čtyřmi. Pak sice bude přenos trvat taky 48 cyklů na sběrnici QSPI, ale 48 těchto cyklů je 192 hodinových cyklů procesorového jádra, které běží na 133 MHz.

    > V různých článcích a recenzích najdete často jako argument cenu. Ta je sice nižší, ale ne tak diametrálně.

    Samozřejmě, když je nutné si k tomu koupit externí flashku na uložení programu. Po zohlednění tohoto faktu už ta cena není zas taková hitparáda, zejména v kombinaci s výkonovými aspekty interní vs externí flash.

    > Pokud by ST představilo novou řadu dvoujádrových ARM Cortex-M0+, tak to pro ně dává smysl a nikoho to moc nepřekvapí. Ale Raspberry Pi? Honila se mi hlavou jediná otázka a nemohl jsem se jí zbavit:
    > Proč se v Raspberry Pi do něčeho takového pustili?
    > Opravdu chtějí konkurovat velkým hráčům jako ST, Microchip nebo Espressif. V tom musí být něco, co mi uniká… Žádná z recenzí ani diskusí, co jsem četl, mi to nebyla schopna vysvětlit.

    K této doměnce přiložím svoji doměnku složenou ze dvou částí:

    1) Oni jim nechtějí konkurovat.
    2) na trhu je stejně poptávka. I kdyby si třeba kaufland vyrobil MCU, tak ho prodají. Firmy ukazují, že po mikrokontroléch je obrovská poptávka a chrlí jeden za druhým. Řady mikrokontrolérů se mezi vendory mnohdy ani moc neliší a přesto to dělají. Jeden výrobci si mezi řadami často konkuruje sám sobě a dělá +- duplicitní čipy, ale koho to zajímá? Všechny prodá. Ten trh je obrovský. Všichni chrlí modely jeden za druhým a přesto je prodávají po desítkách milionů. Neznám frimu, která by z návrhu a výroby MCU byla kvůli přesycenému trhu nešťastná. Místo toho v prospektech pro investory jdou najít radostné zmínky že firmy XYZ dodala svůj bambiliontý mikrikontrolér, vydělala miliardy a já nevím co všechno ještě. Tento trh neživí fanoušci a bastlíři, kteří si koupí 5 kusů na svůj domácí IoT project. Živí ho výrobci, kterří tyto docela univerzální čipy používají k řízení věcí, které prodají po milionech kusů a tedy i ten mikrokontrolér postupem času nakoupí v obrovských sériích.

    > Odpověď bude v datasheetu

    V datasheetu bývá všelico, ale strategie firmy/neziskovky jen málokdy.

    > V tu chvíli, jsem si uvědomil, jak čtivě je ten datasheet napsaný.

    MCU je čip určený k tomu aby jej programovali lidé. A to ve velkém. To je podstatný rozdíl ve srovnání s například specializovaným ASICem ve Wi-Fi routeru. Ten nikdo nikdy programovat nebude. Firmware do něho napíše ten vendor a nemá důvod s psaním čtivě dokumentace aby si svůj Wi-FI router mohl přeprogramvoat Franta z Horní Dolní. MCU bez dokumentace je neprodejný, firmy si nemůžou dovolit platit reverzní inženýry místo programátorů an studování co ten čip dělá a jak ho naprogramovat. Podobně prodejnost MCU s dokumentací pod NDA je velmi omezená. Firmy, které MCU vydávájí se musí smířit s tím, že musí udělat detailní a čtivou dokumentaci, aby psaní firmwaru bylo co nejjednodušší a tedy pro zákazníky méně časově náročné a tedy i levnější. Všiměte si že firmy, které krom dvou stránkových marketingových datasheetů nikdy nic nezveřejnili (např. mediatek), tak prakticky žádné MCU nedělají. To je logické. Stejně by je neprodali. Je to docela srandovní. Když si vyhledáte na google "mediatek microcontroller", tak jeden z mála výsledků bude MT2523D a když si otevřete jeho stárnku, tak hned v záhlaví bude že čip byl prodadán společností AIROHA (to je firma, která dělá mimo jiné čipy používané v řadě dnešních bezdrátových sluchátek). Evidentně se jim s jejich přístupem nepodařilo ten čip prodat, tak to raději prodali někomu, kdo má lepší ambice. Dokumentace je u mikrokontroléru základ a bez ní to nemá smysl. Všichni dnešní výrobci mají podobně čtivou dokumentaci jako mt2040. Většinou ji mají mnohem detailnější. Ukázky kódu a odkazy tam nemají, protože API funkce se vyvíjí a není reálné měnit dokumentaci, vždy když uděláte refactoring v API, něco do něj přídáte, apod. Podobně odkazy na github.

    > Mimochodem, všimli jste si, že Pico nemá žádné Wi-Fi nebo Bluetooth?

    Nemá žádno složitou periferii. Takže nemá ani SDHC, Ethernet MAC, CAN, Crypto akcelerátor, Camera interface, LCD driver, LCD TFT driver a mnoho dalších. Nema ani analogové periferii jako je DAC nebo nějaký advanced ADC a DAC. Proto mimochodem v současnosti nemá ani Flash. Navrhnout Flash je brutálně složité. Musí se tam řešit strašně moc anologývých věcí jako jsou generátory konstatního proudu a mraky dalších. To že mají Flashky většinou jednoduchý interface je dáno poměrně komplexním řadičem, který tohle všechno řeší, ale jeho návrh je pravděpdoobně absolutně mimo jejich uroveň. Také si všiměte, že Raspberry Foundation ve skutečnosti ani nenavrhovala ty jednoduhé periferie jako je I2C a SSI (SSI slouží pro SPI a podobné sběrnice). V dokumentaci je zmínka, že periferie je licencoána od Synopsysu. Je třeba zdůraznit, že tady to licencování periferie od někoho jiného se děje i u zaběhlých výrobců. Dělají to zejména kvůli časové náročnosti návrhu. ST si například licencuje od Synopsysu periferie pro USB OTG a Ethernet MAC. RP2040 nemá žádnou periferii, kterou by žádný jimý MCU na trochu neměl. Anit o PIO není unikátní. Například Cypress to používá v prakticky všech svých mikontrolérech PSoC.

    > Možná je to kvůli tomu, že RF by to neúnosně prodražilo.

    Ne není. RF nestojí nic moc, anténa je externí. Prodražilo by to a protáhlo vývoj, navíc na to nemají zkušenosti. Ostatní vendoři mají většinou jednoduchou HW akcelerovaný RF modul s kterým jde softwarově naimplementovat podporu pro BLE a není to problém. Akcelerátor pro podprou Wi-Fi a BT BR/EDR vyžaduje složitější logiku a tu už má jen málokdo (v MCU integrovanou v současnosti asi jen Espressif).