logo_elektromys.eu

/ Konfigurovatelné obvody GreenPAK |

V tomhle článku bych vám rád představil zajímavé konfigurovatelné obvody a taky návod jak si k nim snadno vyrobit programátor.

/ Motivace |

Kdysi jsem sháněl obvod "miltiplexoru", kterým bych mohl přepínat libovolný z jeho vstupů s libovolným jeho výstupem. Překvapilo mě, že jsem nic takového nenašel až jsem nakonec narazil na obvody SLG46826 a SLG46824 firmy GreenPAK, respektive Dialog Semiconductor respektive Renesas. Ty sice nejsou pouhé "multiplexory", ale byly schopné tuto roli plnit. Když jsem je trochu prozkoumal, napadlo mě, že je to mimo jiné může být nástroj pro "starou školu". Rozuměj pro lidi, kteří dělali elektroniku z diskrétních logických hradel, ale kteří neumí programovat mikrokontroléry a už nemají čas nebo energii se to učit. Protože mohou zužitkovat své staré zkušenosti bez nutnosti učit se jakýkoli jazyk nebo náročné prostředí (které je potřeba pro návrh v CPLD nebo FPGA). Ke konfiguraci těchto obvodů totiž existuje přehledné grafické prostředí, což spolu s cenou okolo 50kč vytváří pro zmíněnou skupinu bastlířů a techniků zajímavou příležitost. Komerční cíl firmy nejsou hobby aplikace. Na trhu se snaží konkurovat nízkou cenou a možností zmenšit "footprint" různých konvenčních řešení, takže nabízí celou škálu konfigurovatelných obvodů, obsahujících LDO, Výkonové prvky a cokoli co může zmenšit rozměry DPS, nebo zjednodušit návrh různé jednoduché elektroniky. Většina obvodů obsahuje jen OTP (One Time Programmable) paměť a zákazník objednává velké série čipů do nichž se už v továrně nahrává vlastní konfigurace. To je model zaměřený na velká komerční řešení, ne pro nás. Ale v nabídce jsou nejméně tři čipy (již zmíněné SLG46826/24 a SLG47004) vybavené přepisovatelnou pamětí a I2C rozhraním. Ty je možné přeprogramovávat podle potřeby stejně jako jsme zvyklí u MCU. A právě ty bych vám chtěl představit a hlavě dát k dispozici open source "programátor".

SLG46826 je kombinovaný analogově digitální konfigurovatelný obvod a SLG46824 je jeho "odlehčená" varianta. Obsahuje napěťovou referenci, analogové komparátory, oscilátory, teplotní senzor, digitální stavební bloky jako LUTy, klopné obvody, kombinační i sekvenční logiku, čítače, "pattern generator", případné duální napájení (level shifter) a další. A navíc i EEPROM (přístupnou z I2C). Lze ho koupit i v pouzdře TSSOP, které zvládne většina bastlířů připájet (třeba na adaptér). Případně za cenu něco přes 100kč jsou k sehnání i oficiální hotové modulky v provedení "DIP" - tedy pasující i do nepájivého pole. Provozní napětí je v rozsahu 1.8-5.5V.


Výbava obvodu SLG46826

Celá konfigurace obvodu se řeší skrze 2kb paměť, každý bit v této paměti má svůj význam a kóduje konfiguraci stavebních bloků a jejich propojení mezi sebou. Vše je docela srozumitelně zdokumentované ve 200 stránkovém datasheetu. Ke snadné konfiguraci je k dispozici aplikace Go Configure™ Software Hub, která umožňuje vše řešit v přehledném grafickém prostředí. V něm je mimo jiné i dobře znázorněno jak se konfigurace bloků mapuje na jednotlivé bity konfiguční paměti (což ale běžný uživatel neřeší). Existuje k němu použitelný uživatelský manuál a podporuje i různé simulace. Po nakonfigurování uživatel vyexportuje obsah konfigurační paměti ve vybraném formátu. Tu pak nahraje do zařízení a už může testovat a ověřovat.

Konfiguraci je možné zapsat buď do nevolatilní paměti - tedy tak aby si obvod pamatoval svou konfiguraci i po vypnutí napájení. Což je přesně to co potřebujete když chcete hotové zařízení vypustit do světa. A nebo je možné konfiguraci zapsat do volatilní paměti, díky čemuž je obvod možné rekonfigurovat za chodu - to je postup, který využijete při ladění (nebo pokud chcete zařízení rekofigurovat průběžně přímo z MCU, jako jsem chtěl já když jsem obvod plánoval v roli "multi-multiplexeru"). Z téhož důvodu jsem nemohl využít originální programátor, který tou dobou stejně nebyl zrovna na skladech. A proto jsem tedy prostudoval datasheet a napsal jednoduchý program, který po I2C přepisuje celou nebo části konfigurační paměti a tím obvod rekonfiguruje. No a když už jsem to měl napsané, přišlo mi škoda to nedokončit a nevypustit do světa jako open source programátor. No a to je celý příběh tak nějak v kostce.

Obvod SLG47004 má mnoho digitálních stavebních bloků shodných jako SLG4682x, ale navíc je vybaven operačními zesilovači, digitálními potenciometry (řízenými přes I2C), analogovými přepínači a má tedy větší "analogovou" podporu. Další obvody řady GreenPAK mají ještě spoustu zajímavých prvků, ale buď nejsou I2C konfigurovatelné a nebo mají jen OTP (One Time Programable) paměť a tedy nejsou pro domácí aplikaci, nebo kusovou výrobu praktické.

K výuce existuje mnoho tutoriálů ve stylu "use case" (hledejte v sekci Documentation), ale nemám představu do jaké míry se z nich lze učit. Já jsem potřebné funkce studovat přímo z datasheetu. V praxi s těmito obvody nemám v podstatě žádné zkušenosti. Krom zmíněného "multi-multiplexeru" jsem v rámci vzdělávání stvořil aplikaci, která převádí SPI na "rozhraní pro chytré RGB LED", protože mi to přišlo jako užitečné (spousta MCU má s tímhle úkolem trochu problém). Tím chci říct, že vlastně nemám moc zkušeností s tím grafickým prostředím a nevím tedy jak moc náročné je jeho studium. Ve druhé půlce tutoriálu vás seznámím s tím jak si stvořit programátor a jak pak nějakou jednoduchou konfiguraci zapsat do obvodu.

/Programátor z Nucleo kitu |

Jak už bylo napsáno, programátor lze koupit a není úplně nejlevnější (na Mouseru i Farnell za cca 740kč). Alternativní možností je vytvořit si "improvizovaný" v podstatě z libovolného MCU. Já jsem sáhl po vývojovém kitu Nucleo STM32G031K8 protože je levný, mám jich spoustu a stačí na to sám o sobě. V principu věci na to ale stačí i Arduino (tady je i oficiální návod jak na to, ale je to podle mě nepraktické). Následuje step by step tutoriál jak udělat programátor z Nucleo kitu.

  1. Opatřete si Nucleo G031K. Bude dostupné na Mouser, Farnnel, TME a všude možně.
  2. Stáhněte si STM32CubeProgrammer (Nutná registrace na mail... vopruz) a nainstalujte ho.
  3. Stáhněte si můj firmware (v0.2) - g031_greenpak_dbgr.elf
  4. Zapojte Nucleokit k PC (přes USB) a počkejte až se najdou ovladače
  5. Spusťte STM32 CubeProgrammer
  6. Klikněte vpravo nahoře na "Connect". Vpravo dole se zobrazí STM32G031. Pokud si to program vyžádá proveďte aktualizaci firmwaru Nucleo kitu.
  7. Po připojení, zvolte kartou "Open File" (případně symbol "+") a nalistujte stažený .elf soubor (firmware pro MCU)
  8. Klikněte vpravo nahoře na "Download" a do MCU na Nucleo kitu se nahraje program
  9. Klikněte na "Disconnect"
  10. Odpojte a znovu připojte nuclekit k USB
V tomto okamžiku by jste měli mít nahraný program do MCU na Nucleo kitu, který funguje jako programátor pro výše zmíněné obvody GreenPAK. V případě komplikací si stáhněte manuál ke CubeProgrammeru a hledejte postup jak zapsat program do MCU.

Spojení CubeProg s Nucleo kitem a výběr .efl souboru

Zapsání programu do MCU na Nucleo Kitu


/Zápis konfigurace do obvodu (SLG)|

No a teď se pojďme podívat na step by step návod jak do čipu (SLG) nahrát nějakou primitivní "aplikaci". Ne proto abychom se nějak seznamovali s vývojovým prostředím, ale abychom si ověřili že náš "toolchain" funguje a je schopen konfiguraci do čipu zapsat. Demonstraci provedu na modulku SLG47004-DIP a vyvedu na jeho PIN19 signál 2.048kHz z jednoho z interních oscilátorů. Na snímku obrazovky můžete vidět jak taková konfigurace vypadá. Jen velmi stručně shrnu pár bodů. V pravé kartě "Components" si vybírám funkční bloky které umístím do schematu. V levé kartě "properties" je nakonfiguruji a ve schematu je pak mezi sebou propojuji. Na vodorovné liště nad schematem, označené NVM bits pak přehledně vidím jak se všechny moje volby "propisují" do konfigurační paměti. Modře jsou zvýrazněny všechny bity, které se ke zvolenému funkčnímu bloku vážou, zeleně pak ty které jsem změnil na hodnotu 1 a červeně na hodnotu 0.


Ukázka konfigurace obvodu v prostředí GoConfigure.
Jakmile máme konfiguraci připravenou, musíme programátor propojit s obvodem. Obvod (nebo v mém případě kit) potřebuje napájení. To jsem si pro jednoduchost vyvedl z Nucleo kitu. Zvolil jsem 5V (piny 5V a GND), klidně ale zvolte 3.3V, nebo kit napájejte z jiného zdroje. Dále jsem zapojil I2C sběrnici. Na Nucleo kitu (od teď budu psát programátoru) jsou to piny označené D1 (SCL) a D0 (SDA), viz pinout. Mezi piny A7 a 5V můžete umístit jumper, kterým volíte zápis do nevolatilní (trvalé) paměti (bez jumperu se zapisuje do volatilní paměti - vhodné při ladění). Umístění napájecí pinů a SDA a SCL na cílovém obvodu (SLG) najdete buď v datasheetu a nebo v dokumentaci ke kitu (pokud používáte "DIP" kity). Na fotce níže je připojen kit SLG47004-DIP jehož přehledný pinout je v dokumentaci. Nezapomeňte na SDA i SCL připojit pullup rezistory s hodnotou mezi 3k3 až 10k.

Ukázka konfigurace obvodu v prostředí GoConfigure.
Když máte vše propojeno, můžete si z GoConfigure exportovat obsah paměti a zapsat ho do obvodu následujícím postupem (ilustrovaným na obrázcích):
  1. V GoConfigure kliknu na "File->Export->Export NVM", zvolím formát CSV a soubor si někde uložím.
  2. Podívám se do správce zařízení na kterém COMportu je připojen můj programátor (Nucleo kit)
  3. Otevřu terminálový program, zde RealTerm, zvolím COMport
  4. Nastavím komunikační rychlost na 115200b/s, délku zprávy na 8bit, 1 stop bit, žádnou paritu a žádný flow control (což je krom rychlosti výchozí nastavení)
  5. v dolní části karty "Send" kliknu na ikonku "..." a zvolím cestu k CSV souboru
  6. Kliknu na "Send File" a počkám na odpověď programátoru
  7. V Okně terminálu si přečtu odpověď programátoru
  8. Pokud jsem programoval do nevolatilní paměti a chci aby se její obsah "uplatnil", odpojím a znovu připojím napájení obvodu. Pokud jsem zapisoval do volatilní paměti, konfigurace je už platná.

Vyhledání čísla COM portu a kongifurace RealTermu

Výsledek zápisu do volatilní paměti

Výsledek zápisu do nevolatilní paměti (NVM) - je patrné mazání a zápis blok po bloku

Pro další nahrávání už stačí pouze opakovat kroky 1. a 6. Při pokusech si dávejte pozor na případnou změnu I2C adresy. Úpravou bloku I2C (v GoConfigure) ji lze změnit. Programátor před každou konfigurací adresy proskenuje a pokusí se najít na jaké adrese se obvod hlásí, takže by se s její změnou měl vyrovnat. Ale pro začátečníka je vhodné adresy neměnit a když už ano, tak po důkladnějším studiu datasheetu. Z toho důvodu nesmí být na sběrnici zapojené žádné další zařízení, které by mohlo programátor zmást. V principu by nebyl problém sdělit I2C adresu programátoru nějakou jinou formou (externím přepínačem atp.), ale to už se mi nechtělo programovat (potřebujete-li takové funkce, kupte si origo nebo si stáhněte firmware na konci článku a upravte si ho).

Firmware v programátoru je "prototyp". Obsahuje některé ochranné prvky. Například v přijatém obrazu konfigurační paměti vynuluje bity pro její zamčení. Takže čistě teoreticky, pokud uděláte při konfiguraci chybu a omylem je nastavíte, tak by nemělo hrozit že čip definitivně zamčete. Nevýhoda je v tom že když ho opravdu budete chtít zamčít, nepůjde to - v takovém případě mě kontaktujte a pošlu vám firmware pro Nucleo bez toho ochranného prvku. Jak už jsem předeslal, je to prototyp a tudíž se v něm mohou (a nejspíš budou) vyskytovat nějaké chyby.

Poznámky

Odkazy

Home
V0.91 31.8.2024
By Michal Dudka (m.dudka@seznam.cz)