Zastosowanie mikrokontrolera ...
pdf > do ÂściÂągnięcia > download > ebook > pobieranie
 
Cytat
Ab igne ignem - z ognia ogień. (Cycero). (Cycero)
Start Zaćmienie, Zajecia 2, zaaowanane,
 
  Witamy

Zastosowanie mikrokontrolera 8051 do sterowania ATA ATAPI CDROM, pchomikowane, phill2k, Elektronika, 8051
[ Pobierz całość w formacie PDF ]
Tłumaczenie z języka angielskiego J.Bogusz:
Zastosowanie mikrokontrolera 8051
do sterowania ATA/ATAPI CDROM
© 2000 Jason Nunn
Darwin NT, Australia
jsno@downunder.net.au
jsno@arafura.net.au
Geneza - około godziny 22, w czwartek 15 kwietnia 2000, gra Unreal Tournament, w
którą właśnie sobie grałem, została brutalnie przerwana przez przyjaciela, który wpadł z
niezapowiedzianą wizytą. Powiedział mi o swoim przyjacielu, który chce abym
skonstruował dla niego tani odtwarzacz CD do systemów telefonicznych.
Jego przyjaciel był znanym sprawozdawcą radiowym, ludzie płacili za jego głos
umieszczony w telefonicznych automatach informujących. Pomysł był taki, że nagra on
swój głos na CD i potem mając urządzenie, które będzie odtwarzało to CD, wpuści sygnał
do centrali telefonicznej. Kiedykolwiek ktoś będzie chciał zadzwonić do firmy i pozostać
na podtrzymaniu połączenia, usłyszy jego głos opowiadający o firmie.
Zdecydowałem się na ewentualne wykonanie dla niego tego projektu, przedstawiłem mu
go 25 października 2000, ale ze względu na różne komplikacje a przypuszczalnie z
niedostatku klientów lub innych trudności w opracowaniu całego systemu, projekt nigdy
nie został wykorzystany. Tak więc, zdecydowałem się przekształcić ten projekt w GNU
GPL (przyp. tłum. - darmowy, dostępny dla wszystkich).
Ta dystrybucja zawiera dwa programy. Pierwszy nazwany „cdrom controller”, który jest
prototypem właściwego programu - był mi bardzo pomocny, gdy uczyłem się ATAPI.
Drugi - „onhold” - to jest aktualna finalna aplikacja.
Kilka innych programów, które możesz pobrać to:
-
la51-0.1.tgz to jest asembler, który napisałem. Potrzebny, jeśli będziesz
wykonywał modyfikacje w moim programie.
-
burn-1.19.tar.gz to jest programator eeprom/flash (stworzony we współpracy z
Terry Porterem). Jeśli nie chcesz „przepalić” kilku setek w programatorze,
wówczas możesz go zbudować i użyć.
-
ihex2bin.tar.gz to intelowski konwerter formatu hex na bin. La51 generuje zbiór w
formacie „intelli hex”, natomiast burn potrzebuje zbioru w formacie bin. Ten
program zrobi potrzebną konwersję.
Programy zostały wykonane dla Linux ale powinieneś bez trudu sobie z nimi poradzić.
Możesz znaleźć je na mojej stronie www:
Słowo do tych, którzy poszukują pomocy....
Jeśli jesteś hobbystą i nie masz „zamiarów zarobkowych”, będę szczęśliwy pomagając ci
w jakimkolwiek aspekcie tego projektu. Proszę nie czuj się zakłopotany wysyłając email
jeśli masz jakieś pytania.
Jakkolwiek, jeśli jednak robisz urządzenie w celach komercyjnych, wówczas nie
otrzymasz ode mnie pomocy, dopóki nie zapłacisz. Czy masz uprawnienia do wystawiania
czeków? Jeśli tak, to stawka wynosi 200$ za godzinę przy podpisanym kontrakcie. Jeśli
nie, wówczas proszę - nie marnuj mego wartościowego czasu tak, jak mój ex-klient to
zrobił. Zaczynam być zmęczony firmami i innymi dobieranymi „prośbami” zadręczającymi
mnie zewsząd. Nie jestem organizacją dobroczynną. Jeśli czegoś chcesz - zapłać. Tak jak
ty spodziewasz się być opłaconym.
- strona 1/6 -
Cdrom_controller/cdrom_controller.a51
Kiedy zabrałem się za rozpoznanie ATA/ATAPI nie wiedziałem zupełnie nic na jego temat.
To był dla mnie kawałek wielkiej szarej strefy. Byłem zawsze osłonięty przed nią przez
drivery lub system operacyjny. Jak odkryłem, nie potrzebujesz bardzo szybko
śmigającego procesora aby mówić do urządzenia ATAPI. Prosty 8051 za 4$ może
wykonać dla ciebie tę pracę.
Przez około 4 miesiące rozpoznawałem problem. Odkryłem, że specyfikacja ATAPI SFF-
8021i to jedna wielka pomyłka. Jeśli spojrzysz na literaturę dostępną w sieci, znajdziesz
tutaj wiele wypowiedzi na temat, jak „szokujący” jest ten dokument. „ATAPI references &
Black magic in ATA/ATAPI” napisany przez Constantine Sapuntzakis jest jedną z takich
publikacji, która dyskutuje usterki w specyfikacji i omawia jak uniknąć pewnych
problemów.
W czwartek 26 sierpnia, rozpoczęła się prawdziwa praca nad projektem. Właśnie
otrzymałem płytkę testową (DARMICON development board SAB0C537) - nagroda, którą
dostałem od lokalnego uniwersytetu za osiągnięcie 5 na kursie, który zrobiłem w
ubiegłym roku. Przy pomocy tej płytki, rozpocząłem prace nad projektem. Po dwóch
tygodniach,
cdrom_controller.a51
był gotowy.
cdrom_controller.a51
jest prostym programem prototypowym. Program był stopniowo
rozwijany i pomagał mi powoli uczyć się „rozmawiać” z urządzeniami ATAPI. W teorii
systemów operacyjnych, nazywamy to rozbiegówką projektu. Specyfikacje ATA
(T13/1321D R3) i ATAPI (SFF-8029i) są cholernie wielkie! Są świetne jako podstawka do
podniesienia monitora lub jeśli masz zakładnika, mógłbyś przypuszczalnie uderzać go za
pomocą specyfikacji T13/1321D aby zaczął mówić ;). Obie specyfikacje są bardzo
deprymujące pod względem objętości.
Pisanie tego prototypu musiało być mozolnym rozpracowywaniem jak „mówić” do
urządzenia ATAPI. Szara strefa w specyfikacji została zostawiona na eksperymentowanie i
naukę z eksperymentów. To było przeznaczenie programu
cdrom_controller.a51
Wszystko, co cdrom_controller.a51 robi, to inicjalizacja CDROM oraz wysyłanie i odbiór
różnych komend pakietu ATAPI aby zidentyfikować co się dzieje z urządzeniem, odczyt
tablicy zawartości CD (TOC), odtwarzanie CD (to jest w urządzeniu CDROM) i na koniec
raport na temat stanu odtwarzania płyty CD.
Ten program został zrobiony „na szybkiego”... Ale po zrozumieniu zasady jego działania i
sposobu w jaki używa pakietów ATAPI, będziesz miał możliwość zrobienia szerokiej gamy
kontrolerów, które robią różne rzeczy z urządzeniami ATAPI. Czasami są to naprawdę
wartościowe informacje, czego nie możesz zrobić z żadną z wersji ATA/ATAPI.. lub tylko
ze specyfikacją MM2 (naprawdę super aplikacją jest na przykład ochrona hasłem
twardego dysku).
simple_cdrom_controller.a51
został napisany do uruchomienia na płytce próbnej
firmy Darimon. Jeśli chcesz go używać z jakimś innym systemem próbnym, wówczas
program powinien być nieco zmodyfikowany.
Jeśli weźmiesz płytkę firmy Darimon, wówczas możesz wydrukować schemat po wydaniu
polecenia:
print out cdrom_controller/simple_cdrom_controller.sch (lub po prostu wydrukuj zbiory
typu *.ps), i skonfiguruj płytkę odpowiednio do mojego schematu.
Używając la51, skompiluj „cdrom_controller.a51”. To stworzy zbiór w formacie intelli hex.
Używając instrukcji które są dostarczane z płytką Darimon, załaduj zbiór hex do
procesora. Zasil i podłącz CDROM - uruchom program. Włóż płytę CD do napędu,
wówczas program powinien zacząć odtwarzać CD.
onhold/onhold_dev.a51
„Onhold” jest oczyszczonym z niepotrzebnych rzeczy programem cdrom_controller.a51
Został on obcięty (zmniejszony). Wszystkie informacje do wyprowadzenia zostały
usunięte, zastąpione przez proste flagi LED a program został zmodyfikowany tak, aby
mógł wykryć płytę CD w napędzie.
- strona 2/6 -
Jeśli umieścisz w napędzie płytę CD, powinien on w sposób ciągły zacząć odtwarzać jej
zawartość. Jeśli nie ma w napędzie CD, program pozostaje w pętli do momentu aż CD
zostanie włożony. Gdy odtwarzanie CD zostanie zakończone, wówczas program
rozpoczyna wszystko od początku. Innymi słowami, jest statyczny i zapętlony.
onhold/final_target.a51
Tak samo jak onhold_dev.a51, z zachowaniem odniesienia do linii programu i do pamięci
(zmiennych), program został zmieniony i przepisany dla ATMEL AT89C51. To jest finalny
kod, który został zapisany do 5 prototypów i przedstawiony mojemu klientowi.
Aby utworzyć zbiór do zapisania w pamięci Flash mikrokontrolera, kompiluj używając
la51. Jeśli masz zamiar użyć projektu programatora „burn” do zaprogramowania twojego
procesora, wówczas użyj ihex2bin aby zrobić konwersję zbioru hex (wyprodukowanego
przez la51) do postaci bin.
final_target.a51 został napisany dla AT89C51. Jeśli chcesz użyć innego klonu 8051,
wymagane są modyfikacje.
* * *
Zrobiłem tutaj całą czarną robotę. Przykłady zaimplementowanych kontrolerów były....
naprawdę rzadkością. Był tylko jeden projekt, który udało mi się znaleźć (strona z
projektami Basic 8052 , sekcja IDE, zrobiony przez Siergieja Zorina <
zorinsn@rs-
pribor.ru
> I w tym miejscu wielkie podziękowania dla Siergieja; rozmawiałem z nim w
ostatnim roku - bardzo miłe wrażenia).
Dla ciebie będzie to tylko sprawa zrozumienia mojej pracy i przetworzenia kodu.
Najtrudniejszą częścią projektu było dla mnie rozpracowanie sposobu sygnalizacji. Jak
przeskoczyłem ten problem, wszystko inne było szczęśliwym, gładkim żeglowaniem.
Podczas budowy urządzenia...
Poniższy tekst jest dyskusją na problemami, które zaliczyłem... i opowiadaniem o moich
doświadczeniach. Minęło blisko 9 miesięcy od momentu kiedy dotknąłem programu -
zapomniałem już niektóre rzeczy, o których chciałem opowiedzieć. Ale mimo tego,
poniżej problemy, które pamiętam:
-
Pytanie, które martwiło mnie już we wczesnym stadium projektu to, czy mogę
wysyłać dane do urządzenia ATA używając 8 bitów linii danych? Jeśli tak, to uczyni
projekt bardzo łatwym. Jak odkryłem, bardzo stare specyfikacje ATA (na przykład
ATA-1), są zaopatrzone w 8-bitową komunikację. Jakkolwiek w późniejszych
wydaniach specyfikacji, zostało to usunięte. Tak więc innymi słowy, NIE, nie
możesz wysyłać danych to nowoczesnych urządzeń ATA używając 8 bitowego
interfejsu.
-
Ah... jeszcze to, wszystkie czasy odniesione są do 12MHz, więc prędkość zegara
twojego mikroprocesora musi być 12MHz. Jeśli to nie jest możliwe, wówczas
musisz zmodyfikować czasy w moim programie, co nie będzie zbyt trudne.
Dodałem komentarze do kodu jak długi dany czas powinien być. Łatwo jest
przeliczyć pętle oczekiwań itp.
- strona 3/6 -
-
W specyfikacji, określono, że DD7 (bit linii danych) powinien być podłączony do
masy przez rezystor 10k (pull down). Odkryłem, że w pewnych urządzeniach, ten
rezystor trochę zbyt dobrze ściąga stan linii do masy. To powoduje utratę danych.
Ideą zastosowania rezystora pull-down jest detekcja, czy urządzenie ATAPI jest
podłączone. Kiedy urządzenie ATAPI jest zasilane, DD7 ma stan wysoki. Gdy
zbadasz stan linii DD7 i ma ona stan wysoki, wówczas masz urządzenie
podłączone. Kod „simple_cdrom_controller.a51” nie ma komentarza w miejscu
badania stanu linii DD7. Oczywiście możesz dołączyć komentarz, jeśli chcesz.
-
Dokumentacja, którą znalazłem była (czasami) w niektórych miejscach
niepokojąca. Oni piszą tam o „asserting” i „deasserting”. Czyli możesz mieć
sygnały w stanie wysokim na poziomie napięcia Vss i sygnały o poziomie napięcia
Vdd. Jedyną rzeczą, która wskazuje na to w specyfikacji, jest znak „- ” na
początku linii nazw w tabeli „przyporządkowanie nazw sygnałom” (interface signal
names assignment, strona 28 specyfikacji ATA/ATAPI-5). Rozwiązanie tego
problemu zajęło mi cały dzień. Nie „zaskoczyłem” do momentu gdy spojrzałem na
projekt Siergieja Zorina przy rozpamiętywaniu, co robiłem źle.
init_ata_device: procedura w simple_cdrom_controller.a51:
-
Hardware reset - miałem z nim niewielki problem. Jeśli robiłem to w sposób w jaki
mówiły o tym specyfikacje, wówczas flaga BUSY nie miała włąściwego stanu, i mój
program chciał iść pełną parą bez inicjalizacji urządzenia. Tak więc aby obejść ten
problem, wstawiłem 2 sekundy opóźnienia. Ta niewielka sztuczka wydaje się być
rozwiązaniem. A stan flagi BUSY jest już właściwy po upływie 2 sekund.
-
Sygnatura urządzenia była także całkiem zabawnym kawałeczkiem projektu.
Sygnatura jest wartością inicjującą urządzenie przechowywaną w różnych
rejestrach urządzenia ATA. Te wartości mogą ci powiedzieć czy urządzenia jest
kompatybilne z pakietami komend ATAPI. Skomentowałem część programu
zgodnie z sugestiami Con Sapuntzakis (ATAPI reference & Black Magic in
ATA/ATAPI). Nie napotkałem żadnych problemów, jednak zrobiłem to tak na
wszelki wypadek.
Inną maleńką rzeczą, która mnie zastopowała na moment był komenda z pakietu
ATAPI służąca do identyfikacji urządzenia. Odkryłem, że ta komenda jest ze
szczególnym przeznaczeniem dla CDROM (i podobnych) urządzeń, i jako taka
umożliwia załączenie flagi DRDY. Bez tej komendy, nie będziesz mógł podać
żadnej z komend z pakietu ATA. Przez moment nie mogłem rozszyfrować dlaczego
urządzenie nie odpowiada na żadną z wprowadzanych komend. Myślę, że
przypomniałem sobie wówczas malutki nadruk w specyfikacji (SFF-8020i)
traktujący o tym....
-
Również inny obszar w którym miałem kłopoty, to rejestr licznika bajtów. Ten
rejestr jest używany wówczas, gdy urządzenie wysyła dane o zmiennej lub
określonej długości do twojego kontrolera. Limituje on ich liczbę przed
otrzymaniem sygnału DRQ. Jeśli licznik nie zostanie ustawiony, wówczas
urządzenie ATAPI nie może wysłać żadnego pakietu danych.
Zabawną rzeczą jest, że komenda „identify packet device” ustawia bit rejestru
licznika, inne pakiety komend nie mogą zaś tego zrobić. Strategią, którą
stosowałem było ustawienie rejestru licznika na wartość FFFFH przed
wprowadzeniem komendy, która wysyła dane i wówczas wykrycie końca pakietu
danych przy pomocy flagi DRQ.
-
SFF-8020i mówi na temat kodów błędów ASC (Additional Sense Key) i ASCQ
(Additional Sense Key Qualifier). To chodziło mi po głowie przez jakiś czas,
ponieważ jeśli spojrzysz do specyfikacji, nie jest aktualnie określone
(powiedziane) co to jest do momentu, aż wyślesz komendę REQUEST SENSE,
która jest prawie na odwrocie instrukcji. I ja nie mogłem dojść co to takiego,
ponieważ spodziewałem się opisu na początku specyfikacji (każdy by się tego
spodziewał).
- strona 4/6 -
Po tym jak skonsultowałem się z kodem źródłowym Linux 2.2 odkryłem, że są to
kody błędów SCSI. Jako, że ATAPI jest wzorowane jest na SCSI, może to oznaczać
że są to pozostałości po adaptacji protokółu ATAPI z SCSI. Nie używałem tych
kodów w moim rozwiązaniu. Wszystkie moje aplikacje są proste i potrzebują tylko
wiedzieć czy komenda została przyjęta czy nie (wskazuje na to stan flagi ERR w
rejestrze statusu). Jednak dla twojej informacji, jeśli wprowadzasz komendę, i
otrzymujesz flagę ERR, wówczas wprowadzasz komendę REQUEST SENSE aby
otrzymać kody błędu.
Ok, to prawie wszystko. Ja wyrzuciłem z siebie wszystkie te rzeczy, o których
pamiętałem aby o nich powiedzieć.
Materiały źródłowe do projektu:
-
ATA/ATAPI-5 (T13/1321D R3) (
www.t10.org
)
-
ATA packet interface for CDROM's (SFF-8020i) (fission.dt.wdc.com)
-
Linux 2.2.x source code (/usr/src/linux/drivers/ide*)
-
ATAPI references & Black magic in ATA/ATAPI by Constantine Sapuntzakis,
csapuntz@stanford.edu
-
8052 Basic project page (IDE logger section)
by Sergey Zorin
zorinsn@rs-pribor.ru
-
General ATAPI info
Hale Landis's ATAPI pages
(dobre wprowadzenie do projektu, bo nic nie wiedziałem...)
- strona 5/6 -
[ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • imikimi.opx.pl
  • comp
    StartZastosowanie analiz geochemicznych w petrologii skal magmowych, Geologia, UNIWERSYTET WARSZAWSKI, SEMESTR I, METODY BADAŃ MINERAŁÓW I SKAŁ, Metody badan mineralow, Metody badanZastosowanie techniki wysokich ciśnień w technologii żywności, Technologia żywności, Technologia żywnościZadania wantuch + rozw, Elektrotechnika AGH, Semestr III zimowy 2013-2014, semestr III, semestr III, Teoria obwodów 2Zadania - dysocjacja elektrolityczna, MATURA BIOLOGIA I CHEMIA, Chemia, ZadaniaZastosowanie kliniczne metody OMT Kaltenborn-Evjenth, Metody specjalne, Metody Specjalne w FizjoterapiiZastosowanie gliny w budownictwie, budownictwo, Budynki z gliny i słomy, ArtykułyZastosowanie rezonansu, Dokumenty, DokumentyZastosowanie Excela w pracy analityka finansowego specjalisty ds controllingu i analityka sprzedazy zaexan, Księgarnia Biznes, FinanseZastosowanie fizjoterapii w profilaktyce prozdrowotnej u osób po 65 r.ż., fizjoterapia, FizjoterapiaZamboch Miroslav & Prochazka Jiri W. - Agent JFK 01 - Przemytnik, Ebook, Książki (PL)
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • licowka.xlx.pl
  • Cytat

    Filozof sprawdza się w filozofii myśli, poeta w filozofii wzruszenia. Kostis Palamas
    Aby być szczęśliwym w miłości, trzeba być geniuszem. Honore de Balzac
    Fortuna kołem się toczy. Przysłowie polskie
    Forsan et haec olim meminisse iuvabit - być może kiedyś przyjemnie będzie wspominać i to wydarzenie. Wergiliusz
    Ex Deo - od Boga.

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com