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.pldoc.pisz.plpdf.pisz.plimikimi.opx.pl
|
|
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.pldoc.pisz.plpdf.pisz.pllicowka.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. |
|