PIC Vietnam

Go Back   PIC Vietnam > Truyền thông > Giao tiếp USB, CAN, I2C, SPI, USART...

Tài trợ cho PIC Vietnam
Trang chủ Đăng Kí Hỏi/Ðáp Thành Viên Lịch Bài Trong Ngày Vi điều khiển

Giao tiếp USB, CAN, I2C, SPI, USART... Những giao tiếp được tích hợp trên PIC

 
 
Ðiều Chỉnh Xếp Bài
Prev Previous Post   Next Post Next
Old 17-07-2011, 09:37 PM   #1
minh_cly
Đệ tử 1 túi
 
Tham gia ngày: Mar 2011
Nơi Cư Ngụ: TPHCM
Bài gửi: 12
:
Smile Tạo driver cho USB bằng LibUSB

Sau một thời gian trải nghiệm làm 1 cái thiết bị ngoại vi sử dụng USB, cái phần firmware và software trên PC thì tương đối là dễ, nhưng viết driver cho giao tiếp USB thì khó kinh khủng. Đương nhiên em ko có thời gian để ngồi mò mẫn viết driver nên sẽ dùng cái có sẵn. Hiện nay thấy phổ biến trên diễn đàn toàn xài cái Jungo WinDriver (USB Complete có đề cập) nhưng thằng này là bản quyền, nên em sẽ generate cái driver = LibUSB.
LibUSB là một thư viện kết nối USB, được viết trên Linux => mã nguồn mở, sau đó chuyển qua Win nên các bác an tâm về vụ bản quyền.
Em thích viết C# hơn (em là dân soft, tự nghiên cứu hard) nên sẽ down gói LibUSBDotNet : http://nchc.dl.sourceforge.net/proje...etup.2.2.8.exe. Còn các bác nào thích viết = VB hay C/C++ thì down gói LibUSB-win32 về : http://nchc.dl.sourceforge.net/proje...in-1.2.4.0.zip.
Các bác down mấy cái gói đó về (em xài LibUSBDotNet), cài đặt, cắm thiết bị USB, xong ròy vào thư mục cài đặt, mở file InfWizard.exe, chọn thiết bị vừa cắm, chọn nơi lưu file inf, xong rồi cài driver -> hết.

Sau đây là các lệnh C# để kết nối USB:
Using 2 cái này:
using LibUsbDotNet;
using LibUsbDotNet.Main;
Sau đó dùng lệnh:
UsbDevice usbdev;
UsbDeviceFinder usbdevfinder = new UsbDeviceFinder(VendorID, ProductID);
Cái này là khai báo ban đầu, tạo ra thiết bị USB với VID và PID tương ứng. Sau đó tìm thiết bị bằng lệnh:
usbdev = UsbDevice.OpenUsbDevice(usbdevfinder);
Nếu ko tìm thấy usbdev sẽ bằng null.
Nếu tìm thấy hãy xác lập Configure và Interface bằng lệnh:
IUsbDevice wholeusb = usbdev as IUsbDevice;
if (!ReferenceEquals(wholeusb, null))
{
wholeusb.SetConfiguration(Configure);
wholeusb.ClaimInterface(Interface);
}
Nếu muốn gởi dữ liệu:
writer = ppdev.OpenEndpointWriter(WriteEndpointID.Ep01); //tùy vào Endpoint mà xác lập
int byteWriten = 0;
writer.Write(data, timeout, out byteWriten);
Nếu muốn nhận dữ liệu:
reader = ppdev.OpenEndpointReader(ReadEndpointID.Ep01); //tùy vào Endpoint mà xác lập
int byteReaden = 0;
reader.Read(rev, timeout, out byteReaden);
Sau khi đã làm việc với USB xong xuôi, giải phóng USB bằng lệnh:
UsbDevice.Exit();
Em ko biết viết C/C++ nhiều lắm nên ko biết lệnh trong C ạ.
Thế là xong vụ giao tiếp với USB, em còn trẻ người non dạ, mong các bác đừng trách.

P/S: Em ko biết cách post hình, các bác chỉ em với để bài viết thêm sinh động
minh_cly vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn
 


Quyền Sử Dụng Ở Diễn Ðàn
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is Mở
Smilies đang Mở
[IMG] đang Mở
HTML đang Tắt

Chuyển đến


Múi giờ GMT. Hiện tại là 01:06 AM.


Được sáng lập bởi Đoàn Hiệp
Powered by vBulletin®
Page copy protected against web site content infringement by Copyscape
Copyright © PIC Vietnam