------------------------------------------------------------------------------ * Komunikacny protokol medzi PP 01 a PP01-SD-ROM * * Verzia FW 0.9 * * 02. December 2018 * ------------------------------------------------------------------------------ Komunikacia medzi PP 01 a PP01-SD-ROM je pomocou asynchronnej seriovej linky. Parametre prenosu su nastavene na 9600 Bd, 8 datovych bitov a 1 stop bit. PP 01 je v ulohe Mastera, PP01-SD-ROM je v ulohe Slave. To znamena, ze PP 01 posiela povely, na ktore PP01-SD-ROM odpoveda. Kazdy povel je reprezentovany jednym znakom, pred ktorym je vzdy "synchro" byte 0AAh a je ukonceny CRC. CRC je XOR vsetkych bytov povelu. Iniciacna hodnota pre vypocet CRC je 0AAh, co je v pripade odosielaneho povelu prakticky "synchro" byte. Odpoved od PP01-SD-ROM zacina ACK (33h) alebo NAK (99h). NAK sa posiela v pripade, ze ocakavany byte nebol prijaty do 5 ms, alebo ak je chybne CRC. V pripade NAK uz PP01-SD-ROM neposiela dalsie data a ocakava dalsi povel. V pripade ACK nasleduje ERR (kod chyby) a dalej moze nasledovat odpoved (data, CRC), ktora zavisi od konkretneho povelu. Po prijati platneho povelu (znamy povel, spravne CRC), PP01-SD-ROM okamzite odosiela ACK a prejde do vykonnej fazy, ktora moze trvat rozne dlho, v zavislosti od povelu. Preto musi PP 01 pri cakani na odpoved zvolit zodpovedajucu dlzku timeoutu. ERR je kod chyby, CRC je XOR vsetkych bytov odpovede za ERR, teda mimo ACK, NAK a ERR. Pociatocna hodnota pre vypocet CRC je opat 0AAh. Aktualne vykonavane povely: @, 0, 1, K, L, M, R, r, O, o, P, C, c, B, D, d, F, N, A, a Povely, ktore zatial nie su realizovane: T, t Chybove kody (ERR): - 0 OK - 1 fatal error - 2 file/dir name too long - 3 file/dir not found - 4 file access/seek error - 5 file read error - 6 file write error - 7 file delete error - 8 file not opened - 9 end of file reached - 10 file too long - 11 disk full - 12 directory not empty - 13 file or directory already exist - 14 invalid name for file or directory ------------------------------------------------------------------------------- - povel `@` - zistenie verzie FW |--------------------------------|------|--------------------------------| | PP 01 | smer | PP01-SD-ROM | |--------------------------------|------|--------------------------------| | "@" | ---> | | | CRC | ---> | | | | <--- | ACK/NAK | | | <--- | ERR | | | <--- | VER | | | <--- | CRC | |--------------------------------|------|--------------------------------| VER je verzia FW PP01-SD-ROM. V hornych 4 bitoch je Major verzia, v dolnych 4 bitoch je Minor verzia. ERR je vzdy 00h. ------------------------------------------------------------------------------- - povel `0` - vyber SRAM banky 0 - povel `1` - vyber SRAM banky 1 |--------------------------------|------|--------------------------------| | PP 01 | smer | PP01-SD-ROM | |--------------------------------|------|--------------------------------| | "0"/"1" | ---> | | | CRC | ---> | | | | <--- | ACK/NAK | | | <--- | ERR | |--------------------------------|------|--------------------------------| ERR je vzdy 00h. Pozor! Zmena banky sa okamzite prejavi na primapovanych pamatovych blokoch 0F8h az 0FBh. Takze ak je napr. vybrana banka 1 s Managerom a je primapovany blok 0FBh do pamatoveho priestoru a v nom bezi kod, tak po vybere banky 0 tento kod "zmizne". Prepinanie baniek musi byt teda v RAM, mimo blokov ROM Modulu. ------------------------------------------------------------------------------- - povel `K` - ziskanie aktualnej cesty na SD karte |--------------------------------|------|--------------------------------| | PP 01 | smer | PP01-SD-ROM | |--------------------------------|------|--------------------------------| | "K" | ---> | | | CRC | ---> | | | | <--- | ACK/NAK | | | <--- | ERR | | | <--- | LEN | | | <--- | 'LEN' znakov cesty | | | <--- | CRC | |--------------------------------|------|--------------------------------| Dlzka aktualnej cesty na SD karte moze mat maximalne 127 znakov. Treba vsak pocitat s rezervou pre meno suboru, pretoze maximum 127 znakov plati aj pre celu cestu k suboru. ------------------------------------------------------------------------------- - povel `L` - ziskanie polozky aktualneho adresara na SD karte (katalog) |--------------------------------|------|--------------------------------| | PP 01 | smer | PP01-SD-ROM | |--------------------------------|------|--------------------------------| | "L" | ---> | | | MASK_LEN_NEXT | ---> | | | 'MASK_LEN' znakov masky mena | ---> | | | CRC | ---> | | | | <--- | ACK/NAK | | | <--- | ERR | | | <--- | LEN | | | <--- | 'LEN' znakov mena polozky | | | <--- | ATTR | | | <--- | dlzka suboru (DWORD) | | | <--- | CRC | |--------------------------------|------|--------------------------------| Parameter `MASK_LEN_NEXT` urcuje, ci sa vrati prva alebo dalsia polozka adresara. Ak je hodnota parametra v intervale <0, 31>, tak sa vrati prva polozka, ktora zodpoveda za nim nasledujucej maske mena suboru. Hodnota >31 znamena vratenie dalsej polozky v adresari, ktora zodpoveda predtym zadanej maske a teda v tomto pripade uz nasleduje iba CRC. Hodnota 0 znamena vratenie vsetkych suborov, teda akoby bola zadana maska '*.*'. Maska mena suboru moze obsahovat Wildcards - zastupne znaky - '*' a '?' s obvyklym vyznamom. `LEN` je dlzka mena polozky (mena suboru/adresara) a moze byt maximalne 31 znakov. `ATTR` su atributy suboru, kde 4. bit oznacuje polozku adresara. V pripade adresara je dlzka suboru 0. Ak sa nenajde ziadna/dalsia polozka, LEN = 00h a ATTR = 00h a dlzka suboru je 0. ------------------------------------------------------------------------------- - povel `M` - zmena aktualneho adresara na SD karte |--------------------------------|------|--------------------------------| | PP 01 | smer | PP01-SD-ROM | |--------------------------------|------|--------------------------------| | "M" | ---> | | | LEN | ---> | | | 'LEN' znakov mena adresara | ---> | | | CRC | ---> | | | | <--- | ACK/NAK | | | <--- | ERR | |--------------------------------|------|--------------------------------| Maximalna dlzka mena adresara LEN je 31 znakov. ------------------------------------------------------------------------------- - povel `R` - vlozenie suboru do ROM Modulu |--------------------------------|------|--------------------------------| | PP 01 | smer | PP01-SD-ROM | |--------------------------------|------|--------------------------------| | "R" | ---> | | | LEN | ---> | | | 'LEN' znakov mena suboru | ---> | | | adresa v ROM Module (WORD) | ---> | | | CRC | ---> | | | | <--- | ACK/NAK | | | <--- | ERR | |--------------------------------|------|--------------------------------| Nacitanie suboru do ROM Modulu - do Banky 0 SRAM. Zadava sa iba meno suboru, ktory musi byt v aktualnom adresari SD karty. V adrese v ROM Module sa neberu do uvahy horne 2 bity. Do pamate sa ulozi iba cast suboru, ktora sa tam vojde. To znamena, ze ak je subor vacsi, nebude v pamate cely. Ak je kratsi, bude cast pamate modulo 1 kB vyplnena hodnotou 0FFh. Meno suboru LEN moze mat maximalne 31 znakov. ------------------------------------------------------------------------------- - povel `r` - vlozenie suboru do ROM Modulu |--------------------------------|------|--------------------------------| | PP 01 | smer | PP01-SD-ROM | |--------------------------------|------|--------------------------------| | "r" | ---> | | | LEN | ---> | | | 'LEN' znakov cesty k suboru | ---> | | | adresa v ROM Module (WORD) | ---> | | | CRC | ---> | | | | <--- | ACK/NAK | | | <--- | ERR | |--------------------------------|------|--------------------------------| Nacitanie suboru do ROM Modulu - do Banky 0 SRAM. Zadava sa uplna cesta k suboru. V adrese v ROM Module sa neberu do uvahy horne 2 bity. Do pamate sa ulozi iba cast suboru, ktora sa tam vojde. To znamena, ze ak je subor vacsi, nebude v pamate cely. Ak je kratsi, bude cast pamate modulo 1 kB vyplnena hodnotou 0FFh. Dlzka cesty k suboru LEN moze mat maximalne 127 znakov. ------------------------------------------------------------------------------- - povel `O` - otvorenie suboru pre citanie |--------------------------------|------|--------------------------------| | PP 01 | smer | PP01-SD-ROM | |--------------------------------|------|--------------------------------| | "O" | ---> | | | LEN | ---> | | | 'LEN' znakov mena suboru | ---> | | | CRC | ---> | | | | <--- | ACK/NAK | | | <--- | ERR | | | <--- | dlzka suboru (DWORD) | | | <--- | CRC | |--------------------------------|------|--------------------------------| Otvorenie suboru pre citanie. Zadava sa iba meno suboru, ktory musi byt v aktualnom adresari SD karty. 4 kB bloku zo suboru mozno pripravit do suboroveho buffra povelom `P`. Meno suboru LEN moze mat maximalne 31 znakov. ------------------------------------------------------------------------------- - povel `o` - otvorenie suboru pre citanie |--------------------------------|------|--------------------------------| | PP 01 | smer | PP01-SD-ROM | |--------------------------------|------|--------------------------------| | "o" | ---> | | | LEN | ---> | | | 'LEN' znakov cesty k suboru | ---> | | | CRC | ---> | | | | <--- | ACK/NAK | | | <--- | ERR | | | <--- | dlzka suboru (DWORD) | | | <--- | CRC | |--------------------------------|------|--------------------------------| Otvorenie suboru pre citanie. Zadava sa uplna cesta k suboru. 4 kB bloku zo suboru mozno pripravit do suboroveho buffra povelom `P`. Dlzka cesty k suboru LEN moze mat maximalne 127 znakov. ------------------------------------------------------------------------------- - povel `P` - precitanie 4 kB bloku z otvoreneho suboru |--------------------------------|------|--------------------------------| | PP 01 | smer | PP01-SD-ROM | |--------------------------------|------|--------------------------------| | "P" | ---> | | | CRC | ---> | | | | <--- | ACK/NAK | | | <--- | ERR | | | <--- | COUNT (WORD) | | | <--- | CRC | |--------------------------------|------|--------------------------------| Zo suboru otvoreneho povelmi `O` alebo `o` sa precita 4 kB blok a pripravi sa do Banky 1 SRAM od adresy 12288 (3000h), co je v PP-01 4 kB Blok s cislom 0FBh. COUNT urcuje pocet bytov, ktore sa zapisali do buffra. ------------------------------------------------------------------------------- - povel `T` - vyber PTA suboru |--------------------------------|------|--------------------------------| | PP 01 | smer | PP01-SD-ROM | |--------------------------------|------|--------------------------------| | "T" | ---> | | | LEN | ---> | | | 'LEN' znakov mena suboru | ---> | | | CRC | ---> | | | | <--- | ACK/NAK | | | <--- | ERR | |--------------------------------|------|--------------------------------| Vyber PTA suboru, z ktoreho sa bude citat alebo sa bude zapisovat. Zadava sa iba meno suboru, ktory musi byt v aktualnom adresari SD karty. Meno suboru LEN moze mat maximalne 31 znakov. ------------------------------------------------------------------------------- - povel `t` - vyber PTA suboru |--------------------------------|------|--------------------------------| | PP 01 | smer | PP01-SD-ROM | |--------------------------------|------|--------------------------------| | "t" | ---> | | | LEN | ---> | | | 'LEN' znakov cesty k suboru | ---> | | | CRC | ---> | | | | <--- | ACK/NAK | | | <--- | ERR | |--------------------------------|------|--------------------------------| Vyber PTA suboru, z ktoreho sa bude citat alebo sa bude zapisovat. Zadava sa uplna cesta k suboru. Dlzka cesty k suboru LEN moze mat maximalne 127 znakov. ------------------------------------------------------------------------------- - povel `C` - vytvorenie suboru pre zapis |--------------------------------|------|--------------------------------| | PP 01 | smer | PP01-SD-ROM | |--------------------------------|------|--------------------------------| | "C" | ---> | | | LEN | ---> | | | 'LEN' znakov mena suboru | ---> | | | CRC | ---> | | | | <--- | ACK/NAK | | | <--- | ERR | |--------------------------------|------|--------------------------------| Vytvorenie suboru, do ktoreho sa bude zapisovat. Zadava sa iba meno suboru, ktory sa vytvori v aktualnom adresari SD karty. Meno suboru LEN moze mat maximalne 31 znakov. ------------------------------------------------------------------------------- - povel `c` - vytvorenie suboru pre zapis |--------------------------------|------|--------------------------------| | PP 01 | smer | PP01-SD-ROM | |--------------------------------|------|--------------------------------| | "c" | ---> | | | LEN | ---> | | | 'LEN' znakov cesty k suboru | ---> | | | CRC | ---> | | | | <--- | ACK/NAK | | | <--- | ERR | |--------------------------------|------|--------------------------------| Vytvorenie suboru, do ktoreho sa bude zapisovat. Zadava sa uplna cesta k suboru. Dlzka cesty k suboru LEN moze mat maximalne 127 znakov. ------------------------------------------------------------------------------- - povel `B` - zapis bloku dat do suboru |--------------------------------|------|--------------------------------| | PP 01 | smer | PP01-SD-ROM | |--------------------------------|------|--------------------------------| | "B" | ---> | | | LAST | ---> | | | COUNT | ---> | | | 'COUNT' bytov dat | ---> | | | CRC | ---> | | | | <--- | ACK/NAK | | | <--- | ERR | |--------------------------------|------|--------------------------------| Zapis do suboru otvoreneho povelmi `C` alebo `c`. Pocet bytov zapisovaneho bloku dat COUNT moze byt v intervale <1, 256>, kde pre 256 prenasanych bytov musi byt COUNT=0. LAST >0 oznacuje posledny blok, co znamena, ze sa subor korektne uzavrie. ------------------------------------------------------------------------------- - povel `D` - zmazanie suborov podla zadanej masky |--------------------------------|------|--------------------------------| | PP 01 | smer | PP01-SD-ROM | |--------------------------------|------|--------------------------------| | "D" | ---> | | | MASK_LEN | ---> | | | 'MASK_LEN' znakov masky mena | ---> | | | CRC | ---> | | | | <--- | ACK/NAK | | | <--- | ERR | |--------------------------------|------|--------------------------------| Parameter `MASK_LEN` je dlzka masky mazanych suborov a moze byt v intervale <1, 31> znakov. Mazanie suborov sa robi v aktualnom adresari SD karty. Tento povel neumoznuje mazat adresare. Ak aj mena adresarov zodpovedaju zadanej maske, budu pri prechadzani aktualneho adresara vynechane. ------------------------------------------------------------------------------- - povel `d` - zmazanie prazdneho adresara |--------------------------------|------|--------------------------------| | PP 01 | smer | PP01-SD-ROM | |--------------------------------|------|--------------------------------| | "d" | ---> | | | LEN | ---> | | | 'LEN' znakov mena adresara | ---> | | | CRC | ---> | | | | <--- | ACK/NAK | | | <--- | ERR | |--------------------------------|------|--------------------------------| Meno adresara LEN moze mat maximalne 31 znakov. Mazany adresar musi byt prazdny. ------------------------------------------------------------------------------- - povel `F` - vytvorenie adresara |--------------------------------|------|--------------------------------| | PP 01 | smer | PP01-SD-ROM | |--------------------------------|------|--------------------------------| | "F" | ---> | | | LEN | ---> | | | 'LEN' znakov mena adresara | ---> | | | CRC | ---> | | | | <--- | ACK/NAK | | | <--- | ERR | |--------------------------------|------|--------------------------------| Vytvorenie adresara v aktualnom adresari SD karty. Meno adresara LEN moze mat maximalne 31 znakov. ------------------------------------------------------------------------------- - povel `N` - premenovanie suboru alebo adresara |--------------------------------|------|--------------------------------| | PP 01 | smer | PP01-SD-ROM | |--------------------------------|------|--------------------------------| | "N" | ---> | | | LEN1 | ---> | | | 'LEN1' znakov stareho mena | ---> | | | LEN2 | ---> | | | 'LEN2' znakov noveho mena | ---> | | | CRC | ---> | | | | <--- | ACK/NAK | | | <--- | ERR | |--------------------------------|------|--------------------------------| Premenovanie suboru alebo adresara v aktualnom adresari SD karty. Mena LEN1 a LEN2 mozu mat maximalne 31 znakov. ------------------------------------------------------------------------------- - povel `A` - ziskanie/nastavenie atributov suboru |--------------------------------|------|--------------------------------| | PP 01 | smer | PP01-SD-ROM | |--------------------------------|------|--------------------------------| | "A" | ---> | | | LEN | ---> | | | 'LEN' znakov mena suboru | ---> | | | REQ_ATTR | ---> | | | CRC | ---> | | | | <--- | ACK/NAK | | | <--- | ERR | | | <--- | ATTR | | | <--- | dlzka suboru (DWORD) | | | <--- | CRC | |--------------------------------|------|--------------------------------| Ziskanie a nastavenie atributov suboru. Zadava sa iba meno suboru, ktory musi byt v aktualnom adresari SD karty. Meno suboru LEN moze mat maximalne 31 znakov. REQ_ATTR je maska pozadovanych atributov. Do uvahy sa beru iba atributy R, H, S a A. Bit oznacujuci adresar sa zachovava. Ak ma REQ_ATTR hodnotu 255, povel iba vrati aktualne atributy a dlzku suboru. ------------------------------------------------------------------------------- - povel `a` - ziskanie/nastavenie atributov suboru |--------------------------------|------|--------------------------------| | PP 01 | smer | PP01-SD-ROM | |--------------------------------|------|--------------------------------| | "a" | ---> | | | LEN | ---> | | | 'LEN' znakov cesty k suboru | ---> | | | REQ_ATTR | ---> | | | CRC | ---> | | | | <--- | ACK/NAK | | | <--- | ERR | | | <--- | ATTR | | | <--- | dlzka suboru (DWORD) | | | <--- | CRC | |--------------------------------|------|--------------------------------| Ziskanie a nastavenie atributov suboru. Zadava sa uplna cesta k suboru. Dlzka cesty k suboru LEN moze mat maximalne 127 znakov. REQ_ATTR je maska pozadovanych atributov. Do uvahy sa beru iba atributy R, H, S a A. Bit oznacujuci adresar sa zachovava. Ak ma REQ_ATTR hodnotu 255, povel iba vrati aktualne atributy a dlzku suboru. -------------------------------------------------------------------------------