งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

การสื่อสารกับบอร์ด MCU ผ่านพอร์ต USB ปฏิบัติการเกี่ยวกับวิศวกรรม คอมพิวเตอร์ (01204223) ผศ. ดร. ชัยพร ใจแก้ว ภาควิชาวิศวกรรมคอมพิวเตอร์ คณะวิศวกรรมศาสตร์

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "การสื่อสารกับบอร์ด MCU ผ่านพอร์ต USB ปฏิบัติการเกี่ยวกับวิศวกรรม คอมพิวเตอร์ (01204223) ผศ. ดร. ชัยพร ใจแก้ว ภาควิชาวิศวกรรมคอมพิวเตอร์ คณะวิศวกรรมศาสตร์"— ใบสำเนางานนำเสนอ:

1 การสื่อสารกับบอร์ด MCU ผ่านพอร์ต USB ปฏิบัติการเกี่ยวกับวิศวกรรม คอมพิวเตอร์ ( ) ผศ. ดร. ชัยพร ใจแก้ว ภาควิชาวิศวกรรมคอมพิวเตอร์ คณะวิศวกรรมศาสตร์ มหาวิทยาลัยเกษตรศาสตร์

2 2 สถาปัตยกรรม USB อุปกรณ์ด้านหนึ่งทำหน้าที่เป็นโฮสท์ (Host) อีกด้านหนึ่งทำหน้าที่เป็นดีไวซ์ (Device) อุปกรณ์ด้านหนึ่งทำหน้าที่เป็นโฮสท์ (Host) อีกด้านหนึ่งทำหน้าที่เป็นดีไวซ์ (Device) ไม่ว่าจะเขียนข้อมูลไปยังดีไวซ์ หรืออ่าน ข้อมูลจากดีไวซ์ ฝั่งโฮสท์ต้องมีการส่งคำ ร้องขอ (request) ไปก่อนเสมอ ไม่ว่าจะเขียนข้อมูลไปยังดีไวซ์ หรืออ่าน ข้อมูลจากดีไวซ์ ฝั่งโฮสท์ต้องมีการส่งคำ ร้องขอ (request) ไปก่อนเสมอ USB Host USB Device USB Cable Request Response PC - Notebook - - Flash drive - Mouse - Game controller - etc. Device Driver App

3 3 โครงสร้างของคำร้องขอ ประกอบด้วยข้อมูล 5 ส่วน ประกอบด้วยข้อมูล 5 ส่วน  RequestType (1 ไบท์ ) – ทิศทางการ ส่งข้อมูล  Request (1 ไบท์ ) – หมายเลขคำร้อง ขอ  Value (2 ไบท์ ) – พารามิเตอร์ประกอบ คำร้องเพิ่มเติม  Index (2 ไบท์ ) – พารามิเตอร์ประกอบ คำร้องเพิ่มเติม  Length (2 ไบท์ ) – จำนวนไบท์ของ ข้อมูลที่ต้องการส่งให้หรือรับจากดีไวซ์

4 4 โค้ดตัวอย่าง ดาวน์โหลดได้จาก ดาวน์โหลดได้จาก example.tgz แตกไฟล์ไว้ในเครื่องของตนโดยเรียกคำสั่ง เชลล์ แตกไฟล์ไว้ในเครื่องของตนโดยเรียกคำสั่ง เชลล์ ในไฟล์ตัวอย่างประกอบด้วย ในไฟล์ตัวอย่างประกอบด้วย  ไลบรารี V-USB  main.c – ตัวอย่างเฟิร์มแวร์ฝั่งดีไวซ์  practicum.py – ไพธอนมอดูลสำหรับฝั่งโฮสท์  peri.py – ไฟล์เริ่มต้นสำหรับทำแบบฝึกหัด  test-usb.py – โค้ดสำหรับทดสอบแบบฝึกหัด  Makefile $ tar zxf usb-example.tgz

5 5 เฟิร์มแวร์ฝั่งดีไวซ์ ( บอร์ด MCU) อาศัยไลบรารี V-USB จำลองกลไก USB ด้วยซอฟต์แวร์ อาศัยไลบรารี V-USB จำลองกลไก USB ด้วยซอฟต์แวร์ แก้ไขการตั้งค่าในไฟล์ usbconfig.h แก้ไขการตั้งค่าในไฟล์ usbconfig.h  เปลี่ยน USB_CFG_DEVICE_NAME ให้ เป็น Practicum Group XX โดย XX เป็นหมายเลขกลุ่ม ( อย่าลืมระบุความ ยาวสตริงให้ถูกต้อง ) โค้ดในเมนลูปมีการเรียกฟังก์ชัน usbPoll() เพื่อตรวจสอบคำร้องขอจากฝั่งโฮสท์ โค้ดในเมนลูปมีการเรียกฟังก์ชัน usbPoll() เพื่อตรวจสอบคำร้องขอจากฝั่งโฮสท์ เมื่อได้รับคำร้องขอ ไลบรารี V-USB จะ เรียกฟังก์ชัน usbFunctionSetup() โดย อัตโนมัติ เมื่อได้รับคำร้องขอ ไลบรารี V-USB จะ เรียกฟังก์ชัน usbFunctionSetup() โดย อัตโนมัติ  ต้องเขียนฟังก์ชันนี้ขึ้นมาเอง

6 6 ตัวอย่างฟังก์ชัน usbFunctionSetup usbMsgLen_t usbFunctionSetup(uint8_t data[8]) { usbRequest_t *rq = (void *)data; static uint16_t returnedData; if (rq->bRequest == 0) { /* Do something */ return 0; } else if (rq->bRequest == 1) { /* Do something */ usbMsgPtr = (uchar*) &returnedData; return sizeof(returnedData); } return 0; } ตอบสนองคำร้องขอที่ไม่ ขอข้อมูลคืน - ให้ฟังก์ชันคืนค่า 0 ตอบสนองคำร้องขอที่ ต้องการข้อมูลคืน - ให้ตัวแปร usbMsgPtr ชี้ที่ ตำแหน่งของ ข้อมูลที่ต้องการส่งให้ โฮสท์ - ให้ฟังก์ชันคืนค่าจำนวน ไบท์ที่ต้องการ ส่งให้โฮสท์ ตรวจสอบหมายเลขคำ ร้อง

7 7 โครงสร้างคำร้องขอ มีขนาด 8 ไบท์ นิยามไว้แล้วในสตรัค usbRequest_t ( ใน ไฟล์ usbdrv/usbdrv.h ) ดังนี้ มีขนาด 8 ไบท์ นิยามไว้แล้วในสตรัค usbRequest_t ( ใน ไฟล์ usbdrv/usbdrv.h ) ดังนี้ uchar ถูกนิยามให้เป็นชนิดข้อมูล unsigned char ( ซึ่ง เทียบเท่ากับ uint8_t ) ส่วน usbWord_t นิยามเป็นชนิด union ดังนี้ uchar ถูกนิยามให้เป็นชนิดข้อมูล unsigned char ( ซึ่ง เทียบเท่ากับ uint8_t ) ส่วน usbWord_t นิยามเป็นชนิด union ดังนี้ typedef struct usbRequest{ uchar bmRequestType; /* 1 ไบท์ */ uchar bRequest; /* 1 ไบท์ */ usbWord_t wValue; /* 2 ไบท์ */ usbWord_t wIndex; /* 2 ไบท์ */ usbWord_t wLength; /* 2 ไบท์ */ }usbRequest_t; typedef union usbWord{ unsigned word; uchar bytes[2]; }usbWord_t;

8 8 โปรแกรมฝั่งโฮสท์ ( ไพ ธอน ) อาศัยไลบรารี PyUSB อาศัยไลบรารี PyUSB  ทดสอบโดยเรียกคำสั่ง import usb ในไพธอน  (Linux) หากไม่พบให้ติดตั้งโดยใช้คำสั่ง  (MacOS) หากไม่พบให้ดาวน์โหลด libusb1.0 จาก SourceForge มอดูล practicum.py เตรียมคลาส McuBoard ไว้ให้ใช้งานได้สะดวกขึ้น มอดูล practicum.py เตรียมคลาส McuBoard ไว้ให้ใช้งานได้สะดวกขึ้น $ sudo apt-get install python-usb >>> from practicum import McuBoard >>> b = McuBoard() >>> help(b)

9 9 ตัวอย่างการส่งคำร้อง >>> from practicum import McuBoard >>> b = McuBoard() # สั่งให้ LED สีเขียว ( หมายเลข 2) บน Peripheral board ติด >>> b.usb_write(0, index=2, value=1) # อ่านสถานะสวิตช์บน Peripheral board >>> b.usb_read(1, length=1)

10 10 แบบฝึกหัด แก้ไขเฟิร์มแวร์ (main.c) เพื่อเพิ่มคำร้องขอ หมายเลข 2 แก้ไขเฟิร์มแวร์ (main.c) เพื่อเพิ่มคำร้องขอ หมายเลข 2  ส่งค่าแสง 10 บิตกลับมายังโฮสท์ (2 ไบท์ ) ค่าใน tuple ที่ส่งคืนคือ ( ไบท์ต่ำ, ไบท์สูง ) แก้คลาส PeriBoard ในมอดูล peri.py ที่สืบ เชื้อสายมาจากคลาส McuBoard ใน practicum.py โดยให้มีเมท็อดดังนี้ แก้คลาส PeriBoard ในมอดูล peri.py ที่สืบ เชื้อสายมาจากคลาส McuBoard ใน practicum.py โดยให้มีเมท็อดดังนี้  setLed(self, led_no, led_value) – เซ็ตสถานะ LED ตามหมายเลข led_no ที่ระบุให้เป็นไปตาม led_value (0 = ดับ, 1 = ติด )  setLedValue(self, value) – นำ 3 บิตล่างของ value แสดงผลบน LED โดยให้สีแดงเป็นบิตขวา สุด เขียวเป็นบิตซ้ายสุด  getSwitch(self) – คืนค่า True เมื่อสวิตช์ถูกกด False เมื่อปล่อย  getLight(self) – คืนค่าแสงในช่วง

11 11 โปรแกรมสำหรับทดสอบ (test-usb.py) from peri import PeriBoard from time import sleep b = PeriBoard() count = 0 while True: b.setLedValue(count) sw = b.getSwitch() light = b.getLight() if sw is True: state = "PRESSED" else: state = "RELEASED" print "LEDs set to %d | Switch state: %-8s | Light value: %d" % ( count, state, light) sleep(0.25) count = (count + 1) % 8

12 12 โครงงานปลายภาค แต่ละกลุ่มพัฒนาโครงงานขนาดเล็ก แต่ละกลุ่มพัฒนาโครงงานขนาดเล็ก  เพิ่มฮาร์ดแวร์จาก peripheral board ที่ มีอยู่ หรือทำบอร์ดใหม่หากต้องการ  พัฒนาเฟิร์มแวร์สำหรับ MCU  เชื่อมต่อกับซอฟต์แวร์บนฝั่งพีซีผ่าน พอร์ต USB กำหนดส่งและนำเสนอ : แจ้งให้ทราบ ภายหลัง กำหนดส่งและนำเสนอ : แจ้งให้ทราบ ภายหลัง ดูตัวอย่างโครงงานของรุ่นพี่ได้จาก เว็บ ดูตัวอย่างโครงงานของรุ่นพี่ได้จาก เว็บ 


ดาวน์โหลด ppt การสื่อสารกับบอร์ด MCU ผ่านพอร์ต USB ปฏิบัติการเกี่ยวกับวิศวกรรม คอมพิวเตอร์ (01204223) ผศ. ดร. ชัยพร ใจแก้ว ภาควิชาวิศวกรรมคอมพิวเตอร์ คณะวิศวกรรมศาสตร์

งานนำเสนอที่คล้ายกัน


Ads by Google