ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΥΛΟΠΟΙΗΣΗ ΔΙΑΣΥΝΔΕΣΗΣ USB ΤΕΙ ΣΕΡΡΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΥΛΟΠΟΙΗΣΗ ΔΙΑΣΥΝΔΕΣΗΣ USB Σπουδαστής: Τσιώγκας Παρασκευάς (493) Επιβλέπων καθηγητής: Δρ. Καλόμοιρος Ι.
ΔΗΜΙΟΥΡΓΙΑ ΠΕΡΙΦΕΡΕΙΑΚΟΥ USB Συσκευή (HID) με τον απαραίτητο κώδικα (C++) FIRMWARE (.HEX αρχείο) Μικροελεγκτής PIC18F4550 www.microchip.com Εισερχόμενο αναλογικό σήμα Η/Υ Ξενιστής – Host με τις απαραίτητες θύρες USB PIC18F4550 Μετατροπέας A/D: Μετατροπή αναλογικού σήματος σε ψηφιακό Η/Υ Host Application (M.Visual C++) – Εφαρμογή ελέγχου της συσκευής (HID), Λ. Σ. (Windows) - (Drivers), αρχεία .dll, συναρτήσεις (Application Programmer’s Interface). Τμήμα USB: Αποστολή A/D μετατροπής προς τον ξενιστή Πρωτόκολλο επικοινωνίας USB 2.0 (Full Speed) (Μεταδόσεις - ελέγχου και διακοπών)
USB (Universal Serial Bus) Ευκολία χρήσης Ταχύτητα Αξιοπιστία Επιλογές μετάδοσης Κατανάλωση ισχύος Χαμηλό κόστος Διανεμητές (hubs) USB USB: Σύστημα σειριακού διαύλου επικοινωνίας ενός υπολογιστή με περιφερειακά συστήματα. Πρώτες εταιρείες κατασκευής Intel Microsoft Philips US Robotics Εκδόσεις USB 1.0 (1995) USB 1.1 (1998) USB 2.0 (2000) USB 3.0 (2009)
USB (Universal Serial Bus) Low Speed Full Speed High Speed Super Speed USB 1.1 & USB 2.0 1.5 Mbps 12 Mbps 480 Mbps USB 3.0 5 Gbps Ταχύτητες USB
Βασικές κλάσεις USB συσκευών Συσκευές ήχου Συσκευές εικόνας Διανομέας (hub) Χειριστήρια (HIDs – Human Interface Device) Εκτυπωτές Μονάδες αποθήκευσης Συσκευές USB
ΠΡΩΤΟΚΟΛΛΟ USB – ΜΕΤΑΔΟΣΗ ΔΕΔΟΜΕΝΩΝ Απαρίθμηση (enumeration) Καταληκτικά σημεία (Endpoints) Επικοινωνιακός σωλήνας (pipe) Περιγραφείς (Descriptors) Πακέτα: Πακέτο κουπονιού - Token Packet, Πακέτο δεδομένων - Data Packet, Πακέτο χειραψίας - Handshake Packet. Ξενιστής: Εφαρμογή ελέγχου (Host Application) – Windows – Drivers – συναρτήσεις API – αρχεία .dll
ΤΡΟΠΟΙ ΜΕΤΑΔΟΣΗΣ ΔΕΔΟΜΕΝΩΝ Μετάδοση ελέγχου (Control Transfer): Απαρίθμηση (enumeration), διαμόρφωση, υποχρέωση υποστήριξης από όλα τα περιφερειακά. Συμπαγείς μεταδόσεις (Bulk Transfer): Μαζικές μεταδόσεις δεδομένων. Μεταδόσεις διακοπών (Interrupt Transfers): Μετάδοση μέσα σε στενά χρονικά όρια χωρίς καθυστέρηση. Ισόχρονες Μεταδόσεις (Isochronous Transfers): Μεταφορά δεδομένων συνεχούς ροής (streaming data).
PIC 18F4550 8bit Εταιρεία κατασκευής Microchip Οικονομική τιμή, υψηλή αντοχή, υψηλό επίπεδο σχεδίασης Αρχιτεκτονικής Harvard Μνήμη Flash 40 ακροδέκτες (PDIP) Program Memory 32 KB Μνήμη RAM 2,048 bytes EEPROM 256 bytes Το τμήμα μετατροπής A/D εύρους 10 bit USB 2.0 Βαθμίδες σειριακής και παράλληλης επικοινωνίας SPI, I2C, USART, SPP Εύρος τάσης λειτουργίας 2V - 5.5V Συχνότητα λειτουργίας έως 48MHz 75 εντολές προγραμματισμού
ΤΟ USB ΤΜΗΜΑ ΤΟΥ PIC 18F4550 Ιδιότητες Full Speed Transceiver USB 2.0 (12Mbit/s) 16 καταληκτικά σημεία USB RAM 1Κ byte (Banks από 4 – 7) Συχνότητα λειτουργίας 6 – 48MHz Internal Pull Up resistors (D+/D-) Καταχωρητές ελέγχου και διαχείρισης Καταχωρητής ελέγχου (UCON) Καταχωρητής διαμόρφωσης (UCFG) Καταχωρητής κατάστασης (USTAT) Καταχωρητής διεύθυνσης (UADDR) Καταχωρητής καταληκτικού σημείου (UEPn) Καταχωρητές αριθμού πλαισίου (UFRM)
A/D converter 10 bit 13 ch Καταχωρητές ελέγχου και διαμόρφωσης A/D μετατροπέα ADCON1 διαμόρφωση των ακροδεκτών ADCON2 διαμόρφωση πηγής ρολογιού, προγραμματισμός χρόνου απόκτησης σήματος, στοίχιση του αποτελέσματος της μετατροπής ADRESH:ADRESL αποθήκευση αποτελέσματος της μετατροπής (16bit) ADCON0 έλεγχος ενεργοποίησης και επιλογή καναλιού Έλεγχος και διαχείριση των καταχωρητών του A/D μετατροπέα πραγματοποιείται με τη βοήθεια των ειδικών λειτουργιών. Microchip MPLAB C18 {C:\MCC18}--> πηγαίος κώδικας των λειτουργιών. Λειτουργίες Περιγραφή BusyADC εκτελείται κάποια μετατροπή αυτή τη στιγμή; CloseADC απενεργοποίηση του A/D μετατροπέα ConvertADC ενεργοποίηση του A/D μετατροπέα OpenADC διαμόρφωση του A/D μετατροπέα ReadADC ανάγνωση των αποτελεσμάτων του A/D μετατροπέα SetChanADC επιλογή του A/D καναλιού
ΠΑΡΑΔΕΙΓΜΑ ΔΙΑΜΟΡΦΩΣΗΣ A/D Converter OpenADC(ADC_FOSC_64 & ADC_LEFT_JUST & ADC_20_TAD, ADC_CH0 & ADC_INT_OFF & ADC_VREFPLUS_VDD & ADC_VREFMINUS_VSS, 0b001); Delay10TCYx( 5 ); //Απαραίτητη χρονική καθυστέρηση ώστε ο μετατροπέας να λάβει σωστά όλες τις παραμέτρους της παραπάνω διαμόρφωσης ConvertADC(); // Έναρξη μετατροπής while( BusyADC() ); //Αναμονή για την ολοκλήρωση result = ReadADC(); //Ανάγνωση αποτελέσματος CloseADC(); //Απενεργοποίηση A/D μετατροπέα
ΑΠΑΡΑΙΤΗΤΑ ΕΡΓΑΛΕΙΑ MPLAB v8.2 MICROCIP C18 Compiler Student Edition PICSTART Plus MICROCHIP Microsoft Visual Studio Proteus Isis (Labcenter Electronics)
Η ΣΥΣΚΕΥΗ (HID)
Σύνολο αρχείων κώδικα FIRMWARE (modular) σπονδυλωτό πρόγραμμα MCHPFSUSB Framework v2.3 - Microchip Solutions (αρχεία υλοποίησης πρωτοκόλλου USB) Jan Axelson - Generic HID (αρχεία διαμόρφωσης της συσκευής, περιγραφείς) Σύνολο αρχείων κώδικα FIRMWARE (modular) σπονδυλωτό πρόγραμμα
ΒΑΣΙΚΟ ΠΡΟΓΑΜΜΑ (main) generic_hid.c USBDeviceInit();--(usb_device.c): αρχικοποίηση, απαρίθμηση (enumeration), ενεργοποίηση τμήματος USB. USBDeviceTasks();--(usb_device.c): ανταπόκριση στις απαιτήσεις USB επικοινωνίας, εξυπηρέτηση των καταστάσεων του διαύλου USB. SetConfigurationOptions(); - Διαμόρφωση συσκευής (UCFG). void ProcessIO(void)--(generic_hid.c): έλεγχος ικανότητας αποστολής και λήψης δεδομένων. Επιθυμητή κατάσταση CONFIGURED_STATE. void ReportLoopBack(void)--(generic_hid.c): διαμόρφωση και έλεγχος του A/D μετατροπέα. Αποστολή και λήψη δεδομένων.
ReportLoopBack void ReportLoopBack(void) { BYTE count = 0; Ορισμός του ακροδέκτη RA0/AN0 σαν είσοδος του αναλογικού σήματος προς τον μετατροπέα. TRISAbits.TRISA0 = 1; Διαμόρφωση A/DC: συχνότητα λειτουργίας 48 MHz & αριστερή καταχώρηση αποτελέσματος & χρόνος απόκτησης 20 περίοδοι & επιλογή καναλιού, channel 0 & απενεργοποίηση διακοπής κατά την ολοκλήρωση της μετατροπής & τάση αναφοράς VDD και VSS (5V and GND) & διαμόρφωση A/D θυρών – όλα τα κανάλια είναι αναλογικής εισόδου. OpenADC(ADC_FOSC_64 & ADC_LEFT_JUST & ADC_20_TAD, ADC_CH0 & ADC_INT_OFF & ADC_VREFPLUS_VDD & ADC_VREFMINUS_VSS, 0b001); Απαραίτητη χρονική καθυστέρηση ώστε ο μετατροπέας να λάβει σωστά όλες τις παραμέτρους της παραπάνω διαμόρφωσης. Delay10TCYx(5); Έναρξη μετατροπής. ConvertADC();
ReportLoopBack Έλεγχος και αποστολή δεδομένων με τη βοήθεια κατάλληλων μακροεντολών. switch (usb_state) { case 'r': Έλεγχος για το εάν λαμβάνονται δεδομένα τη δεδομένη στιγμή. Όταν η σημαία UOWN του καταχωρητή κατάστασης BDnSTAT είναι ‘1’ έχουμε λήψη δεδομένων, διαφορετικά ‘0’ δεν έχουμε. if(HIDRxHandleBusy(lastOutTransmission) == 0) Τα δεδομένα θα ληφθούν διαμέσου του καταληκτικού σημείου HID_EP, - το καταληκτικό σημείο HID_EP είναι διαμορφωμένο κατάλληλα, μέσω του περιγραφέα καταληκτικού σημείου, ώστε να ανταποκρίνεται στις απαιτήσεις των χειριστηρίων - και στη συνέχεια προς ένα πίνακα αποθήκευσης δεδομένων λήψης hid_report_out [], επίσης ορίζεται και το μέγεθος των byte που μπορεί να λάβει η συσκευή, στη περίπτωσή μας το μέγιστο είναι 64 byte. lastOutTransmission = HIDRxPacket(HID_EP, (BYTE*)&hid_report_out, 64); usb_state = 'p'; } break;
ReportLoopBack case 'p': { Έλεγχος για το εάν λαμβάνονται δεδομένα τη δεδομένη στιγμή. if(HIDRxHandleBusy(lastOutTransmission) == 0) Ο δείκτης CNT αποτελεί ένα μετρητή μεγέθους των δεδομένων. if (lastOutTransmission->CNT > 0) Προετοιμασία προς αποστολή των ληφθέντων δεδομένων for (count; count <= HID_OUTPUT_REPORT_BYTES; count++) Μεταφορά του αποτελέσματος της A/D μετατροπής στον πίνακα αποστολής δεδομένων προς τον ξενιστή. hid_report_out[count] = ADRESH; hid_report_in[count] = hid_report_out[count]; }
ReportLoopBack Τα δεδομένα είναι έτοιμα να αποσταλούν προς τον ξενιστή. usb_state = 't'; } else { usb_state = 'r'; break;
ReportLoopBack case 't': { Έλεγχος για το εάν αποστέλλονται δεδομένα τη δεδομένη στιγμή. if (HIDTxHandleBusy(lastTransmission) == 0) Αποστολή δεδομένων του πίνακα hid_report_in με προκαθορισμένο μέγεθος δεδομένων HID_INPUT_REPORT_BYTES μέσω του καταληκτικού σημείου HID_EP. lastTransmission = HIDTxPacket(HID_EP, (BYTE*)&hid_report_in, HID_INPUT_REPORT_BYTES); usb_state = 'r'; } break; default:
Εφαρμογή ελέγχου της συσκευής (HID) Γλώσσα προγραμματισμού Host Application Εφαρμογή ελέγχου της συσκευής (HID) Γενική εφαρμογή (usbhidio) Jan Axelson www.lvr.com Γλώσσα προγραμματισμού Microsoft Visual c++ (Microsoft Visual Studio). Τύπος μετάδοσης μετάδοση ελέγχου και μετάδοση διακοπών Παράθυρο διαλόγου συσκευής HID και Η/Υ.
ΚΩΔΙΚΑΣ Host Application Πλήκτρο Find My Device: Αναζήτηση της συσκευής μας – διαδοχικές κλήσεις συναρτήσεων API μέχρι την ανίχνευση της επιθυμητής συσκευής. HidD_GetHidGuid SetupDiGetClassDevs SetupDiEnumDeviceInterfaces SetupDiGetDeviceInterfaceDetail CreateFile HidD_GetAttributes HidD_GetPreparsedData HidP_GetCaps Συναρτήσεις API: Απαρίθμησης συσκευών της κλάσης χειριστηρίων (HIDs) Συναρτήσεις API: Άνοιγμα της διαδρομής (DevicePath -> DeviceHandle) προς την επιθυμητή συσκευή (HID) , ταυτοποίηση VID και PID. Συναρτήσεις API: Επιστροφή ιδιοτήτων της συσκευής μας
ΚΩΔΙΚΑΣ Host Application Πλήκτρο ONCE: Ανταλλαγή δεδομένων Ανάγνωση δεδομένων ReadFile (ReadHandle, InputReport, Capabilities.InputReportByteLength, &NumberOfBytesRead); Εγγραφή δεδομένων WriteFile (WriteHandle, OutputReport, Capabilities.OutputReportByteLength, &BytesWritten, NULL);