Multiboot v UV-K5 QUANSHENG: jak Losehu obchází limit 64 KB flash

Spektrální analyzátor, SSB přes přidaný SI4732, automatická dopplerovská korekce pro satelity. Do jednoho firmwaru pro Quansheng UV-K5 se to nevejde a nikdy nevešlo. Mikrokontrolér DP32G030 má 64 kilobajtů flash, bootloader si z toho ukrojí svoje a autoři custom buildů pak roky řeší, kterou funkci vyhodit, aby se vešla jiná.

Vývojář vystupující jako losehu to vyřešil oklikou. Nechal firmwary bydlet v externí EEPROM a napsal bootloader, který si vybraný obraz před startem překopíruje do flash. Projekt se jmenuje uv-k5-bootloader-custom a jeho jediný release nese číslo 0.02. Níž je rozepsané, jak to funguje, kolik pájení to obnáší a proč to na vaší stanici nejspíš nepojede.

Bootloader, který nastartuje druhý bootloader

Architektura je dvoustupňová a to je na celém projektu ten nejchytřejší kus. LOSEHU_BASE_BOOT nahradí tovární bootloader Quanshengu přímo ve flash procesoru. Při zapnutí načte z EEPROM soubor L_BLXXX.bin do RAM a skočí do něj. Teprve tenhle druhý stupeň umí to podstatné: čte firmware z EEPROM, zapisuje ho do flash a mluví původním sériovým protokolem, takže běžné flashovací nástroje fungují dál.

Proč takhle složitě? Protože prvnímu stupni musí zbýt místo. Menu s výběrem obrazů, čínská znaková sada, obsluha I²C sběrnice – to se do zbytku 64KB flash vedle firmwaru samotného nenacpe. Tak to leží v paměti a do RAM se natáhne jen na těch pár vteřin, než si uživatel vybere.

Přirovnání ke GRUBu sedí přesně napůl. GRUB umí nastartovat systém z libovolného oddílu, kdežto tady se vybraný obraz pokaždé fyzicky přepíše do jediného slotu. Přepnutí firmwaru proto chvíli trvá a ukrajuje z počtu zápisových cyklů flash.

Dva M24M02 na sobě, žádná deska navíc

Podmínka je jednoznačná: 4Mib EEPROM, tedy 512 kB. Tovární UV-K5 má osm kilobajtů, typicky čip řady 24C64.

Rozdíl je šedesátičtyřnásobek.

Po fórech koluje varianta s malou adaptérovou deskou pro dva čipy. Jenže autor projektu na přímý dotaz v diskuzi na GitHubu odpověděl mnohem prozaičtěji: dva kusy M24M02 a druhý připájet naskládaný na první, s adresovacím pinem na VCC. Piggyback, jak se tomu říkalo za časů modování herních konzolí.

Žádné vlastní PCB.

Jeden detail, na kterém se dá pohořet. M24M02 spotřebuje dva bity device-select interně na pokrytí svých 2 Mbit, takže externě zbývá jediný chip-enable. Proto losehu mluví o jednom pinu, ne o trojici vstupů A0 až A2, jak se občas píše v překladech čínských návodů. Než sáhnete po páječce, ověřte si zapojení v datasheetu podle konkrétního suffixu pouzdra.

Kolik obrazů se do paměti vejde, jde spočítat z mapy EEPROM v repozitáři. Prvních 256 kB je rezervovaných pro data běžného firmwaru, čtyři kilobajty drží tabulku obrazů, necelých dvanáct kilobajtů zabírá druhý bootloader a na firmwary samotné zbývá 240 kB. Jeden obraz přitom nesmí přesáhnout 60 kB, protože se musí vejít do flash procesoru.

Vyjdou z toho čtyři sloty.

Tabulka sice pojme až 64 záznamů, jenže to je datová struktura, ne reálná kapacita. Kdo počítá s tuctem verzí na přepínání, bude zklamaný.

Nejdřív zjistěte, jakou K5 vlastně máte

Tohle většina návodů odbývá jednou větou, a přitom to rozhoduje o všem ostatním. Bez správné revize hardwaru je zbytek článku akademická rozprava.

Rodina UV-K5 se prodává pod jmény UV-K5, UV-K5(8), UV-K6, UV-K5(99) nebo UV-5R Plus, v rebrandu Radtel jako RT-590 a RT-600, přičemž stejný kus železa přebalený do jiné krabice s jiným logem a jinou verzí továrního firmwaru je v téhle branži spíš pravidlo než výjimka. Název na krabici neříká skoro nic. Napříč řadou se používají tři různé hlavní procesory a firmware pro jeden z nich na druhém nenaběhne.

Losehu bootloader potřebuje revizi V1 s procesorem DP32G030 – Cortex-M0, 64 kB flash, 8 kB konfigurační EEPROM a rádiovou část na BK4819. Novější kusy jedou na PY32F030 (revize V2, PCB verze 1.8) nebo PY32F071 (revize V3). Autor nástroje K5TOOL upozorňuje, že po nahrání firmwaru pro starší revizi tyhle stanice prostě nenastartují. V2 se pozná podle značení v bateriové přihrádce.

Vyndejte baterku a podívejte se. Trvá to deset vteřin a může vám to ušetřit zkažené odpoledne.

Kde to naráží

Instalace není záležitost programovacího kabelu. Bočním konektorem nahrajete firmware, ne bootloader, takže se musí otevřít ručku a připájet na SWD body na desce. Autor v README výslovně píše, že potřebujete ST-Link nebo J-Link, a skripty k tomu leží ve složce bl-toolkit. Obrazy firmwaru se pak zapisují přes webový nástroj K5Web. Riziko je zřejmé: nahrazujete tovární bootloader, a losehu k tomu v README přidává suché varování, že stanice se během flashování může stát cihlou, on za to neručí a projekt je open source právě proto, aby si každý za svoje kroky odpovídal sám. Po nepovedeném zápisu boční konektor nepomůže. Vůbec. Než začnete, vytáhněte si kalibraci – v továrním rozložení sedí na adresách 0x1E00 až 0x2000 a k5tool ji stáhne jedním příkazem.

Po komunitě koluje ještě jedno tvrzení, u kterého jsem opatrný. Prý mod zhoršuje citlivost přijímače zhruba ze −120 na −116 dBm. Nejdřív mi to znělo jako věrohodný důsledek dlouhých vodičů na I²C sběrnici kousek od vstupního dílu. Když jsem ale hledal zdroj, nenašel jsem žádné měření, které by to spojovalo právě s EEPROM modem. Zato existuje dobře doložená debata o citlivosti u custom firmwaru, kde uživatel v issue u egzumeru popisuje na UHF −119 dB proti 126 až 127 dB u továrního buildu. Podezřívám, že se ty dvě věci někde po cestě slily do jedné pověsti.

Celý ten cirkus s pájením dvou pamětí má navíc omezenou životnost. Losehu paralelně vyvíjí projekt uv-k5-system-custom, který má UVK5 umožnit načítat a spouštět firmware větší než 64 kB. Jestli to dotáhne, přepínání obrazů ztratí smysl, protože všechny funkce se vejdou do jediného buildu. Do té doby zůstává multiboot jedinou cestou, jak mít ve stejné stanici spektrální analyzátor i satelitní doppler.

Poznámka k rozsahu textu:

Všechno výše je zatím teorie. Vycházím z repozitářů losehu, z odpovědí
autora v diskuzích a z dokumentace okolních nástrojů. Sám jsem tu úpravu
zatím neudělal, mám ji v plánu a tenhle článek vznikl jako příprava na ni.

Až se k pájení dostanu, doplním sem postup krok za krokem, fotky
naskládaných pamětí a poznámky k tomu, co se nepovedlo napoprvé.

Ta poslední kategorie bývá u podobných modů obvykle nejdelší.

Loading