Re: Card Flash - wolny odczyt/zapis.



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
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




Poprzedni Następny
Wiadomość
Spis treści
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






Poprzedni Następny
Wiadomość
Spis treści
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



Poprzedni Następny
Wiadomość
Spis treści
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