Ještě k tomu bootloaderu odolnému proti chybám v komunikaci

Pavel Kořenský pavel.korensky@dator3.cz
Úterý Leden 10 23:32:35 CET 2006


Zdravím,

děkuji za rady ohledně bootloaderu.

Nejspíš si ho napíšu sám a měl bych zhruba následující myšlenku:

1. Do PIC se přenáší soubor abcd.hex přímo v ASCII tvaru, každý řádek je
několik packetů přenosu. Řádek končí speciálním packetem
2. Packety jsou číslované, mají nějaký úvod a jako nožičky a závěr se
posílá CRC.
3. Pokud packet dorazí v pořádku, posílá se zpět ACK.
4. Pokud packet dorazí chybně, posílá se zpět NACK s číslem vadného
packetu.
5. Pokud se vrátil NACK, opakuje PC poslání packetu s číslem, které bylo
v NACK.
6. Pokud zpět nedorazil ACK ani NACK, tak PC zkouší poslat poslední
packet několikrát a pokud pořád nic, tak signalisace chyby.
7. Packety se posílají tak, že každý ASCII znak je kódovaný pomocí 50/50
kódování kvůli spolehlivosti přenosu přes radio-modem.
8. Pokud jsou packety pro řádek přijaty v pořádku, bootloader vybalí z
packetů data (tedy jednu řádku .HEX souboru) a data zapíše po ověření CS
do paměti.
9. Pokud dojde k fatálnímu selhání přenosu, bootloader se vrací na
začátek a čeká na nový start přenosu.

Zapomněl jsem na něco ???

Buffer pro přijetí celého programu do RAM bohužel nemám. Mohl bych do
robota přidat I2C FRAM (mám je v šuplíku), ale pokud to bude fungovat
tak bych jí tam nerad cpal.
Šifrování není potřeba, jedná se víceméně o hračku a nikoli o komerční
projekt. Jde mi jenom o to, aby byl upload firmware bezproblémový,
protože pokud to celé uveřejním na Webu, nechci řešit, proč se někomu v
Austrálii kousnul robot a co s tím má dělat. :-)



Zdraví PavelK




Další informace o konferenci Hw-list