Surová data tak, jak byla v roce 2013 stažena z Pandory (HTML zdroj bez úprav, osobní e-mailové adresy jsou maskované).
<!-------------------------------------------------------------->
<!-------------------------------------------------------------->
<table width="100%"><tr><td align="left" valign="middle"></td><td align=right valign="middle"></td></tr></table><BR> <font><br/> Takze jsem nahrubo otestoval chovani SIO a tady je dalsi znackovana verze. Prozatim jeste taguju "postaru". Od priste to mozna zacneme znacit nejak chytreji.<br/> <br/> Zmeny a novinky (nektere uz tady byly zmineny, ale chci aby bylo vse pohromade):<br/> <br/> 1.) Je potreba udelat opravu zapojeni signalu RTS a CTS u obvodu FT232RL - viz tento strucny navod <a href="http://ordoz.com/sharp/unicard_files/oprava_PCB_RTSCTS_u_FT232RL/">http://ordoz.com/sharp/unicard_files/oprava_PCB_RTSCTS_u_FT232RL/</a><br/> <br/> 2.) Byl konecne nejak dotazen Ushell, tady je jednou a naposledy jeho kompletni popis, ktery lze jinak nalezt v hlavicce souboru USARTshell.c:<br/> <br/> /*<br/> *<br/> * USARTshell bezi na USART1, ktery se pri startu nastavi na 115200 bps.<br/> *<br/> * Pokud existuje soubor /unicard/ushelldisabled.cfg, tak je po startu USART1 ihned k dispozici<br/> * pro Sharpa jako emulovane SIO.<br/> *<br/> * Po startu se USARTshell vzdy ozve hlasenim "Unicard - USART Shell" a na dalsim radku <br/> * oznami reset prostredi "OK:RESET".<br/> *<br/> * Chovani USARTshellu je ovlivnitelne ze Sharpa pres API MZFREPO:<br/> *<br/> * cmdUSHELLON - zapnuti shellu, vypnuti emu_SIO<br/> * cmdUSHELLOFF - vypnuti shellu, zapnuti emu_SIO<br/> * cmdUSART1BPS - nastaveni BPS pro USART1<br/> *<br/> * Pri vkladani prikazu je na USART1 vraceno s kazdym znakem jeho echo, takze v terminalu<br/> * bude videt co se do unikarty pise.<br/> *<br/> * Zadost o provedeni vkladaneho prikazu se provede zaslanim znaku s hodnotou<br/> * mensi jak 0x20 a vetsi, nez 0x00. Po vlozeni takoveho znaku posle unikarta <br/> * znak '\'n' (0x0d, 0x0a).<br/> *<br/> *<br/> * Prikazy USARTshellu:<br/> * ====================<br/> *<br/> *<br/> * \'x00<br/> * Jediny binarni prikaz.<br/> * Provede reset vstupniho prikazoveho bufferu.<br/> * Pokud se cte soubor, nebo adresar, tak bude zavren.<br/> * Po vykonani prikazu unikarta odpovi "\'nOK:RESET\'n".<br/> *<br/> * <br/> * MKDIR <path><br/> * Vytvorit adresar. Odpoved "OK:MKDIR <path>\'n" pokud se jej podarilo <br/> * vytvorit, jinak "ERR:MKDIR <path>\'n".<br/> *<br/> *<br/> * UNLINK <filepath><br/> * Smazat soubor/adresar. "OK:UNLINK <filepath>\'n" pokud se smazal, <br/> * nebo "ERR:UNLINK <filepath>\'n" pri chybe.<br/> *<br/> *<br/> * FILELIST <path><br/> * Vypise obsah adresare stejnym zpusobem, jakym to dela MZFREPO jen s<br/> * tim rozdilem, ze mezi polozkami posila 0x0d, 0x0a.<br/> * Pri uspesnem otevreni adresare vraci "OK:FILELIST <path>\'n", pak <br/> * nasleduje seznam souboru. Na konci seznamu posle "OK:FILELIST_DONE\'n".<br/> * Pokud se nepodarilo adresar otevrit, tak vraci "ERR:FILELIST <path>\'n".<br/> * Pokud pri nacitani jednotlivych polozek adresare dojde k chybe,<br/> * tak unikarta posle "ERR:READDIR\'n"<br/> *<br/> * READDIR <path><br/> * Precteni polozek adresare v binarni strukture FILINFO.<br/> *<br/> * READ <filepath><br/> * Otevre soubor pro cteni. Vraci "OK:READ <filepath>\'n". Potom nasleduje<br/> * jiz v binarnim tvaru jako DWORD pocet bajtu, ktere budou poslany a <br/> * za nimi je poslan obsah souboru. <br/> * Po uspesnem odeslani nasleduje hlaseni o uzavreni souboru a CRC32 "OK:CLOSE 0x????????\'n". <br/> * Pokud pri cteni souboru dojde k chybe, tak posle "ERR:READ\'n" a dalsi data jiz neposila. <br/> *<br/> *<br/> * OPEN <filepath><br/> * NEW <filepath> <br/> * Otevre soubor pro zapis. NEW - zaklada vzdy novy soubor, pokud<br/> * jiz existuje, tak vrati "ERR:NEW <filepath>\'n", jinak "OK:NEW <filepath>\'n".<br/> * Pri pouziti OPEN bude existujici soubor prepsan, pokud neexistuje, tak<br/> * se vytvori novy a nasleduje OK:, nebo ERR:.<br/> * Po uspesnem otevreni souboru prejde vstup USARTshellu do binarniho rezimu<br/> * ve kterem ocekava jako DWORD pocet bajtu, ktere budou do souboru zapsany.<br/> * Po prijeti techto 4 bajtu unikarta posle HEX ASCII hodnotu cisla, ktere <br/> * prijala, napr. "OK:SIZE 0xdeadbeef\'n". Dalsi bajty uz jsou ulozeny do <br/> * otevreneho souboru.<br/> * Po uspesnem prenosu oznami uzavreni souboru a CRC32 "OK:CLOSE 0x????????\'n".<br/> * Pokud pri zapisu dojde k chybe, tak unikarta posle "ERR:WRITE\'n" a<br/> * ukonci binarni rezim.<br/> * Pokud dele nez 2 sekundy neprijdou zadna data, tak unikarta soubor<br/> * uzavre a prejde zpet do prikazoveho rezimu s hlasenim "ERR:DATA_TIMEOUT\'n".<br/> *<br/> *<br/> * FDDREMOUNT <0..3><br/> * Odmountuje prislusnou FD mechaniku a zavola remount, ktery se provede<br/> * standardne podle obsahu /unicard/fd<0..3>.cfg<br/> *<br/> * DATE<br/> * DATE YYYY-MM-DD HH:MM:SS<br/> * Bez parametru vrati aktualni cas. Pokud jsou uvedeny parametry,<br/> * tak se pokusi podle nich nastavit datum a cas v RTC a vrati takovy<br/> * cas, jaky se po teto zmene vyskytuje v RTC.<br/> *<br/> *<br/> */<br/> <br/> <br/> <br/> 3. Byl pridan modul emu_SIO, ktery zpristupnil pro Sharpa USART1. Pro spravnou funkci SIO je potreba aktualizovat firmware arbitra CPLD XC9356.<br/> Zde je popis chovani a obsluhy, ktery je mozne nalezt v hlavicce souboru emu_SIO.c:<br/> <br/> /*<br/> *<br/> * SIO data port: 0x52<br/> * SIO cmd/status port: 0x53<br/> *<br/> *<br/> * Rychlost portu v bps se nastavuje pres API MZFREPO jako dword.<br/> *<br/> *<br/> * Status:<br/> * =======<br/> * 0. bit - nastaven oznamuje data v prijimacim bufferu<br/> *<br/> * 1. bit - sdeluje aktualni stav signalu CTS<br/> *<br/> * 2. bit - oznamuje volne misto v odesilacim bufferu<br/> *<br/> * 3. bit - <br/> *<br/> * 4. bit - 1 = aktivni RX interrupt<br/> *<br/> * 5. bit - 1 = aktivni TX interrupt<br/> *<br/> * 6. bit - 1 == error, RX data lost - doslo k pokusu o zapis do RX bufferu<br/> * ve kterem uz nebylo v tu chvili misto<br/> * Po vyskytu chyby zustane bit nastaven az do RESET, nebo ERRRES.<br/> * <br/> * 7. bit - 1 == error, TX data lost - doslo k pokusu o zapis do TX bufferu<br/> * ve kterem uz nebylo v tu chvili misto<br/> * Po vyskytu chyby zustane bit nastaven az do RESET, nebo ERRRES.<br/> */<br/> <br/> /*<br/> *<br/> * Prikazy:<br/> * ========<br/> *<br/> * Pozn.: Horni 2 bity prikazu se pouzivaji pro rizeni internich stavu WR,RD a dalsi bajt registru.<br/> * Prikaz je nyni dekodovan jako 4 bitove cislo podle bitu 0 az 3. <br/> */<br/> <br/> #define siocmdRESET 0x00<br/> /*<br/> * RESET Provede reset portu, tzn.: zlikviduje aktualni obsah prijimaciho i <br/> * odesilaciho bufferu, vynuluje registry RXINT a TXINT, zakaze <br/> * generovani interruptu EINT = 0, zapne RTS a CTS rizeni toku. <br/> * Vynuluje citac ztracenych bajtu a tim i bity 6 a 7 ve statusu.<br/> */<br/> <br/> #define siocmdERRRES 0x01<br/> /*<br/> * ERRRES Vynuluje citac ztracenych bajtu a tim i bity 6 a 7 ve statusu.<br/> */<br/> <br/> #define siocmdERRGET 0x02<br/> /* ERRGET Vrati 2 bajty - stav citace ztracenych bajtu pro RX a TX. Pokud je <br/> * pocet ztracenych bajtu vetsi, nez 255, tak vraci 0xff.<br/> */<br/> <br/> #define siocmdEINT 0x03<br/> /*<br/> * EINT Povoli generovani interruptu, EINT = 1.<br/> */<br/> <br/> #define siocmdDINT 0x04<br/> /*<br/> * DINT Zakaze generovani interruptu, EINT = 0.<br/> */<br/> <br/> #define siocmdRXINT 0x05<br/> /*<br/> * RXINT Nasledujicim zapisem se nastavi minimalni pocet bajtu, ktere musi byt <br/> * v prijimacim bufferu, aby byl vyvolan interrupt. Nulova hodnota zakazuje<br/> * generovani interruptu podle stavu prijimaciho bufferu.<br/> * Pokud po prikazu nasleduje cteni, tak obdrzime hodnotu, ktera je nyni v RXINT.<br/> */<br/> <br/> #define siocmdTXINT 0x06<br/> /* <br/> * TXINT Nasledujicim zapisem se nastavi minimalni pocet volnych bajtu, ktere musi byt <br/> * k dispozici v odesilacim bufferu, aby byl vyvolan interrupt. Nulova hodnota zakazuje<br/> * generovani interruptu podle stavu odesilaciho bufferu.<br/> * Pokud po prikazu nasleduje cteni, tak obdrzime hodnotu, ktera je nyni v TXINT.<br/> */<br/> <br/> #define siocmdRXBUF 0x07<br/> /*<br/> * RXBUF Naslednym ctenim zjistime aktualni pocet bajtu v prijimacim bufferu.<br/> * Prectenim dalsiho bajtu obdrzime celkovou velikost prijimaciho bufferu - 1.<br/> */<br/> <br/> #define siocmdTXBUF 0x08<br/> /*<br/> * TXBUF Naslednym ctenim zjistime aktualni pocet volnych bajtu v odesilacim bufferu.<br/> * Prectenim dalsiho bajtu obdrzime celkovou velikost odesilaciho bufferu - 1. <br/> */<br/> <br/> #define siocmdRTS 0x09<br/> /*<br/> * RTS Zapisem dalsiho bajtu nastavime rizeni toku RTS 0 - vypnuto, cokoliv jineho zapnuto.<br/> * Ctenim zjistime aktualni stav tohoto nastaveni.<br/> * Po vypnuti eizeni toku prejde signal RTS do urovne '1'.<br/> */<br/> <br/> #define siocmdCTS 0x0a<br/> /*<br/> * CTS Zapisem dalsiho bajtu nastavime rizeni toku CTS 0 - vypnuto, cokoliv jineho zapnuto.<br/> * Ctenim zjistime aktualni stav tohoto nastaveni.<br/> */<br/> <br/> #define siocmdRTSBIT 0x0b<br/> /*<br/> * RTSBIT Prectenim bajtu zjistime aktualni stav signalu RTS. Pokud je rizeni toku<br/> * pomoci RTS vypnuto, tak potom zapisem muzeme uroven tohoto signalu zmenit.<br/> * Pri zapnutem rizeni toku pres RTS bude zapis ignorovan.<br/> */<br/> <br/> <br/> 4. Do MZFREPO byl pridan prikaz pro zjisteni stavu interruptu volaneho z unikarty:<br/> <br/> #define cmdINTCALLER 0x11 // Sdeli kdo je volajicim interruptu. Kody volajicich periferii jsou definovany v mzint.<br/> //<br/> // Vystup: 1B - mzintFLAG<br/> <br/> V tuto chvili mame v mzint definovany tyto 3 ID periferii, ktere mohou volat interrupt:<br/> <br/> #define mzintFDC (1 << 0)<br/> #define mzintSIORX (1 << 1)<br/> #define mzintSIOTX (1 << 2)<br/> <br/> <br/> 5. V souvislosti s Ushellem a SIO byly do MZFREPO pridany tyto prikazy:<br/> <br/> // USART:<br/> #define cmdUSHELLON 0x70 // Zapne USARTshell, vypne emu_SIO.<br/> <br/> #define cmdUSHELLOFF 0x71 // Vypne USARTshell, zapne emu_SIO.<br/> <br/> #define cmdUSARTBPS 0x72 // Nastaveni BPS pro USART1.<br/> //<br/> // Vstup: DWORD - rychlost<br/> <br/> <br/> Na mem webu je nyni aktualni verze .bin s FW pro STM32. Stejne tak jsem tam nahral i .jed a .svf s FW pro CPLD.<br/> Zdrojove kody a Linuxovy komunikacni program pro praci s Ushellem naleznete na svn.<br/> <br/> Michal<br/> <br/> </font>