Zastosowanie mikrokontrolera 8051 do sterowania ATA ATAPI CDROM


http://www.easy-soft.tsnet.pl/
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
http://jsno.downunder.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 pazdziernika 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 znalezć je na mojej stronie www: http://jsno.downunder.net.au
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 -
http://www.easy-soft.tsnet.pl/
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 wezmiesz 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 -
http://www.easy-soft.tsnet.pl/
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ę znalezć (strona z
projektami Basic 8052 , sekcja IDE, zrobiony przez Siergieja Zorina 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ózniejszych
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ć. Aatwo jest
przeliczyć pętle oczekiwań itp.
- strona 3/6 -
http://www.easy-soft.tsnet.pl/
- 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 zle.
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óznienia. 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 -
http://www.easy-soft.tsnet.pl/
Po tym jak skonsultowałem się z kodem zró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 zró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
http://www.stanford.edu/~csapuntz/ide.html
http://www.stanford.edu/~csapuntz/blackmagic.html
- 8052 Basic project page (IDE logger section)
by Sergey Zorin zorinsn@rs-pribor.ru
http://www.nomad.ee/micros/8052bas.html
- General ATAPI info
Hale Landis's ATAPI pages http://www.ata-atapi.com
(dobre wprowadzenie do projektu, bo nic nie wiedziałem...)
- strona 5/6 -
http://www.easy-soft.tsnet.pl/
- strona 6/6 -


Wyszukiwarka

Podobne podstrony:
Układy licznikowe mikrokontrolera 8051
Mikrokontroler 8051
Układ przerwań mikrokontrolera 8051
instrukcja do sterownika firmy FOX
pilot RC5 do sterowania PC
1999 02 Radiowy pilot do sterowania 15 urzÄ…dzeniami
Zastosowanie metod plazmowych do oczyszczania gazu procesowego ze zgazowania biomasy
Konfiguracja pamięci mikrokontrolera 8051 dla programów napisanych w języku C
Zastosowanie technik membranowych do separacji produktów w bioprocesach
emulator mikrokontrolerów PIC do PC
Zastosowanie reakcji minisekwencjonowania do oznaczania przynależności halogrupowej mitochondrialneg
3 Zastosowanie regresji liniowej do obliczania szybkości reakcji chemicznych
programowanie mikrokontrolerow 8051 w jezyku c pierwsze kroki rapidshare
Analiza porównawcza zastosowania sieci neuronowych do klasyfikacji obiektów
Zastosowanie agregatów prądotwóczych do awaryjnego zasilania obiektow budowlanych
EFEKTY ZASTOSOWANIE STANOWISKA ZROBOTYZOWANEGO DO SPAWANIA
Programowanie mikrokontrolerow 8051 w jezyku C

więcej podobnych podstron