Re: Card Flash - wolny odczyt/zapis.
Masz problem? Zapytaj na forum elektroda.pl
From: "Tomasz Sawicki" <kotburak_at_nospam_poczta.onet.pl>
Subject: Re: Card Flash - wolny odczyt/zapis.
Date: Wed, 2 Oct 2002 14:47:51 +0200
[ciach]
Wyszukałem miejsce w programie w którym "tracę" najwięcej czasu - okazało
się, że przez ten czas (8ms) karta jest w stanie BUSY.
Według specyfikacji Toshiby Controler Overhead (Command to DRQ) nie
przekracza 4ms.
Co ciekawe, CF ustawia się w stan BUSY po wpisaniu 6 bajtów do rejestrów
sterujących kartą, następnie - kiedy flaga busy zostaje zgaszona bez
problemów ani przestojów zapisuje/odczytuje 512 bajtów danych.
To normalne. Po wydaniu komendy kontroler CF musi przecież odczytać
zawartość pamięci do bufora.
Po tym ustawia DRQ, gasi BSY i wystawia INT. I wtedy można czytać.
Nie znalazłem w dokumentacji od CF informacji ile max czasu może trwac
stan
BUSY, ale 8ms to raczej za dużo.
jw
Czy ktoś ma może dokładnie informacje na ten temat?
Czy ktoś z gupowiczów zajmujących się CF zaobserwował podobne zjawisko?
Nie robiłem pomiaru czasu, u mnie prędkość nie była najważniejsza.
Czy na takie opóźnienia może mieć wpływ zastosowanie 8 bitowej magistrali?
Nie sądzę. Ma to tylko wpływ na prędkośc transferu.
A w jakim trybie masz podłączonego tego CFa?
Jak sprawdzasz stan karty?
Pzdr,
TS
From: "Willow" <kris_willow_at_nospam_hotmail.com>
Subject: Re: Card Flash - wolny odczyt/zapis.
Date: Thu, 3 Oct 2002 08:35:01 +0200
Dziękuje za odpowiedz,
A w jakim trybie masz podłączonego tego CFa?
Podłączyłem CFa do mikrokntrolera w trybie 8bit Memory Mode.
Jak sprawdzasz stan karty?
Odczytuje rejestr statusowy : Satus Register.
W miejscu w którym mam opóźnienie wykonuje następujace kroki:
1. Sprawdzam stan BUSY - 8 bit status register
2. Ustawiam karte w tryb LBA - 7 bit w rejestrze Drive/Head Reg.
3. Wpisuje adres LBA do 4 rejestrów: Sector Number Reg, Cylinder Low Reg,
Cylinder High Reg, Drive/Head Reg.
4. Sprawdzam stan BUSY,
5. Sprawdzam stan Data Ready - 7 bit status register.
Co ciekawe - ponieważ opóźnienia były zdecydowanie za długie, postanowiłem
sprawdzić działanie sprzętu na innej karcie CF. Po zakupie innej karty
(większa objętość, inny producent) opóźnienia zmniejszyły się o 35 % .
Jeśli mają Panowie/Panie jakieś pomysły jak zwalczyć opóźnienia będe
wdzięczny za podpowiedz.
Krzysztof
From: "Tomasz Sawicki" <kotburak_at_nospam_poczta.onet.pl>
Subject: Re: Card Flash - wolny odczyt/zapis.
Date: Thu, 3 Oct 2002 09:47:03 +0200
A w jakim trybie masz podłączonego tego CFa?
Podłączyłem CFa do mikrokntrolera w trybie 8bit Memory Mode.
OK, ja mam TrueIDE 16bit, ale większych róznic być nie powinno.
Jak sprawdzasz stan karty?
Odczytuje rejestr statusowy : Satus Register.
STATUS czy AUX_STATUS? Jak napisałem niżej w niektórych sytuacjach należy
sprawdzać AUX_STATUS.
W miejscu w którym mam opóźnienie wykonuje następujace kroki:
1. Sprawdzam stan BUSY - 8 bit status register
2. Ustawiam karte w tryb LBA - 7 bit w rejestrze Drive/Head Reg.
Za każdym razem? Chyba niepotrzebnie. Wystarczy raz na początku i już. Poza
tym wpisanie LBA pociąga za sobą zmianę drive, co wprowadza opóźnienia,
wprawdzie tylko (min 400ns) ale może być to więcej (pewnie zależy od
modelu).
3. Wpisuje adres LBA do 4 rejestrów: Sector Number Reg, Cylinder Low Reg,
Cylinder High Reg, Drive/Head Reg.
I znowu zmienimasz Drive (lba też) nie spotkałem jeszcze CF, która by
wymagała wpisania tych 4 najstarszych bitów LBA (zawsze 0).
A potem chyba jeszcze wpisujesz Command?
4. Sprawdzam stan BUSY,
5. Sprawdzam stan Data Ready - 7 bit status register.
Ja gdzieś znalazłem w dokumentacji, że po wydaniu komendy nie można więcej
niż raz odczytać STATUS, jeśli sprawdzasz tutaj BSY i DRQ (pewnie w pętli),
to może wprowadzać opóźnienia, używaj tutaj AUX_STATUS.
Aha, no i jeśli tego nie masz to dobrze byłoby żebyś podłączył IRQ. Wtedy po
wpisaniu Comand, czekasz tylko na przerwanie (nie zapomnij o jakimś
timeout).
A w procedurze obsługi przerwania albo czytasz od razu dane i dopiero
później sprawdzasz STATUS, czy błędu nie było, albo ustawiasz DMA (jak w
moim przypadku) i znowu zasypiasz. Masz w ten sposób dużo czasu na inne
działania, np. obsługę USB :)
Co ciekawe - ponieważ opóźnienia były zdecydowanie za długie, postanowiłem
sprawdzić działanie sprzętu na innej karcie CF. Po zakupie innej karty
(większa objętość, inny producent) opóźnienia zmniejszyły się o 35 % .
Jeśli mają Panowie/Panie jakieś pomysły jak zwalczyć opóźnienia będe
wdzięczny za podpowiedz.
Może powyższe pomoże.
Pzdr,
TS
From: "Tomasz Sawicki" <kotburak_at_nospam_poczta.onet.pl>
Subject: Re: Card Flash - wolny odczyt/zapis.
Date: Thu, 3 Oct 2002 09:53:18 +0200
A tak przy okazji mnie też zastanawia jedna sprawa:
Karta CF zwraca mi po INQUIRY ilość sektorów LBA 0x1e100 - Toshiba 64MB.
No i taką wartość zwracam póżniej do USB, przy zapytaniu GET_CAPACITY
Natomiast inny firmowy czytnik zwraca przy GET_CAPACITY 0x1e9ff.
Skąd ta różnica?
Pzdr,
TS