Sterowanie USB Flash Disk - kiem



Masz problem? Zapytaj na forum elektroda.pl

Poprzedni Następny
Wiadomość
Spis treści
From: "Darkac" <darkac2_at_nospam_wp.pl>
Subject: Sterowanie USB Flash Disk - kiem
Date: Tue, 14 Dec 2004 23:53:46 +0100


Buduję układ, który zarządzany procesorem ATmega128, za pośrednictwem
sterownika SL811HST w trybie "host", ma zapamiętywać dane na pamięci typu:
USB Flash Disk (USB Flash Drive, USB Pen Drive - różnie to nazywają).
Program piszę w języku C++ w wersji AVR-GCC za pośrednictwem edytora
AVRSide.
Pierwszy raz robię obsługę urządzenia USB i po próbie przeczytania kilku
opasłych książek o USB, oraz różnych danych i przykładów programów z
Internetu, nabawiłem się potężnego bólu głowy. Jest tego strasznie dużo.
Ciężko mi odcedzić wiedzę niezbędną, od tego co mi jest w tym przypadku
nieprzydatne. A sporo powinno się uprościć. Urządzenie USB będzie tylko
jedno i to jednego znanego typu, podłączone bezpośrednio do "hosta". Jakie
procedury są konieczne aby móc przesyłać i odbierać dane z takiej pamięci?
Bardzo proszę o jakieś wskazówki kogoś, kto miał już do czynienia z takim
zagadnieniem.
Nie mogę znaleźć też nic na temat sterowania tym USB Flash Diskiem. W
plikach typu "datasheet" znalezionych w Internecie, są tylko dane handlowe,
wymiary zewnętrzne, temperatury pracy i inne zbędne mi rzeczy. W żadnym nie
ma nic na temat programowania, rejestrów, adresowania i komunikacji.
Znalazłem opisy układów sterujących pamięciami typu flash za pomocą USB,
które chyba są stosowane w takich Flash Disk-ach. Podane są wyprowadzenia,
wymiary, parametry elektryczne, ale nic o sterowaniu od strony programowej.
Jeśli ktoś może przesłać mi interesujące mnie dane, lub może mi coś
doradzić, pomóc lub podzielić się jakimiś kodami źródłowymi, to bardzo będę
wdzięczny.
Darek




Poprzedni Następny
Wiadomość
Spis treści
From: Adam Dybkowski <adybkows123_at_nospam_amwaw.edu.pl>
Subject: Re: Sterowanie USB Flash Disk - kiem
Date: Wed, 15 Dec 2004 00:51:09 +0100


Darkac wrote:

Buduję układ, który zarządzany procesorem ATmega128, za pośrednictwem
sterownika SL811HST w trybie "host", ma zapamiętywać dane na pamięci typu:
USB Flash Disk

Wow, ciekawy temat. Jak ci już coś wyjdzie działającego to pochwal się
na grupie.

Nie mogę znaleźć też nic na temat sterowania tym USB Flash Diskiem. W
plikach typu "datasheet" znalezionych w Internecie, są tylko dane handlowe,
wymiary zewnętrzne, temperatury pracy i inne zbędne mi rzeczy. W żadnym nie
ma nic na temat programowania, rejestrów, adresowania i komunikacji.

Każdy pendrive (po polsku 'czopek' tudzież 'gwizdek') przedstawia się
jako urządzenie klasy Mass Storage i od opisu tejże powinieneś zacząć
lekturę, sam standard USB jak sądzę znasz. Ogólnie mówiąc chodzi o
implementację prostego podzestawu poleceń interfejsu SCSI typu "odczytaj
sektor[y]". Sam pendrive nic nie wie o systemie plików, można go
sformatować np. na ext3 i też będzie dobrze działać (pod Linuxem).

--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/

Uwaga: przed wysłaniem do mnie maila usuń "123" z adresu.

Poprzedni Następny
Wiadomość
Spis treści
From: JS <_do_not_use__at_nospam_polbox.com>
Subject: Re: Sterowanie USB Flash Disk - kiem
Date: Thu, 16 Dec 2004 10:37:47 +0000 (UTC)


W artykule <cpnu9p$dc5$1_at_nospam_atlantis.news.tpi.pl>
autorem którego mieni się Adam Dybkowski, napisano:

Każdy pendrive (po polsku 'czopek' tudzież 'gwizdek') przedstawia się

Ładny jest też "pędrak" (fonetycznie dość przypomina oryginalną nazwę).

--
Moje konto na Polboksie to jar0sz
Pozdrawiam
Jarosław Szynal

Poprzedni Następny
Wiadomość
Spis treści
From: "Dariusz Zolna" <abc_at_nospam_abc.com>
Subject: Re: Sterowanie USB Flash Disk - kiem
Date: Thu, 16 Dec 2004 18:29:10 +0100


Użytkownik "JS" < do_not_use_at_nospam_polbox.com> napisał:
Ładny jest też "pędrak" (fonetycznie dość przypomina oryginalną nazwę).

Ooo... bardzo mi się to podoba :-)

Darek Żołna



Poprzedni Następny
Wiadomość
Spis treści
From: "Mister" <wojpie_at_nospam_wywal_to.poczta.onet.pl>
Subject: Re: Sterowanie USB Flash Disk - kiem
Date: Wed, 15 Dec 2004 08:27:33 +0100



Buduję układ, który zarządzany procesorem ATmega128, za pośrednictwem
sterownika SL811HST w trybie "host", ma zapamiętywać dane na pamięci typu:
USB Flash Disk (USB Flash Drive, USB Pen Drive - różnie to nazywają).
Program piszę w języku C++ w wersji AVR-GCC za pośrednictwem edytora
AVRSide.

Sprawa jest do zrobienia, trzeba tylko trochę poczytać.
Po pierwsze musisz zrobić enumeracje czyli odczytać informację o sprzęcie,
następnie za pomocą kodów scsi lub jak to usb nazywa UPI odczytać sektory
dysku.
A jak chcesz żebyś mógł odczytać tego pendrive na np. PC to musisz
zaimplementować FAT32.
Bez problemu zrobisz to na 8 bitowcu ale się musisz spodziewać małego
transferu na poziomie kilkudziesięciu KB/s, chyba ze zastosujesz jakiś "DMA"
do kopiowania EP<> Dysk.

Mister



Poprzedni Następny
Wiadomość
Spis treści
From: "Darkac" <darkac2_at_nospam_wp.pl>
Subject: Re: Sterowanie USB Flash Disk - kiem
Date: Wed, 15 Dec 2004 23:41:03 +0100


Sprawa jest do zrobienia, trzeba tylko trochę poczytać.

Czytam już od wielu dni i już spuchła mi głowa. Naczytałem się pewnie wiele
niepotrzebnych mi rzeczy i wszystko mi się miesza. Jestem bardziej
elektronikiem niż programistą i z wieloma pojęciami informatycznymi spotykam
się po raz pierwszy. Czuję się jak uczący się pływać rzucony na głęboką i
pełną wirów wodę. Strasznie dużo teorii i przedstawiania wszystkich
rozbudowanych funkcji, a mało jakiś praktycznych przykładów, szczególnie w
bardzo uproszczonych podstawowych konfiguracjach. Znalezione przykłady kodów
źródłowych sterowników zawierają tysiące wierszy, obsługują najróżniejsze
urządzenia o wszystkich możliwych parametrach, a dodatkowo za pośrednictwem
całej plątaniny Hubów. Ciężko mi z tego zorientować się, co jest tak na
prawdę niezbędne do prostego układu USB: sterownik host <-> Flash Disk

Po pierwsze musisz zrobić enumeracje czyli odczytać informację o sprzęcie,

Co do tej enumeracji, zrozumiałem, że dane o urządzeniu odczytuje się z tak
zwanego EndPoint0. A potem trzeba nadać numer urządzeniu. Jaki? Można 1?
Oprócz EndPointu jest jeszcze coś takiego jak adres urządzenia, które trzeba
podać jeśli się z nim komunikuje. Jaki on ma być, jeśli urządzenie jest
tylko jedno?

następnie za pomocą kodów scsi lub jak to usb nazywa UPI odczytać sektory
dysku.

Co ma wspólnego SCSI z USB Flash Diskiem? Do tej pory SCSI to była dla mnie
wielosygnałowa szybka magistrala do podłączenia pewnych typów twardych
dysków (zresztą rzadko używana w popularnych komputerach).
W czytanej do tej pory literaturze nie spotkałem się ze skrótem UPI.

A jak chcesz żebyś mógł odczytać tego pendrive na np. PC to musisz
zaimplementować FAT32.

Sprawa FAT-u to przyszłościowa sprawa. Na razie chcę móc zapamiętywać dane w
wymyślonym uproszczonym formacie np kolejnych sektorach. Czy musi to być
FAT32, nie może być FAT16 ?

Bardzo dziękuję za każde praktyczne wskazówki. Zawsze to pomoże znaleźć
właściwy kierunek.
Darek





Poprzedni Następny
Wiadomość
Spis treści
From: Adam Dybkowski <adybkows123_at_nospam_amwaw.edu.pl>
Subject: Re: Sterowanie USB Flash Disk - kiem
Date: Thu, 16 Dec 2004 00:42:55 +0100


Darkac wrote:

A jak chcesz żebyś mógł odczytać tego pendrive na np. PC to musisz
zaimplementować FAT32.

Sprawa FAT-u to przyszłościowa sprawa. Na razie chcę móc zapamiętywać dane w
wymyślonym uproszczonym formacie np kolejnych sektorach. Czy musi to być
FAT32, nie może być FAT16 ?

FAT16 nie wejdzie na większy niż kilkudziesięciomegabajtowy pendrive.
FAT32 nie jest dużo bardziej skomplikowany o ile nie bawisz się w długie
nazwy plików (VFAT), co też można rozczaić na podstawie dostępnej
dokumentacji i np. źródeł Linuxa. W kodzie źródłowym co drugiego
przenośnego odtwarzacza MP3 pokroju Yampp'a znajdziesz obsługę FAT32.

--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/

Uwaga: przed wysłaniem do mnie maila usuń "123" z adresu.

Poprzedni Następny
Wiadomość
Spis treści
From: "Mister" <wojpie_at_nospam_wywal_to.poczta.onet.pl>
Subject: Re: Sterowanie USB Flash Disk - kiem
Date: Thu, 16 Dec 2004 08:34:00 +0100


Po pierwsze musisz zrobić enumeracje czyli odczytać informację o
sprzęcie,

Co do tej enumeracji, zrozumiałem, że dane o urządzeniu odczytuje się z
tak
zwanego EndPoint0.
Endpoint zerowy jest na wyposażeniu i musi byćzaimplementowany w każdym
urządzeniu.

A potem trzeba nadać numer urządzeniu. Jaki? Można 1?

Dowolny z zakresu 1-127,czyli np 1.

Oprócz EndPointu jest jeszcze coś takiego jak adres urządzenia, które
trzeba
podać jeśli się z nim komunikuje. Jaki on ma być, jeśli urządzenie jest
tylko jedno?
Nie wiem czy o tym myślisz: każdy device ma swój VID i PID który host
odczytuje i porównuje ze swoją listą referencyją (w praktyce z dostępnymi
sterownikami) i jeżeli rozpozna to urządzenie to kontynuuje enumeracje.


następnie za pomocą kodów scsi lub jak to usb nazywa UPI odczytać
sektory
dysku.

Co ma wspólnego SCSI z USB Flash Diskiem? Do tej pory SCSI to była dla
mnie
wielosygnałowa szybka magistrala do podłączenia pewnych typów twardych
dysków (zresztą rzadko używana w popularnych komputerach).
W czytanej do tej pory literaturze nie spotkałem się ze skrótem UPI.

SCSI to też (uproszczając) protokoł wymiany danych. Istnieje wiele
"rozkazów" typu READ_CAPACITY, READ_10, WRITE etc.
Poszukaj dokumentu na www.usb.org.


A jak chcesz żebyś mógł odczytać tego pendrive na np. PC to musisz
zaimplementować FAT32.

Sprawa FAT-u to przyszłościowa sprawa. Na razie chcę móc zapamiętywać dane
w
wymyślonym uproszczonym formacie np kolejnych sektorach. Czy musi to być
FAT32, nie może być FAT16 ?
To obojętne, wg mnie FAT32 jest prostszy, bo pewne rzeczy są uproszczone,

A tak przy okazji, co to będzie jeżeli można spytać?

Mister



Poprzedni Następny
Wiadomość
Spis treści
From: "Darkac" <darkac2_at_nospam_wp.pl>
Subject: Re: Sterowanie USB Flash Disk - kiem
Date: Thu, 16 Dec 2004 23:09:33 +0100


To ma być tani układ do archiwizacji danych (i ewentualnie przenoszenie do
PC-ta) z rezultatów badań w pewnym sprzęcie medycznym, w którym cyfrowa
elektronika nie oparta jest na komputerze PC.
Znalazłem dokumentację na temat protokółu wymiany danych z urządzeniami typu
"mass storage" za pomocą kodów UFI (nie UPI - to chyba była literówka). Jest
to spore światełko w tunelu nadające pewien kierunek. Nie mniej ten protokół
jest dość skomplikowany, cała masa parametrów, mimo że spora część w tym
przypadku jest stała.
Myślę że główną trudnością tego tematu jest to, że trzeba jednocześnie
prawidłowo uruchomić trzy procesy, co bardzo ogranicza metodę małych kroków
i dochodzenia do prawdy metodą prób i błędów.
Te procesy to:
1. Obsługa sterownika USB.
2. Prawidłowa struktura danych w pakietach USB.
3. Sterowanie urządzenia za pomocą kodów UFI.
Nie da się sprawdzić prawidłowości działania każdego z nich, jeśli inne nie
będą działały prawidłowo. Istnienie w jednym jakiegoś błędu powoduje
rezultat które daje mało informacji co do miejsca jego występowania.
Np. próbujesz uruchomić, a tu nic się nie dzieje, ani dygnie, albo jakieś
głupoty. I co mu teraz zrobisz? Przyczyn może być tysiące.
Już na samym wstępie, przy bardzo prostej rzeczy natknąłem się na rafę.
Umiem wywołać przerwanie spowodowane włożeniem lub wyjęciem urządzenia z
gniazda USB. Według opisów (dwóch różnych) sterownika SL811HST, w przypadku
włożenia jeden z bitów w rejestrze statusu przerwania ma wskazywać czy
urzadzenie jest "low speed" czy "full speed". To działa prawidłowo. Bit ten
się zmienia w zależności od urządzenia które wkładałem do gniazda. Inny z
bitów ma wskazywać czy urządzenie zostało włożone (0) czy wyjęte (1). A tu
co bym nie robił, ten bit zawsze ma wartość 1. Przez długi czas szukałem
przyczyny, kombinowałem i nie znalazłem. Nieźle się zaczyna. A czekają mnie
procedury setki razy trudniejsze.
Darek



Poprzedni Następny
Wiadomość
Spis treści
From: "Mister" <wojpie_at_nospam_wywal_to.poczta.onet.pl>
Subject: Re: Sterowanie USB Flash Disk - kiem
Date: Fri, 17 Dec 2004 08:32:16 +0100



urzadzenie jest "low speed" czy "full speed". To działa prawidłowo. Bit
ten
się zmienia w zależności od urządzenia które wkładałem do gniazda. Inny z
bitów ma wskazywać czy urządzenie zostało włożone (0) czy wyjęte (1). A tu
co bym nie robił, ten bit zawsze ma wartość 1. Przez długi czas szukałem
przyczyny, kombinowałem i nie znalazłem. Nieźle się zaczyna. A czekają
mnie
procedury setki razy trudniejsze.


A nie chciałbyś tego projektu komuś zlecić? ;)


Pozdrawiam
Mister



Poprzedni Następny
Wiadomość
Spis treści
From: "Mister" <wojpie_at_nospam_wywal_to.poczta.onet.pl>
Subject: Re: Sterowanie USB Flash Disk - kiem
Date: Fri, 17 Dec 2004 09:36:21 +0100


się zmienia w zależności od urządzenia które wkładałem do gniazda. Inny z
bitów ma wskazywać czy urządzenie zostało włożone (0) czy wyjęte (1). A tu
co bym nie robił, ten bit zawsze ma wartość 1. Przez długi czas szukałem


A ty (czyli Host) załącza VBUS? i następnie robi USB_reset?

Mister



Poprzedni Następny
Wiadomość
Spis treści
From: Marek Michalkiewicz <spamtrap_at_nospam_amelek.gda.pl.invalid>
Subject: Re: Sterowanie USB Flash Disk - kiem
Date: Fri, 17 Dec 2004 23:53:35 +0100 (CET)


Darkac <darkac2_at_nospam_wp.pl> wrote:

Czytam ju? od wielu dni i ju? spuch?a mi g?owa.

Obsluga USB to rzezba... - a nie moze byc po prostu karta CompactFlash
podlaczona bezposrednio do tego AVR-a? A potem przelozyc do czytnika
CF na USB, widzianego przez system tak samo jak ten "czopek" :)

Marek


Poprzedni Następny
Wiadomość
Spis treści
From: "Andrzej Augustynowicz" <august_at_nospam_csk.pl>
Subject: Re: Sterowanie USB Flash Disk - kiem
Date: Sat, 18 Dec 2004 17:46:54 +0100


Obsluga USB to rzezba... - a nie moze byc po prostu karta CompactFlash
podlaczona bezposrednio do tego AVR-a? A potem przelozyc do czytnika
<ciach>

...albo karta SD/MMC podlaczona do AVR-a.
Sa gotowe biblioteki do zapisu/odczyty w/w.
Co wiecej, to dziala :)

Pozdrawiam
AA



Poprzedni Następny
Wiadomość
Spis treści
From: Jarek Andrzejewski <jareka_at_nospam_dawid.com.pl>
Subject: Re: Sterowanie USB Flash Disk - kiem
Date: Sun, 02 Jan 2005 21:12:57 +0100


On Sat, 18 Dec 2004 17:46:54 +0100, "Andrzej Augustynowicz"
<august_at_nospam_csk.pl> wrote:

...albo karta SD/MMC podlaczona do AVR-a.
Sa gotowe biblioteki do zapisu/odczyty w/w.

możesz jakiegoś URLa podać? Wiem, leń ze mnie, ale sprawdzone - lepsze
pewnie :-)
--
pozdrawiam,
Jarek Andrzejewski

Poprzedni Następny
Wiadomość
Spis treści
From: "Andrzej Augustynowicz" <august_at_nospam_csk.pl>
Subject: Re: Sterowanie USB Flash Disk - kiem
Date: Sun, 2 Jan 2005 21:39:17 +0100


Witam

...albo karta SD/MMC podlaczona do AVR-a.
Sa gotowe biblioteki do zapisu/odczyty w/w.

możesz jakiegoś URLa podać? Wiem, leń ze mnie, ale sprawdzone - lepsze
pewnie :-)

http://www.ulrichradig.de/
w dziale AVR

Sprawdzalem z ATmega8 i dziala.

Pozdrawiam
AA



Poprzedni Następny
Wiadomość
Spis treści
From: Adam Dybkowski <adybkows123_at_nospam_amwaw.edu.pl>
Subject: Re: Sterowanie USB Flash Disk - kiem
Date: Sun, 02 Jan 2005 23:36:18 +0100


Jarek Andrzejewski wrote:

...albo karta SD/MMC podlaczona do AVR-a.
Sa gotowe biblioteki do zapisu/odczyty w/w.

możesz jakiegoś URLa podać? Wiem, leń ze mnie, ale sprawdzone - lepsze
pewnie :-)

Poszukaj źródeł Yampp 7.

--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/

Uwaga: przed wysłaniem do mnie maila usuń "123" z adresu.

Poprzedni Następny
Wiadomość
Spis treści
From: "Mister" <wojpie_at_nospam_poczta.onet.pl>
Subject: Re: Sterowanie USB Flash Disk - kiem
Date: Sat, 18 Dec 2004 20:45:43 +0100



Obsluga USB to rzezba... -

A dlaczego rzeźba? poprostu tydzień pracy i po "kłopocie".

Mister




Poprzedni Następny
Wiadomość
Spis treści
From: "Darkac" <darkac2_at_nospam_wp.pl>
Subject: Re: Sterowanie USB Flash Disk - kiem
Date: Sat, 18 Dec 2004 23:07:49 +0100


Sprzętowo nie da się już nic zmienić. Moduł z obsługą Compact Flasha i z
przewidzianą możliwością dołączenia czegoś USB, jest częścią istniejącego
urządzenia. Karta Compact Flash jest wewnętrznym nie wyjmowalnym elementem.
Trzeba do tego modułu dopisać obsługę tych "czopków", oraz możliwość
wysyłania danych do PC-ta kablem USB (to drugie na deser).

Nie zlecę komuś tego tematu, bo nie poddaję się bez walki przy trudnych
wyzwaniach, a chcę się czegoś nauczyć i poczuć satysfakję. Nie takie rzeczy
robiłem ze szwagrem po pijanemu. Temat jest bardzo trudny, ale mam nadzieję
że z pomocą przyjaznych dusz, powoli, z bólem głowy, ale go rozpracuję.
Myślę, że tak jak ja lubię pomagać innym w dziedzinach na których się znam,
tak są na grupie ludzie z podobnym podejściem.

Jeśli Vbus jest zasilaniem gniazda USB, to oczywiście go załączam po resecie
sprzętowym układu sterownika. Bez tego wogóle nie złaszane byłyby
przerwania. ResetUSB programowy robię jeśli wykryję włożenie urządzenia do
gniazda. Na razie robię to na podstawie ustawienia bitu szybkości
urządzenia. Jak wspomniałem bit obecności urządzenia nie wiem dlaczego jest
zawsze (1) i nie mogę z niego korzystać.
Darek