Projekt Inżynierski - Politechnika Poznańska

Transkrypt

Projekt Inżynierski - Politechnika Poznańska
Projekt Inżynierski
Temat: Kontroler dysku twardego ATA z szeregowym interfejsem
wymiany danych / odtwarzacz płyt audio z użyciem napędu
CD-ROM
Wykonał:
Damian Gajewski
Elektronika i Telekomunikacja
grupa MiEPU
Prowadzący:
dr inż. Adam Łuczak
© Politechnika Poznańska
1
PDF created with pdfFactory trial version www.pdffactory.com
HARDWARE
Projekt płytki drukowanej wykonano w programie Eagle ver 4.09r2 for Windows Light
Edition. W projekcie ścieżki prowadzono ręcznie, bez użycia autoroutera. Płytka jest
zaprojektowana jako dwustronna, ale nie wymaga metalizacji otworów. Połączenia pomiędzy
warstwami TOP i BOTTOM wykonano z użyciem nóżek elementów przewlekanych lub mostków.
Elementy są montowane z obu stron płytki - elementy montowane powierzchniowo po jednej
stronie, a elementy przewlekane po przeciwnej.
„Sercem” układu jest mikrokontroler ATmega128 firmy Atmel. Jego użycie zagwarantowało
duży zapas dostępnej pamięci programu (128 kB), 6 portów I/O oraz pracę z maksymalną
częstotliwością 16 MIPS. Ze względu na możliwość transferu z/do dysku twardego dużej liczby
danych zastosowano zewnętrzną kość pamięci RAM o pojemności 128 kB (IC5) pomocnej przy
buforowaniu danych. Na 8 młodszych bitach szyny adresowej pamięci umieszczono zatrzask IC4.
Wykorzystano układ resetu IC1 pozwalający na bezproblemową współpracę z programatorem ISP.
W układzie IC1 zaimplementowano także funkcję brown-out. Dioda świecąca PROG&RES
wskazuje, że na linii RESET panuje stan niski (podczas programowania mikrokontrolera lub po
naciśnięciu przycisku RESET).
Moduł kontrolera jest przystosowany do współpracy z modułem ewaluacyjnym Digilab 2E
zawierającym układ programowalny XILINX Spartan. Moduły mogą być połączone poprzez 40pinowe złącze typu goldpin. Ze względu na to, że moduł Digilab pracuje z zasilaniem i sygnałami
3,3 V, użyto dwukierunkowego translatora poziomów IC2. Od strony kontrolera dysku translator
pracuje z napięciami 0 / 5 V. Od strony zewnętrznej translator IC2 może pracować z 3 poziomami
wybieranymi za pomocą jumpera LEVEL. Za pomocą zworki następuje wybór jednego z napięć
referencyjnych dla układu translatora decydującym o aktualnym poziomie sygnałów, którymi moduł
kontrolera komunikuje się z otoczeniem poprzez złącze SV2. Napięcia referencyjne dostarcza układ
IC7. Dostępne napięcia referencyjne przedstawiono w tabeli 1.
Tab. 1. Dostępne napięcia referencyjne i odpowiadające im pozycje zworki jumpera LEVEL
pozycja zworki
poziom [V]
uwagi
5-6
5
3-4
1-2
3,3
2,5
komunikacja po RS232 , np. z użyciem MAX232;
współpraca z dowolnym układem o logice 0 / 5 V
współpraca z modułem Digilab 2E
Połączenia jumpera LEVEL są tak dobrane, aby błędne użycie zworki (np. poprzez włożenie jej w
poprzek) nie było w stanie zewrzeć żadnej pary napięć referencyjnych. Poniżej przedstawiono
położenie zworki przy wyborze poziomu 5V (pozycja 5-6).
Rys.1. LEVEL - widok od strony TOP
2
PDF created with pdfFactory trial version www.pdffactory.com
Na rys. 2. pokazano rozmieszczenie pinów złącza SV2.
Rys.2. Złącze SV2 w widoku z przodu, od strony styków
Przyporządkowanie sygnałów i linii zasilania do pinów złącza SV2 przedstawiono w tabeli 2.
Tab. 2. Funkcje pinów złącza SV2
pin
21
23
25
27
29
IOL1 IOL2 IOL3
IOL4 IOL5
funkcja
(RXD) (TXD)
31
IOL6
(XCK)
33
IOL7
35
IOL8
37
3,3V
( in )
39
GND
40
VCC
( in )
Pin 39 połączony jest z masą układu. Pin 40 dostarcza napięcia zasilania do całego modułu
kontrolera ( poza zasilaniem dysku twardego lub napędu CD-ROM, które należy zagwarantować
oddzielnie z zasilacza 5/12 V). Do pinu 40 trzeba podłączyć źródło napięcia stałego o wartości
7-12 V i wydajności co najmniej 150 mA. Napięcie to nie musi być stabilizowane, moduł posiada
własny stabilizator napięcia 5 V w postaci układu IC6.
Pin 37 jest opcjonalnym wejściem napięcia odniesienia dla układu translatora IC2, które można
wykorzystać, jeżeli zależy nam, aby napięcie odniesienia części zewnętrznej konwertera było
dostarczane przez moduł zewnętrzny a nie układ IC7. Uznano, że źródło napięcia odniesienia nie
będzie często zmieniane; wybór źródła odbywa się poprzez połączenie kroplą cyny odpowiednich
pól EXT/INT33. Położenie tego pola jest widoczne na rysunku 7; na rysunku 3 za pomocą cyfr
oznaczono pady tego pola.
Rys.3. Pady pola EXT/INT33 w widoku od strony BOTTOM
Pad 1 pola EXT/INT33 połączony jest z pinem 37 złącza SV2 (zewnętrzne napięcie referencyjne).
Pad 2 to napięcie referencyjne dla układu translatora IC2.
Pad 3 dostarcza jednego z 3 napięć referencyjnych wytwarzanych w układzie kontrolera (patrz
tabela 1).
W czasie normalnej pracy połączone są pady 2 i 3. Aby użyć zewnętrznego napięcia referencyjnego
należy połączyć pady 1 i 2 i przyłożyć odpowiednie napięcie do pinu 37 złącza SV2. Oba
wymienione tryby pracy są możliwe przy współpracy modułu kontrolera z modułem Digilab 2E.
Zwarcie wszystkich padów 1-2-3 pola EXT/INT33 umożliwia wyprowadzenie napięcia
referencyjnego na zewnątrz modułu kontrolera (poprzez pin 37 złącza SV2). Jeżeli napięciem
referencyjnym jest 5V (pozycja 5-6 jumpera LEVEL) to pin 37 złącza SV2 dostarcza
stabilizowanego napięcia 5V pochodzącego ze stabilizatora IC6. Opcja taka jest przydatna, gdy
potrzebujemy dostarczyć z naszego modułu zasilanie 5 V dla zewnętrznego, pomocniczego układu,
np. kostki MAX232, koniecznej, gdy zamierzamy uruchomić komunikację modułu kontrolera ze
złączem szeregowym komputera PC.
3
PDF created with pdfFactory trial version www.pdffactory.com
UWAGA: Nie należy zwierać jednocześnie padów 1-2-3 pola EXT/INT33 gdy do pinu 37 złącza
SV2 dostarczane jest jakiekolwiek napięcie z zewnątrz - grozi to uszkodzeniem układu. Należy o
tym pamiętać przyłączając do modułu kontrolera moduł Digilab 2E.
Komunikacja z modułem kontrolera odbywa się poprzez linie IOL1 do IOL8. Trzy z tych
linii to sygnały RXD, TXD, XCK (patrz tabela 2). Pozostałe linie są opcjonalne i nie zostały
wykorzystane w projekcie, ale są dostępne na złączu SV2 umożliwiając komunikację z modułem z
wykorzystaniem większej liczby linii po zmianie oprogramowania. W dołączonym oprogramowaniu
linii XCK nie wykorzystano - jest to linia taktująca (zegara) przy transmisji synchronicznej, której
nie oprogramowano. Linie RXD i TXD to odpowiednio linie odbioru i nadawania. Należy pamiętać,
że poziomy napięć na tych liniach są interpretowane zgodnie z aktualnym napięciem referencyjnym
układu translatora poziomów (IC2). Zaimplementowano transmisję szeregową asynchroniczną fulldupleks. Przeprowadzono eksperymenty, w których moduł wymieniał dane z komputerem PC
poprzez port RS232 i układ dopasowania MAX232. Komunikacja na „trasie”
PC - MAX232 - MAX3002 (IC2) - ATmega128 przebiegała bez zakłóceń aż do maksymalnej
dostępnej w komputerze szybkości 115 kbps. Nota katalogowa układu MAX3002 podaje, że
szybkość przepływu danych przez układ może sięgać aż 20 Mbps. Duży zapas szybkości wymiany
danych będzie można wykorzystać dopiero przy współpracy modułu kontrolera z innym
specjalizowanym modułem, np. odpowiednio oprogramowanym modułem Digilab 2E.
W projekcie uwzględniono także wskaźniki stanu pracy modułu ( diody LED, TXD, RXD)
oraz możliwość wygodnej konfiguracji trybu pracy - jumper MODE.
Moduł ma możliwość programowania w systemie (ISP). Programowanie odbywa się poprzez
10-pinowe złącze SPI_PROG. Złącze jest zgodne ze standardem ISP KANDA. Wykorzystano
programator ISP oparty o bufor 74LS244 współpracujący ze złączem równoległym (drukarkowym)
komputera PC. Programator jest zasilany z modułu kontrolera poprzez złącze SPI_PROG. Schemat
połączeń programatora jest zgodny ze standardem STK200 i jest łatwo dostępny w Internecie, np.
pod adresem http://www.lancOS.com. Jest to strona domowa programu PonyProg, który
współpracuje m.in. z programatorami zgodnymi z STK200 i może zostać użyty do programowania
mikrokontrolera naszego modułu. Użyto innego programu, będącego składnikiem pakietu BASCOM
AVR, również obsługującego programatory STK200. Interfejs części programującej tego pakietu
jest „user friendly” i dostarcza słownego opisu stanu bezpieczników i bitów blokujących
mikrokontrolera, co pozwala na jednoznaczną interpretację ich aktualnego stanu i wygodę
przestawiania bezpieczników.
Na rysunku 4 widoczne jest przyporządkowanie pinów do złącza SPI_PROG. Tabela 3 opisuje
funkcje pinów złącza SPI_PROG.
Tab. 3. Funkcje pinów złącza SPI_PROG
(widok czoła wtyczki programatora)
1
MOSI
3
N.C.
5
RST
7
SCK
9
MISO
2
VCC
4
GND
6
GND
8
GND
10
GND
Rys.4. Złącze SPI_PROG
w widoku od strony TOP
Na rysunku 5 widoczny jest schemat ideowy modułu kontrolera. Rysunki 6 i 7 przedstawiają
rozmieszczenie elementów na płytce drukowanej, od strony TOP i BOTTOM. Płytka drukowana ma
wymiary ( 100 x 80 ) mm.
4
PDF created with pdfFactory trial version www.pdffactory.com
Rys.6. Strona TOP
Rys.7. Strona BOTTOM
6
PDF created with pdfFactory trial version www.pdffactory.com
SOFTWARE
Do mikrokontrolera dołączono obwody zewnętrznego zegara 12 MHz, ale praca z
wewnętrznym zegarem okazała się zadowalająca. Częstotliwość pracy została ustalona
bezpiecznikami. Dodatkowo dezaktywowano pracę interfejsu JTAG na porcie PF. Ponieważ
mikrokontroler ATmega128 jest fabrycznie zgodny z mikrokontrolerem ATmega103, przełączono
odpowiedni bezpiecznik tak, aby odblokować wszystkie możliwości układu ATmega128 (np. pełna
przestrzeń adresowa). Zrezygnowano z pracy obwodów watchdog i pozostawiono odpowiedni
bezpiecznik w stanie fabrycznym (watchdog off).
Aplikacja pierwsza - CD PLAYER
Powstało oprogramowanie obsługujące napęd CD-ROM za pomocą protokołu ATAPI.
Protokół ten wywodzi się z SCSI i zachowuje mechaniczną oraz elektryczną kompatybilność z IDE.
Używa się tych samych banków rejestrów, ale polecenia są wydawane za pomocą 12-bajtowych
ramek. Do testów wykorzystano napęd MITSUMI CRMC-FX322M2.
Oprogramowanie napisano w języku C dzieląc kod źródłowy na pliki zawierające funkcje
pogrupowane według tego, za co odpowiadają. Użyto kompilatora WinAVR wraz z nakładką
AvrSide zarządzającą całym projektem. Najważniejsze ustawienia dotyczące projektu odtwarzacza
CD zawarte są w pliku uart.h.
W podstawowej wersji przyjęto następujące ustawienia:
#define F_CPU
#define BAUDRATE
#define BITS
#define PARITY
#define STOP_BITS
8000000
19200
8
0
1
//Hz
//bps
// ile bitow informacji w ramce UART - od 5 do 8
// 0 - disable, 2 - even parity, 3 - odd parity
// 1 or 2
Powyższe wartości można dostosować do konkretnego zastosowania. Zawartość rejestrów
decydujących o pracy interfejsu UART jest automatycznie przeliczana dzięki dyrektywom zawartym
w pliku uart.c i przy zmianie parametrów transmisji nie ma potrzeby wykonywania jakichkolwiek
obliczeń. Poprawność parametrów transmisji jest sprawdzana; wprowadzenie błędnych wartości
będzie sygnalizowane przez preprocesor kompilatora. Sterowanie odtwarzacza odbywa się z
wykorzystaniem linii TXD (rozkazy) i RXD (potwierdzenia) dostępnych na złączu SV2 (patrz tabela
2). Poniżej widoczna jest lista rozkazów (jeden bajt, dla wygody przyjęto litery ASCII), na które
reaguje napęd CD-ROM współpracujący z naszym kontrolerem.
Uwaga: rozkaz o wartości zero (NULL) nie może zostać użyty.
#define STOP
#define PLAY
#define PAUSE_RESUME
//#define READ_TOC
#define NEXT
#define PREV
#define FASTFORWARD
#define FASTBACKWARD
'v'
'x'
'c'
't'
'b'
'z'
'.'
','
7
PDF created with pdfFactory trial version www.pdffactory.com
#define EJECT
//#define LOAD
//#define INFO
'e'
'l'
'i'
Kontroler na wszystkie komendy odpowiada ciągiem 4 znaków ASCII (komenda + ' ' + dziesiątki +
jedności) gdzie dziesiątki i jedności dotyczą nr tracka (tryb 1). W trybie współpracy z PC wysyłane
są dodatkowo znaki Line End , Line Feed co daje lepszą kontrolę działania sterownika z użyciem
Terminala portu RS232. O trybie pracy decyduje dyrektywa PC_TERMINAL (patrz plik uart.h).
Dodatkowo kontroler reaguje na rozkazy w postaci cyfr ASCII od 0 do 9 - wybór track'a z zakresu
01- 99. Wysłanie pierwszej cyfry do sterownika jest potwierdzane ciągiem ('1' + ' ' + cyfra_d + '0').
Wysłanie drugiej cyfry do sterownika jest potwierdzane ciągiem ('2' + ' ' + '0' + cyfra_j) gdy na
płycie CD AUDIO nie ma tracka o numerze cyfra_d*10+cyfra_j lub ciągiem (TRACK + ' ' +
cyfra_d + cyfra_j) gdy wybrano prawidłowo nr tracka. Wartość znaku TRACK okresła dyrektywa
#define TRACK
'#'
TRACK może zostać użyte jako komenda - w odpowiedzi uzyskamy numer aktualnie odgrywanego
lub oczekującego tracka.
Kontroler potwierdza całkowitą liczbę tracków na płycie wysyłając ciąg ASCII w postaci
(MAX + ' ' + dziesiatki + jednosci). Najwyższy nr tracka jest podawany po odczycie tablicy TOC
płyty CD AUDIO lub w odpowiedzi na zapytanie przez UART wartością MAX.
#define MAX
'm'
Możliwe jest włączenie autoodtwarzania płyty muzycznej. Odpowiada za to dyrektywa
AUTOPLAY (patrz plik uart.h).
Na rysunku 8 przedstawiono okno programu COMM TEST STUDIO z widocznymi
potwierdzeniami otrzymywanymi z kontrolera.
Pierwsza odpowiedź jest automatyczna i określa całkowitą liczbę tracków dostępnych na płycie z
napędu. Jak widać odpowiedź składa się z 6 bajtów (‘m’ + ’ ‘ + ’1’ + ’5’ + 0D + 0A). Nadrzędny
kontroler wie dzięki temu ile tracków ma do dyspozycji i że może zacząć wydawać rozkazy
sterujące. W przykładzie dostępnych jest 15 tracków. Następnie wydano rozkaz PLAY i rozpoczęło
się odtwarzanie pierwszej ścieżki. Później wysłano dwie cyfry ASCII: 1 i 2 co spowodowało
przejście do utworu 12. Po kilku minutach wysłano komendę PAUSE_RESUME. W odpowiedzi
widać, że track zdążył się już zmienić na następny (13).
W trybie współpracy z komputerem bez problemu można użyć innego programu do komunikacji
przez port RS232, chociażby wbudowanego w system Windows Hyper Terminal’a. Podstawowy
tryb pracy różni się od opisanego tym, że odpowiedź składa się z 4 bajtów a nie 6 (bez znaków
końca linii) i służy do współpracy kontrolera z innym modułem, np. płytką Digilab 2E.
Uwaga: Kontroler współpracuje poprawnie z napędem komunikującym się za pomocą protokołu
ATAPI i ustawionym jako MASTER (odpowiednia pozycja zworki).
8
PDF created with pdfFactory trial version www.pdffactory.com
Rys.8. Potwierdzenia kontrolera na kilka wysłanych rozkazów
Aplikacja druga - odczyt listy folderów/plików dysku twardego
Oprogramowanie tej aplikacji jest oparte na kodzie źródłowym odtwarzacza mp3 „Yampp”
stworzonego przez Jesper Hansen’a. Oryginalny kod dostępny jest pod adresem
http://www.myplace.nu/mp3/. Oprogramowanie dostosowano do układu kontrolera. Prace
ukończono na etapie odczytu listy folderów i plików zapisanych na dysku twardym. Odczyt
wykonywany jest automatycznie.
Najważniejsze ustawienia:
uart.h
#define F_CPU
#define BAUDRATE
#define BITS
#define PARITY
#define STOP_BITS
8000000
2400
8
0
1
//Hz
//bps
// ile bitow informacji w ramce UART - od 5 do 8
// 0 - disable, 2 - even parity, 3 - odd parity
// 1 or 2
mem.h
Podział pamięci RAM na bloki i przypisanie im wskaźników oraz określenie wielkości dwóch
uniwersalnych buforów danych:
#define BUFFER_SIZE
1024
9
PDF created with pdfFactory trial version www.pdffactory.com
Constants.h
Najważniejsze ustawienia i stałe:
#define CLUSTER_SIZE 2048
#define FILESYS
FAT16
#define CHS_ACCES_FIRST
#define CHS_ONLY
#define POLISH_CHECK
// rozmiar klastra
// system plików
// zezwolenie na pierwszy dostęp do dysku w trybie
// adresowania CHS - ważne dla starszych modeli HDD
// dostęp tylko w trybie CHS - testowany model nie
// obsługiwał trybu LBA
// zezwolenie na zamianę kodów polskich liter (2 bajty) na
// standardowe 1-bajtowe kody ASCII (usuwanie polskich
// „ogonków”)
Na rysunku 9 pokazano ustawienia programu Hyper Terminal komunikującego się z układem
kontrolera poprzez port szeregowy i układ MAX232. Na rysunku 10 widoczne są przykładowe dane
odczytane przez kontroler.
Rys.9. Ustawienia Hyper Terminal
Rys.10. Odczytana lista folderów/plików
Do testów użyto dysku ST157A firmy Seagate o pojemności 44 MB.
Kontroler współpracuje poprawnie z napędem ustawionym jako MASTER (odpowiednia pozycja
zworki).
Kody źródłowe obu aplikacji oraz dokumentacja projektu kontrolera dostępne są pod adresem
www.et.put.poznan.pl/~dgajew/download/PUT/inz
10
PDF created with pdfFactory trial version www.pdffactory.com
Programator zgodny z STK200 i współpraca z BASCOM AVR
Schemat pochodzi z http://www.lancos.com/e2p/avrisp-stk200.gif
11
PDF created with pdfFactory trial version www.pdffactory.com
Wykorzystane oprogramowanie:
• Eagle ver 4.09r2 Light Edition
http://www.cadsoft.de
• WinAVR - GNU ANSI C kompilator AVR
w wersji 20040404
http://winavr.sourceforge.net
• AvrSide - nakładka graficzna i menadżer projektu dla kompilatora
WinAVR
http://www.avrside.fr.pl
• AVR Studio 4
http://www.atmel.com
• BASCOM-AVR wersja 1.11.7.7
http://www.mcselec.com
• Comm Test Studio
• HyperTerminal (Windows XP)
12
PDF created with pdfFactory trial version www.pdffactory.com