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 :(
Zobrazit citovaný text (3 řádky)
> 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 :)
Zobrazit citovaný text (6 řádků)
> 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
Zobrazit citovaný text (1 řádek)
> 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
Zobrazit citovaný text (5 řádků)
>
> 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