Automatické číslování procesorů PIC

petrnik 0

SQTP (serial quick turn programming) je funkce, umožňující přidělit každému procesoru unikátní číslo při nahrávání firmware. Obyčejně ji mívají jen profesionální programátory, ale podporuje ji i MPLAB IPE. MPLAB IPE se instaluje spolu s MPLAB X IDE a jako programátor lze použít i PICkit3. Podívejme se tedy, jak SQTP v MPLAB IPE funguje.

Spustíme IPE, zvolíme náš procesor PIC16F18875 a v pokročilém režimu (Settings/Advanced Mode) se přepneme na záložku SQTP.

IPE - SQTP

Zde máme na výběr ze tří metod generování. Ponecháme stranou náhodné a pseudonáhodné sekvence, které se hodí spíše pro generování přístupových kódů, a zvolíme sekvenční. Umístění vygenerovaného čísla ponecháme v programové paměti. Zkusíme zadat startovní číslo FFFA, inkrementaci 1, adresu 8002, délku slova 2 bajty a stiskneme tlačítko Generate, abychom viděli, co se stane. IPE požádá o zadání jména souboru a uloží jej s příponou num. To je vše. A co je v tomto souboru?

Na první pohled to vypadá jako soubor hex. Na druhý pohled je zvláštní, že každá řádka odkazuje na stejnou adresu 4. Do každé řádky se totiž vygenerovalo číslo jednoho zařízení. Protože jsme nechali vygenerovat deset čísel, máme deset řádek. První řádka souboru definuje horních 16 bitů adresy na 0x0001. Máme tedy adresu 0x10004. To je v pořádku, hex soubory pro PIC zdvojnásobují hodnotu adresy, protože na lichých adresách je uložen horní bajt programového slova.

Nyní už jen použití souboru num. Vrátíme se na záložku Operate, nejprve načteme hex soubor s naším firmwarem a potom načteme SQTP soubor. (Záleží na pořadí, jinak hodnota z hex souboru přepíše číslo z SQTP.) Podíváme se na paměť User ID (Window/Target Memory Views/User ID Memory), kde vidíme číslo z SQTP souboru.

Naprogramujeme procesor.

Voilà, po úspěšném naprogramování se načetlo další číslo zařízení!

A kam si IPE zaznamená, která čísla ze seznamu již použil? Podívejme se znovu do SQTP souboru:

Zdánlivě žádná změna. Ale přeci: Na začátku řádku s číslem FFFA je místo dvojtečky středník !

Zde bychom mohli končit, ale ještě máme dva problémy:

  1. generátor SQTP souborů má chyby a různá omezení
  2. nutnost načítat při každém programování dva soubory.

1. Vygenerování vlastního SQTP souboru

Generátor SQTP v IPE generuje vícebajtové hodnoty v řazení little endian (nejnižší řád první), a nelze přepnout na big endian. Navíc, pokud zvolíme jako lokaci čísla user ID, neumí pro náš procesor vůbec vygenerovat číslo přes více slov. Naštěstí není těžké si napsat jednoduchý prográmek, který příslušný soubor vygeneruje. Řekněme, že chceme pro číslování 2^16 procesorů použít spodní bajty z user ID 2 a 3, v řazení big endian. Příslušný prográmek by potom mohl vypadat takto:

Po přeložení stačí spustit třeba takto:

java -jar ~/NetBeans_projects/Id23/dist/Id23.jar >id23.num

Nyní je id23.num požadovaný SQTP soubor, který lze z MPLAB IPE rovnou použít.

2. Využití environment

Při používání SQTP je výhodné využít tzv. environment, tedy uložení všech nastavení, obsahů pamětí a SQTP souboru do jednoho místa. Vytvoříme ho tak, že načteme správný soubor hex, SQTP a zkorigujeme všechna nastavení. Potom otevřeme záložku Environment. Zvolíme jméno pro environment, formát .pen (doporučený pro PICkit), soubor SQTP a případně zadáme nějaké doplňující informace (bez diakritiky). Jména přikládaných souborů mohou mít příponu nejvýše 3 znaky (??). Stiskneme tlačítko Save to PC a zvolíme adresář pro uložení.

Vytvoří se adresář, který se jmenuje stejně jako náš environment, kam se uloží soubor .pen (konfigurace), .bin (obrazy pamětí), nakopíruje se tam soubor .num (SQTP). Tato kopie se používá výhradně s tímto prostředím a původní soubor se tedy již nemění. Též se tam nakopírují případné další zadané soubory s doplňujícími informacemi.

Nyní je třeba načíst vytvořené prostředí, aby se uplatnila právě vytvořená kopie SQTP souboru.

Tak a teď už můžeme sekat procesory jako Baťa cvičky.

Pozn. Verze 4.20 neumí načíst SQTP z uloženého prostředí pod Linuxem (obrácené lomítko v cestě). Verze 4.15 (původní grafika) je o.k. a verzi 5.00 ještě nemám.

 

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.