pso
Petr Porazil
Návrh hardware
adr
bvh

Zavaděč (boot) pro procesory PIC18


Petr Porazil Home
peda
Linux a PIC
PIC32MX
Zavaděč (boot)
Programátor pprg
RS232 příklad
RS232 knihovna
TTL RS232
Solární systém
Ukázky aplikací PIC
Download

Novinky 16.9.2010 - USB

Na procesorech s USB řadičem, může zavaděč komunikovat i přes USB (zkoušeno na PIC18F26J50). Funguje jako emulátor obvodu FT232BM, takže se to chová, úplně stejně jako při komunikaci přes sériový port s použitím převodníku USB na RS232..

Úvod

ISP programování procesorů je celkem pohodlné a rychlé. K desce se připojí kabel spustí de program a během několika sekund je hotovo. Problém nastává tehdy, když je deska zabudovaná v přístroji, pak rozebrání přístroje může trvat mnohonásobně déle, než vlastní programování.

U zařízení které mají možnost komunikace s okolím, např. přes sériový port se nabízí možnost tuto komunikaci využít i pro programování. Pro tento účel jsem napsal zavaděč, který se přes ISP nahraje do procesoru a pak už se vlastní program nahrává přes standardní komunikaci. Podobnou věc nabízí i Microchip ( AN1310), ale já jsem si napsal vlastní a to z několika důvodů.

Hlavní důvod je složitý komunikační protokol. Můj boot používá velmi jednoduchý protokol, ke kterému v případě komunikace přes sériový port není potřeba žádný software. Stačí terminálový program který umí vkládat prodlevu mezi řádky.

Další důvod je použití jiných rozhraní než jen sériový port. Můj boot může se stejným protokolem komunikovat i přes I2C a CAN.

Protokol

Jak už jsem napsal výše můj boot používá velmi jednoduchý komunikační protokol, přijímá přímo řádky HEX souboru. Po přijetí každé řádky pošle odpověď. Pokud je vše v pořádku je odpověď OK, v případě chyby je to E a číslo chyby.

Posílání textu přes sériový port je jasné a je možné jej dělat i přes terminálový program. Je pouze potřeba po každé řádce počkat na odpověď. Abych mohl nahrávání spouštět s příkazové řádky, napsal jsem si na to jednoduchý program, který je součástí balíku pprg.

V případě komunikace přes CAN je pouze potřeba řádku rozdělit do několika zpráv, protože maximální délka zprávy je 8byte. Odpověď se vejde do jedné zprávy.

U komunikace přes I2C se boot chová jako slave zařízení, odeslání řádky tedy není problém. Přečtení odpovědi je komplikovanější. Při čtení je vždy možné přečíst jeden byte, který říká, kolik dalších byte je připraveno.

Po resetu se spustí boot jeho spuštění je indikováno vysláním řádky "BOOT01". Pak čeká nastavenou dobu, pokud po tuto dobu nezačne komunikace, boot spustí aplikaci.

Použití

Pro použití je nutno boot zkompilovat pro konkrétní procesor s konkrétním nastavením. Nastavení se provádí přes soubor defs.h. Příklad kompilace je součástí příkladu sériové komunikace.

Základní verze se sériovou komunikací, bez kontroly programu při spouštění se vejde do 1kB, při složitějších požadavcích je velikost do 2kB. U procesorů s 16 a více kB, rezervuji na boot vždy 2kB i když to není potřeba.

Nastavení parametrů

V souboru defs.h je možné nastavit následující parametry:

BOOT_RS232 povolení sériové komunikace
BOOT_IIC povolení I2C
BOOT_CAN povolení CAN. Současně může být povoleno více komunikačních rozhraní.
APP_START Adresa začátku aplikace. Pro správné zkompilování aplikace je potřeba upravit i linker script.
APP_LENGTH Délka aplikace. Pokud je nastavena boot po naprogramování aplikace spočítá kontrolní součet a uloží ho do posledních tří byte datové eeprom. Při každém startu pak kontroluje neporušenost programu. Pokud kontrolní součet neodpovídá, aplikace se nespustí a boot zůstane aktivní.
BOOT_TIME Doba po kterou je po zapnutí aktivní boot.
ERASE_BLOCK Velikost bloku flash pro mazání.
PROG_BLOCK Velikost bloku flash pro zápis. Tyto dva údaje je potřeba nastavit podle typu procesoru.
BOOT_STARTWAIT Prodleva před spuštěním bootu po resetu. Někdy je potřeba pro ustálení oscilátoru.


(C) Petr Porazil 2010-11, poslední úprava 16.09.2010