DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

Моделювання роботи шини USB

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2015
Тип роботи:
Звіт
Предмет:
Інші
Група:
КІ

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА” Кафедра ЕОМ Звіт з лабораторної роботи “Моделювання роботи шини USB” Мета роботи: Вивчити протокол роботи шини USB. Теоретичні відомості. USB – Universal Sirial Bus – Універсальна послідовна шина – оріентована на підключення перифирійних пристроїв до персонального комп’ютера. Версія 1.0 і 1.1 підтримують повну швиккіть (full speed) – 12Мбіт/с, і низьку швикість (low speed) – 1.5 Мбіт/с. В версії 2.0 додатково визначена висока швидкість (high speed) – 480 Мбіт/с. В одній системі можуть бути присутні і працювати приствої з трьома різними швидкостями. Шина з використанням проміжних хабів дозволяє з’єднувати пристрої віддалені від комп’ютера до 25 метрів. USB забезпечує обмін між хостом-комп’ютером і багатьма пристроями. Пристрою можуть бути хабами, функціями, або їхньою комбінацією. Хаб забезпечує додаткові точки з’єднання пристроїв до шини. Пристрій функція надає системі додаткові функції. Шина USB є хост-центристською: єдиним ведучим пристроєм, який керує обміном, є хост-комп’ютер, а всі приєднані пристрої – ведомі. Фізично топологія шини USB – багатоярусна зірка. Її вершиною є хост-контроллер. Формати пакетів Командний пакет:  де      Пакет даних:  Приклад проведення транзакції  Текст функцій модлювання USB. void CUSB_modelDlg::OnPrinterConnect() { CString str; PACKET_TYPE p1; str = "HOST: sending SETUP"; p1.TOKEN_PACKET.PID = PID_SETUP; p1.TOKEN_PACKET.ADDR = 0; p1.TOKEN_PACKET.ENDP = 0; p1.TOKEN_PACKET.CRC5 = 0; printer_host.SendPacket(&p1); PACKET_TYPE * res = printer.ReadPacket(); if(res->TOKEN_PACKET.PID == PID_SETUP){ str += "\r\nPRINTER: received SETUP"; p1.TOKEN_PACKET.PID = PID_ACK; p1.TOKEN_PACKET.ADDR = 0; p1.TOKEN_PACKET.ENDP = 0; p1.TOKEN_PACKET.CRC5 = 0; printer.SendPacket(& p1); str += "\r\nPRINTER: sending ACK"; } res = printer_host.ReadPacket(); if(res->TOKEN_PACKET.PID == PID_ACK){ str += "\r\nHOST: received ACK"; p1.DATA_PACKET.PID = PID_DATA0; char data = GET_DISCRIPTOR; p1.DATA_PACKET.DATA = & data; printer_host.SendPacket(& p1); str += "\r\nHOST: sending DATA0 with GET_DESCRIPTOR"; } res = printer.ReadPacket(); if(res->DATA_PACKET.PID == PID_DATA0){ str += "\r\nPRINTER: received DATA0 with GET_DESCRIPTOR"; p1.DATA_PACKET.PID = PID_DATA0; char data = DISCRIPTOR; p1.DATA_PACKET.DATA = & data; printer.SendPacket(&p1); str += "\r\nPRINTER: sending descriptor"; } res = printer_host.ReadPacket(); if(res->DATA_PACKET.PID == PID_DATA0){ str += "\r\nHOST: received descriptor"; p1.TOKEN_PACKET.PID = PID_ACK; p1.TOKEN_PACKET.ADDR = 0; p1.TOKEN_PACKET.ENDP = 0; p1.TOKEN_PACKET.CRC5 = 0; printer_host.SendPacket(&p1); str += "\r\nHOST: sending ACK"; } edit_console.SetWindowText(str); } void CUSB_modelDlg::OnPrinterSend() { CString str = ""; PACKET_TYPE p; p.TOKEN_PACKET.PID = PID_OUT; p.TOKEN_PACKET.ADDR = 0; p.TOKEN_PACKET.ENDP = 0; p.TOKEN_PACKET.CRC5 = 0; printer_host.SendPacket(&p); str += "HOST: sending OUT"; PACKET_TYPE * res = printer.ReadPacket(); if(res->TOKEN_PACKET.PID == PID_OUT){ str += "\r\nPRINTER: received OUT"; } p.DATA_PACKET.PID = PID_DATA0; p.DATA_PACKET.DATA = new char [ edit_print_data.GetWindowTextLength() ]; edit_print_data.GetWindowText(p.DATA_PACKET.DATA, edit_print_data.GetWindowTextLength()); p.DATA_PACKET.CRC16[1] = 0; p.DATA_PACKET.CRC16[2] = 1; printer_host.SendPacket(&p); str += "\r\nHOST: sending DATA0 with "; str += p.DATA_PACKET.DATA; res = printer.ReadPacket(); if(res->DATA_PACKET.PID == PID_DATA0){ str += "\r\nPRINTER: received DATA0 with "; str += res->DATA_PACKET.DATA; p.TOKEN_PACKET.PID = PID_ACK; p.TOKEN_PACKET.ADDR = 0; p.TOKEN_PACKET.ENDP = 0; p.TOKEN_PACKET.CRC5 = 0; printer.SendPacket(&p); str += "\r\nPRINTER: sending ACK"; } edit_console.SetWindowText(str); } void CUSB_modelDlg::OnFlashConnect() { CString str; PACKET_TYPE p1; str = "HOST: sending SETUP"; p1.TOKEN_PACKET.PID = PID_SETUP; p1.TOKEN_PACKET.ADDR = 0; p1.TOKEN_PACKET.ENDP = 0; p1.TOKEN_PACKET.CRC5 = 0; flash_host.SendPacket(&p1); PACKET_TYPE * res = flash.ReadPacket(); if(res->TOKEN_PACKET.PID == PID_SETUP){ str += "\r\nFLASH: received SETUP"; p1.TOKEN_PACKET.PID = PID_ACK; p1.TOKEN_PACKET.ADDR = 0; p1.TOKEN_PACKET.ENDP = 0; p1.TOKEN_PACKET.CRC5 = 0; flash.SendPacket(& p1); str += "\r\nFLASH: sending ACK"; } res = flash_host.ReadPacket(); if(res->TOKEN_PACKET.PID == PID_ACK){ str += "\r\nHOST: received ACK"; p1.DATA_PACKET.PID = PID_DATA0; char data = GET_DISCRIPTOR; p1.DATA_PACKET.DATA = & data; flash_host.SendPacket(& p1); str += "\r\nHOST: sending DATA0 with GET_DESCRIPTOR"; } res = flash.ReadPacket(); if(res->DATA_PACKET.PID == PID_DATA0){ str += "\r\nFLASH: received DATA0 with GET_DESCRIPTOR"; p1.DATA_PACKET.PID = PID_DATA0; char data = DISCRIPTOR; p1.DATA_PACKET.DATA = & data; flash.SendPacket(&p1); str += "\r\nFLASH: sending descriptor"; } res = flash_host.ReadPacket(); if(res->DATA_PACKET.PID == PID_DATA0){ str += "\r\nHOST: received descriptor"; p1.TOKEN_PACKET.PID = PID_ACK; p1.TOKEN_PACKET.ADDR = 0; p1.TOKEN_PACKET.ENDP = 0; p1.TOKEN_PACKET.CRC5 = 0; flash_host.SendPacket(&p1); str += "\r\nHOST: sending ACK"; } edit_console.SetWindowText(str); } void CUSB_modelDlg::OnFlashCreatefile() { CString str = ""; PACKET_TYPE p; p.TOKEN_PACKET.PID = PID_OUT; p.TOKEN_PACKET.ADDR = 0; p.TOKEN_PACKET.ENDP = 0; p.TOKEN_PACKET.CRC5 = 0; flash_host.SendPacket(&p); str += "HOST: sending OUT"; PACKET_TYPE * res = flash.ReadPacket(); if(res->TOKEN_PACKET.PID == PID_OUT){ str += "\r\nFLASH: received OUT"; } p.DATA_PACKET.PID = PID_DATA0; p.DATA_PACKET.DATA = new char [ 11 ]; strcpy(p.DATA_PACKET.DATA, "CreateFile"); p.DATA_PACKET.CRC16[1] = 0; p.DATA_PACKET.CRC16[2] = 1; flash_host.SendPacket(&p); str += "\r\nHOST: sending DATA0 with "; str += p.DATA_PACKET.DATA; res = flash.ReadPacket(); if(res->DATA_PACKET.PID == PID_DATA0){ str += "\r\nFLASH: received DATA0 with "; str += res->DATA_PACKET.DATA; p.TOKEN_PACKET.PID = PID_ACK; p.TOKEN_PACKET.ADDR = 0; p.TOKEN_PACKET.ENDP = 0; p.TOKEN_PACKET.CRC5 = 0; flash.SendPacket(&p); str += "\r\nFLASH: sending ACK"; } p.TOKEN_PACKET.PID = PID_OUT; p.TOKEN_PACKET.ADDR = 0; p.TOKEN_PACKET.ENDP = 0; p.TOKEN_PACKET.CRC5 = 0; flash_host.SendPacket(&p); str += "\r\nHOST: sending OUT"; res = flash.ReadPacket(); if(res->TOKEN_PACKET.PID == PID_OUT){ str += "\r\nFLASH: received OUT"; } p.DATA_PACKET.PID = PID_DATA0; p.DATA_PACKET.DATA = new char [ edit_file_name.GetWindowTextLength() +1 ]; edit_file_name.GetWindowText(p.DATA_PACKET.DATA, edit_file_name.GetWindowTextLength() +1); p.DATA_PACKET.CRC16[1] = 0; p.DATA_PACKET.CRC16[2] = 1; flash_host.SendPacket(&p); str += "\r\nHOST: sending DATA0 with "; str += p.DATA_PACKET.DATA; res = flash.ReadPacket(); if(res->DATA_PACKET.PID == PID_DATA0){ str += "\r\nFLASH: received DATA0 with "; str += res->DATA_PACKET.DATA; p.TOKEN_PACKET.PID = PID_ACK; p.TOKEN_PACKET.ADDR = 0; p.TOKEN_PACKET.ENDP = 0; p.TOKEN_PACKET.CRC5 = 0; flash.SendPacket(&p); str += "\r\nFLASH: sending ACK"; FILE * file = fopen(res->DATA_PACKET.DATA,"w"); fclose(file); } edit_console.SetWindowText(str); } void CUSB_modelDlg::OnFlashWritedata() { CString str = ""; PACKET_TYPE p; p.TOKEN_PACKET.PID = PID_OUT; p.TOKEN_PACKET.ADDR = 0; p.TOKEN_PACKET.ENDP = 0; p.TOKEN_PACKET.CRC5 = 0; flash_host.SendPacket(&p); str += "HOST: sending OUT"; PACKET_TYPE * res = flash.ReadPacket(); if(res->TOKEN_PACKET.PID == PID_OUT){ str += "\r\nFLASH: received OUT"; } p.DATA_PACKET.PID = PID_DATA0; p.DATA_PACKET.DATA = new char [ 11 ]; strcpy(p.DATA_PACKET.DATA, "Write"); p.DATA_PACKET.CRC16[1] = 0; p.DATA_PACKET.CRC16[2] = 1; flash_host.SendPacket(&p); str += "\r\nHOST: sending DATA0 with "; str += p.DATA_PACKET.DATA; res = flash.ReadPacket(); if(res->DATA_PACKET.PID == PID_DATA0){ str += "\r\nFLASH: received DATA0 with "; str += res->DATA_PACKET.DATA; p.TOKEN_PACKET.PID = PID_ACK; p.TOKEN_PACKET.ADDR = 0; p.TOKEN_PACKET.ENDP = 0; p.TOKEN_PACKET.CRC5 = 0; flash.SendPacket(&p); str += "\r\nFLASH: sending ACK"; } p.TOKEN_PACKET.PID = PID_OUT; p.TOKEN_PACKET.ADDR = 0; p.TOKEN_PACKET.ENDP = 0; p.TOKEN_PACKET.CRC5 = 0; flash_host.SendPacket(&p); str += "\r\nHOST: sending OUT"; res = flash.ReadPacket(); if(res->TOKEN_PACKET.PID == PID_OUT){ str += "\r\nFLASH: received OUT"; } p.DATA_PACKET.PID = PID_DATA0; p.DATA_PACKET.DATA = new char [ edit_file_name.GetWindowTextLength() +1 ]; edit_file_name.GetWindowText(p.DATA_PACKET.DATA, edit_file_name.GetWindowTextLength() +1); p.DATA_PACKET.CRC16[1] = 0; p.DATA_PACKET.CRC16[2] = 1; flash_host.SendPacket(&p); str += "\r\nHOST: sending DATA0 with "; str += p.DATA_PACKET.DATA; res = flash.ReadPacket(); FILE * file; if(res->DATA_PACKET.PID == PID_DATA0){ str += "\r\nFLASH: received DATA0 with "; str += res->DATA_PACKET.DATA; p.TOKEN_PACKET.PID = PID_ACK; p.TOKEN_PACKET.ADDR = 0; p.TOKEN_PACKET.ENDP = 0; p.TOKEN_PACKET.CRC5 = 0; flash.SendPacket(&p); str += "\r\nFLASH: sending ACK"; file = fopen(res->DATA_PACKET.DATA,"w"); } p.TOKEN_PACKET.PID = PID_OUT; p.TOKEN_PACKET.ADDR = 0; p.TOKEN_PACKET.ENDP = 0; p.TOKEN_PACKET.CRC5 = 0; flash_host.SendPacket(&p); str += "\r\nHOST: sending OUT"; res = flash.ReadPacket(); if(res->TOKEN_PACKET.PID == PID_OUT){ str += "\r\nFLASH: received OUT"; } p.DATA_PACKET.PID = PID_DATA0; p.DATA_PACKET.DATA = new char [ edit_flash_data.GetWindowTextLength() +1 ]; edit_flash_data.GetWindowText(p.DATA_PACKET.DATA, edit_flash_data.GetWindowTextLength() + 1); p.DATA_PACKET.CRC16[1] = 0; p.DATA_PACKET.CRC16[2] = 1; flash_host.SendPacket(&p); str += "\r\nHOST: sending DATA0 with "; str += p.DATA_PACKET.DATA; res = flash.ReadPacket(); if(res->DATA_PACKET.PID == PID_DATA0){ str += "\r\nFLASH: received DATA0 with "; str += res->DATA_PACKET.DATA; p.TOKEN_PACKET.PID = PID_ACK; p.TOKEN_PACKET.ADDR = 0; p.TOKEN_PACKET.ENDP = 0; p.TOKEN_PACKET.CRC5 = 0; flash.SendPacket(&p); str += "\r\nFLASH: sending ACK"; fprintf(file, "%s", res->DATA_PACKET.DATA); } fclose(file); edit_console.SetWindowText(str); } void CUSB_modelDlg::OnFlashReadData() { CString str = ""; PACKET_TYPE p; p.TOKEN_PACKET.PID = PID_OUT; p.TOKEN_PACKET.ADDR = 0; p.TOKEN_PACKET.ENDP = 0; p.TOKEN_PACKET.CRC5 = 0; flash_host.SendPacket(&p); str += "HOST: sending OUT"; PACKET_TYPE * res = flash.ReadPacket(); if(res->TOKEN_PACKET.PID == PID_OUT){ str += "\r\nFLASH: received OUT"; } p.DATA_PACKET.PID = PID_DATA0; p.DATA_PACKET.DATA = new char [ 11 ]; strcpy(p.DATA_PACKET.DATA, "Read"); p.DATA_PACKET.CRC16[1] = 0; p.DATA_PACKET.CRC16[2] = 1; flash_host.SendPacket(&p); str += "\r\nHOST: sending DATA0 with "; str += p.DATA_PACKET.DATA; res = flash.ReadPacket(); if(res->DATA_PACKET.PID == PID_DATA0){ str += "\r\nFLASH: received DATA0 with "; str += res->DATA_PACKET.DATA; p.TOKEN_PACKET.PID = PID_ACK; p.TOKEN_PACKET.ADDR = 0; p.TOKEN_PACKET.ENDP = 0; p.TOKEN_PACKET.CRC5 = 0; flash.SendPacket(&p); str += "\r\nFLASH: sending ACK"; } p.TOKEN_PACKET.PID = PID_OUT; p.TOKEN_PACKET.ADDR = 0; p.TOKEN_PACKET.ENDP = 0; p.TOKEN_PACKET.CRC5 = 0; flash_host.SendPacket(&p); str += "\r\nHOST: sending OUT"; res = flash.ReadPacket(); if(res->TOKEN_PACKET.PID == PID_OUT){ str += "\r\nFLASH: received OUT"; } p.DATA_PACKET.PID = PID_DATA0; p.DATA_PACKET.DATA = new char [ edit_file_name.GetWindowTextLength() +1 ]; edit_file_name.GetWindowText(p.DATA_PACKET.DATA, edit_file_name.GetWindowTextLength() +1); p.DATA_PACKET.CRC16[1] = 0; p.DATA_PACKET.CRC16[2] = 1; flash_host.SendPacket(&p); str += "\r\nHOST: sending DATA0 with "; str += p.DATA_PACKET.DATA; res = flash.ReadPacket(); FILE * file; if(res->DATA_PACKET.PID == PID_DATA0){ str += "\r\nFLASH: received DATA0 with "; str += res->DATA_PACKET.DATA; p.TOKEN_PACKET.PID = PID_ACK; p.TOKEN_PACKET.ADDR = 0; p.TOKEN_PACKET.ENDP = 0; p.TOKEN_PACKET.CRC5 = 0; flash.SendPacket(&p); str += "\r\nFLASH: sending ACK"; file = fopen(res->DATA_PACKET.DATA,"r"); } p.TOKEN_PACKET.PID = PID_OUT; p.TOKEN_PACKET.ADDR = 0; p.TOKEN_PACKET.ENDP = 0; p.TOKEN_PACKET.CRC5 = 0; flash.SendPacket(&p); str += "\r\nFLASH: sending IN"; res = flash_host.ReadPacket(); if(res->TOKEN_PACKET.PID == PID_OUT){ str += "\r\nHOST: received IN"; } char * data = new char [100]; fgets(data,100,file); p.DATA_PACKET.PID = PID_DATA0; p.DATA_PACKET.DATA = new char [ 101 ]; strcpy(p.DATA_PACKET.DATA, data); p.DATA_PACKET.CRC16[1] = 0; p.DATA_PACKET.CRC16[2] = 1; flash.SendPacket(&p); str += "\r\nFLASH: sending DATA0 with "; str += p.DATA_PACKET.DATA; res = flash_host.ReadPacket(); if(res->DATA_PACKET.PID == PID_DATA0){ str += "\r\nHOST: received DATA0 with "; str += res->DATA_PACKET.DATA; p.TOKEN_PACKET.PID = PID_ACK; p.TOKEN_PACKET.ADDR = 0; p.TOKEN_PACKET.ENDP = 0; p.TOKEN_PACKET.CRC5 = 0; flash_host.SendPacket(&p); str += "\r\nHOST: sending ACK"; } fclose(file); edit_flash_data.SetWindowText(res->DATA_PACKET.DATA); edit_console.SetWindowText(str); } Висновок: виконуючи дану лабораторну роботу я ознайомився з роботою шини USB
Антиботан аватар за замовчуванням

2015

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!