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