Konference: Počítač SHARP MZ-800 a emulátory

Od: Michal Hučík
Datum: 31.10.2011 08:10
Předmět: Re: Unikarta FW rev.60


Ahoj Martine,

podivam se do tveho zdrojaku, zalozim v svn dalsi adresar a pokusim se 
to dat cele dohromady tak, aby bylo mozne vyrobit kompilovanec pro oba 
systemy - kdyz tak detaily jeste doresime mimo konferu.

S tim CRC jsem se taky natrapil uz kdyz jsem prepisoval Xmodem pro Z80, 
protoze mi nesedely moje soucty s temi, ktere posilal na konci packetu 
protokol z minicomu.
Nakonec jsem prisel na to, ze ty prenosove protokoly zrejme pouzivaji 
trochu jine CRC16 a CRC32, nez jake jake je bezne zvykem.
Do unikarty jsem pouzil CRC z baliku protokolu lrzsz, ktere v Linuxu 
pouziva minicom.

Co se tyka toho malloc, tak mas pravdu - mel bych to osetrit a nebo 
jeste lepe bych to mel zacit stahovat data do PC nejakym jinym zpusobem ...

Trochu se bojim, ze ty potize, ktere jsi zaznamenal s prenosem do 
unikarty by mohly mit co docineni s manualnim vystavovanim RTS :(
Pri svych experimentech s RS232 na unikarte jsem zjistil, ze i kdyz 
unikarta nastavi RTS = 1, tak PC jeste chvilku posila data. Tohle mi 
delalo problemy, kdyz jsem ponechal nastavovani RTS ciste na STM32 - 
procesor ihned po prijeti jednoho bajtu nastavil RTS = 1 a drzel ho v 
teto urovni dokud jsem si ten bajt neprevzal. To fungovalo pekne do 
doby, nez nastal cas pro ulozeni dat z bufferu na SD.  Prave tehdy jsem 
zjistil, ze PC ze setrvacnosti poslalo dalsi bajt navzdory tomu, ze uz 
mu to uroven RTS zakazovala. V STM32 pak prijeti tohoto bajtu zpusobilo 
to, ze se RTS opet nastavilo do urovne 0. Proto jsem ten semafor zacal 
ridit rucne tak, ze vystavuju RTS=1 ve chvili, kdy mi zbyvaji posledni 2 
volne bajty v bufferu a RTS = 0 ve chvili, kdy mam volne alespon 3 
bajty. Mozna mas ukecanejsi RS232 a 2 bajty pak nestaci.
Na tohle si budu muset najit trochu vic casu. Pichnu to na analyzer a 
zkusim si s tim RS232 pohrat v nejakem samostatnem kodu mimo unikartu, 
protoze to chovani je akosi divne a to rucni rizeni asi nebude uplne 
idealni zpusob jak to resit :(

> Podle toho, jak se vypisuji ty tecky pri cteni a zapisu je videt, ze 
> se cteni bufferuje cca po 2 kB, kdyzto zapis se hned a plynule odesila.
>

S temi buffery v PC je to docela legracni. Kdyz experimentalne na 
unikarte ignoruju CTS a snazim se poslat vse najednou, tak v PC 
samozrejme nepochytam vsechny bajty. Proto jsem prave zacal pouzivat ten 
malloc() se kterym jsem si nejprve udelal dostatecne misto pro prijem 
dat. Kdyz jsem pak chtel v PC precist vse pres read ( pd, memory, 
kompletni_delka ), tak jsem odchytil jen prvnich 24 bajtu.
Kdyz jsem to vsak dal cist po jednom bajtu, ktery se hned ulozil do te 
alokovane pameti, tak jsem precetl prvni 4kB a zbytek sel nekam do haje. 
Experimentoval jsem potom i s tim, ze se unikarta snazila davkovat data 
pro PC, ale to uz jsou takove docela obskurni metody pro rizeni 
komunikace :)

> Taky mne napadlo jedno drobne vylepseni UShellu. Nechces tam dodelat 
> VER prikaz? Ja si to obcas testuju pres Putty, idealne po nahrani 
> noveho fw a tak bych hned vedel, ze je
>
> to ok. Monza by stacilo jen prihodit verzi do hlasky po resetu.
>

Pridal bych to asi jako dalsi parametr za hlasku OK:RESET txt_verze_firmware

 > kraje desky, takze mi tam nejde poradne zastrcit kabel s koncovkami. 
Tak jsem to pres redukce prodlouzil, ale ani tak mi to neslape. Mozna 
mam blby kabel, budu to muset
>
> premerit. Taky muzu mit nejakou zradu na portu v PC. Nejlepsi co se mi 
> podarilo dostat je pri resetu Unikarty par paznaku. Zkousel nekdo 
> normalni serial na Unikarte?
>

Konektor pro RS232 je na unikarte trochu utopeny, takze jsem musel z 
konektoru na kabelu sundat krytky, abych ho tam dokazal natlacit. Pro 
komunikaci mezi PC a unikartou je potreba krizeny kabel ve kterem jsou 
piny propojeny nasledovne:

Rx - Tx
Tx - Rx
RTS - CTS
CTS - RTS
GND - GND

Pak je samozrejme potreba prepojit oba switche, ktere jsou mezi RS232 a 
miniUSB tak, aby se propojil krajni a stredni pin pobliz toho konektoru, 
ktery chces pouzivat - bez prehozeni switche nelze posilat data z portu 
do unikarty.

Michal


Ostatní příspěvky vlákna:

 
[2011/1 (52)] [2011/2 (9)] [2011/3 (2)] [2011/4 (9)] [2011/5 (8)] [2011/7 (1)] [2011/8 (40)] [2011/9 (146)] [2011/10 (116)] [2011/11 (29)] [2011/12 (110)]


[1999 (1)] [2000 (168)] [2001 (733)] [2002 (459)] [2003 (654)] [2004 (224)] [2005 (105)] [2006 (182)] [2007 (201)] [2008 (294)] [2009 (363)] [2010 (782)] [2011 (522)] [2012 (642)] [2013 (442)]