Ještě k tomu bootloaderu odolnému proti chybám v komunikaci - ach jo, rozhozené řádkování takže znova.
Pavel Kořenský
pavel.korensky@dator3.cz
Úterý Leden 10 23:34:55 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