Вы находитесь на странице: 1из 12

Cu lc b Khoa hc - THPT Chuyn L Hng Phong TPHCM LHPSC

https://sites.google.com/site/lhpscienceclub
Giao tip USB qua WinUSB Trang 1
Giao tip USB qua WinUSB
Bi Quang Minh CLB Khoa hc Sng to THPT Chuyn
L Hng Phong TPHCM - 2012
Gii thiu
WinUSB l mt driver chung cho cc thit b USB c pht trin vi WDF (Windows Driver
Framework) cho Windows XP SP2. Kin trc WinUSB bao gm driver kernel-mode (winusb.sys) v
th vin lin kt ng user-mode (winusb.dll) cha cc hm WinUSB, c ci sn trn
Windows XP SP2 tr ln. Bng cch s dng cc hm ny, bn c th qun l thit b USB vi phn
mm user-mode.
Ti liu ny s gip bn c th thc hin mt kt ni USB vi kh nng cho php Bulk Transfer (HID
ch cho php Interrupt Transfer) mt cch nhanh chng. Bulk Transfer tuy c u tin thp nhng
full speed, tc truyn li gp 19 ln Interrupt.
Tuy nhin, bn cng c th dng cc chng trnh nh WinDriver to driver cho bn, nhng mnh
y s gii thiu 1 cch khc m khng cn qua cc chng trnh nh vy.
Thit b ngoi vi
Phn cng
C rt nhiu loi vi x l c th tch hp sn giao tip USB, trong ti liu ny, mnh s s dng
PIC18F14K50. Vi phn mm CCS lp trnh firmware. Bn cng cn mt header ICSP np v
y l IC dn (khng c trong s , bn tham kho thm ICSP ngoi).

U1: PIC18F14K50
C1: T ceramic 470nF
Cu lc b Khoa hc - THPT Chuyn L Hng Phong TPHCM LHPSC
https://sites.google.com/site/lhpscienceclub
Giao tip USB qua WinUSB Trang 2
C2, C3: T ceramic t 15 n 33 pF
X1: thch anh 12MHz (bt buc phi l 12MHz)
RED, GREEN: LED v xanh
R1: tr 10k
J1: cng kt ni USB
Thch anh bt buc phi chn l 12MHz, c th xung ng h 48MHz s dng cho USB Full
Speed. i vi cc loi PIC v MCU khc, nn c datasheet c th mc thch anh cho chnh xc.
Nhn hnh sau hiu r hn (trch t datasheet ca PIC18F14K50):

Firmware
Trong ti liu ny, mnh s s dng CCS vit Firmware.
Bt u vi vic to Project mi bng cch s dng PIC Wizard. Nhp vo biu tng PIC Wizard
to project mi.
Xung thch anh
vo (12MHz)
PLL s nhn 4
ln tn s thch
anh (12 * 4 = 48
MHz)
Xung ng
h s dng
cho USB
Cu lc b Khoa hc - THPT Chuyn L Hng Phong TPHCM LHPSC
https://sites.google.com/site/lhpscienceclub
Giao tip USB qua WinUSB Trang 3

Chn th mc lu project. Sau nhn Save.


Chn tn PIC l PIC18F14K50, tn s hot ng l 48 000 000 v ch dao ng l High Speed
Osc nh trong hnh.
Cu lc b Khoa hc - THPT Chuyn L Hng Phong TPHCM LHPSC
https://sites.google.com/site/lhpscienceclub
Giao tip USB qua WinUSB Trang 4

Ko thanh Scroll bar ca mc Fuses xung, chn tip No System Clock Postscaller.

Nhn OK to project.
Trong file chnh ca project ( y l main.c), hy copy m ny dn tt c vo:
#include "main.h" // Header chuong trinh chinh

#include "pic18_usb.h" // Cac file chua ham USB can thiet
#include "usb_desc_scope.h"
#include "usb.c"

int8 outbuffer[3]; // Bo dem cho du lieu xuat khoi may tinh
int8 inbuffer[2]; // Bo dem cho du lieu nhap vao may tinh
int1 red; // Trang thai LED do (chan C7)
int1 green; // Trang thai LED xanh (chan C6)
Cu lc b Khoa hc - THPT Chuyn L Hng Phong TPHCM LHPSC
https://sites.google.com/site/lhpscienceclub
Giao tip USB qua WinUSB Trang 5

void main()
{

setup_adc_ports(NO_ANALOGS|VSS_VDD); // Ma CCS tao
setup_adc(ADC_CLOCK_DIV_2|ADC_TAD_MUL_0);
setup_spi(SPI_SS_DISABLED);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC);

red = 0; green = 0; // Tat cac LED
output_low(PIN_C6);
output_low(PIN_C7);
usb_init(); // Khoi tao USB
usb_task();
int i = 0; // Bien dem
while (!usb_enumerated()) { } // Cho thiet bi da duoc ket noi
while (1) { // Vong lap chinh
if (usb_kbhit(1)) { // Neu co goi du lieu o Endpoint 1 (OUT)
usb_get_packet(1, outbuffer, 3); // Lay goi du lieu

// Voi outbuffer[0] = 0, se truyen lai trang thai cac LED
if (outbuffer[0] == 0) {
inbuffer[0] = green; //Dua trang thai cac LED vao buffer
inbuffer[1] = red;
// Truyen du lieu qua Endpoint 1 (IN)
usb_put_packet(1, inbuffer, 2, USB_DTS_TOGGLE);
}

// Voi outbuffer[0] = 1, se cap nhat trang thai cac LED
if (outbuffer[0] == 1) {
green = outbuffer[1]; // Cap nhat trang thai LED
red = outbuffer[2];
output_bit(PIN_C6, green);
output_bit(PIN_C7, red);
}
}
}
}
M s nhp d liu qua cc buffer l inbuffer vo outbuffer, nu nhn d liu vi outbuffer[0] l 0, th
PIC s truyn li trng thi cc LED li cho PIC qua inbuffer, cn nu outbuffer[0] l 1, th trng thi
cc LED s c cp nht qua d liu nhn c.
C th cc hm USB h tr ca CCS, bn c th c file help ca CCS.
Cu lc b Khoa hc - THPT Chuyn L Hng Phong TPHCM LHPSC
https://sites.google.com/site/lhpscienceclub
Giao tip USB qua WinUSB Trang 6
File m t USB, mnh s s dng li file usb_desc_scope.h. Bn hy copy file usb_desc_scope.h trong
th mc Driver trong th mc ci t CCS ra th mc project ca bn. Sau hy chnh s vi dng
nh th ny (dng 52-53).
#define USB_CONFIG_PID 0x0101
#define USB_CONFIG_VID 0x04D8
Bn c th thay PID v VID ca ring bn. VID 04D8 l VID ca Microchip. Bn hy ghi ch VID v
PID ca bn, n s c s dng sau ny. Sau sa tip cc dng (dng 62-68).
#ifndef USB_EP1_TX_SIZE
#define USB_EP1_TX_SIZE 2
#endif

#ifndef USB_EP1_RX_SIZE
#define USB_EP1_RX_SIZE 3
#endif
USB_EP1_TX_SIZE l s byte m mt packet truyn i (so vi thit b - tc l IN so vi my tnh)
EP1 (ti a vi bulk fullspeed l 64). USB_EP1_RX_SIZE l s byte m mt packet nhn v (so vi
thit b - tc l OUT so vi my tnh) EP1 (ti a vi bulk fullspeed l 64).
Cc gi tr cn li bn gi nguyn (ng nhin WinUSB c th h tr nhiu hn 1 EndPoint, bn c
th khai bo nu bn cn), bn c th thay i USB_STRING_DESC c thit b c tn ring ca
bn, nu bn cn. Thng, tn thit b trong USB_STRING_DESC ch xut hin trong khi ci t
driver, sau khi cm thit b, n s hin th tn quy nh trong driver nn vic thay i ny cng
khng cn thit).
V th l xong, bn c th nhn nt F9 bin dch firmware. Np file hex vo PIC v bn c mt
thit b USB.
Driver WinUSB
To gi ci t Driver
Driver WinUSB khng t nhn dng ging nh HID (d c sn trong my). Bn phi to mt gi
ci t WinUSB nh sau:
Download v Copy cc file sau vo cng th mc (nn to mt th mc mi):
WdfCoInstaller01009.dll http://www.mediafire.com/?x2xt3a0daja6rqu
winusbcoinstaller2.dll http://www.mediafire.com/?2vw7u623e010rcn
winusb.inf (ch cn nu ci driver trn Windows XP, do Windows XP khng c sn file ny,
mnh cha test bi v mnh s dng Win7) http://www.mediafire.com/?7j333gbaet1hiy5
usbtest.inf (file ny mnh to trn mu c sn ca Microshop)
http://www.mediafire.com/?4c9g9k8wf9jto1d
Bn cn chnh sa file usbtest.inf mt cht (ti v cc thit b USB l khc nhau):
Dng 12: Bn thay VID v PID tng ng ca bn (phn in m)
Cu lc b Khoa hc - THPT Chuyn L Hng Phong TPHCM LHPSC
https://sites.google.com/site/lhpscienceclub
Giao tip USB qua WinUSB Trang 7
[Standard.NTx86]
%DeviceName% =USB_Install, USB\VID_04D8&PID_0101
Dng 43: Bn thay mt GUID bt k vo (phn in m). GUID s lm cho thit b ca bn l c
nht, bn cng c th xi b sinh m GUID trang ny: http://www.guidgenerator.com/. Bn phi ghi
li GUID ny s dng v sau.
[Dev_AddReg]
HKR,,DeviceInterfaceGUIDs,0x10000,"{7ad1481b-9b3f-4650-946b-
c38a087ef87b}"
Cc dng cui:
[Strings]
ManufacturerName="Bui Quang Minh"
ClassName="Samples"
DiskName="USB Installation Disk"
WinUsb_SvcDesc="WinUSB Driver"
DeviceName="USB Test"
ManufacturerName, bn thay no bng nh sn xut, c th l tn ca bn.
DeviceName, bn thay n bng tn hin th cho thit b ca bn.
Vy l xong b ci t driver, bnLu file li
Ci t Driver
Bn cm thit b vo my tnh, my tnh s bo cho bn l khng th tm thy driver cho thit b ny.
Bn hy lm theo cc bc sau:
M Device Manager trong Control Panel:
Cu lc b Khoa hc - THPT Chuyn L Hng Phong TPHCM LHPSC
https://sites.google.com/site/lhpscienceclub
Giao tip USB qua WinUSB Trang 8

Trong mc Other Device, bn s thy thit b ca bn:

Click i chut vo thit b (CCS Bulk Demo), chn Update Driver:
Cu lc b Khoa hc - THPT Chuyn L Hng Phong TPHCM LHPSC
https://sites.google.com/site/lhpscienceclub
Giao tip USB qua WinUSB Trang 9

Chn Browse my computer for driver software.

Chn Browse v m th mc m bn cha b ci driver trong , v nhn next ci t.
Cu lc b Khoa hc - THPT Chuyn L Hng Phong TPHCM LHPSC
https://sites.google.com/site/lhpscienceclub
Giao tip USB qua WinUSB Trang 10

Bn hy cho php h thng ci t driver ny, chn Install this driver software anyway.

Khi qu trnh ci t hon tt, bn sn sng s dng thit b USB trn my tnh ca bn.
Cu lc b Khoa hc - THPT Chuyn L Hng Phong TPHCM LHPSC
https://sites.google.com/site/lhpscienceclub
Giao tip USB qua WinUSB Trang 11

Phn mm
Bn download solution ca mnh ti a ch: http://www.mediafire.com/?k7f3lipcjrwm5kg
Solution ny c to trn Microsoft Visual Studio 2012 th nghim, nhng bn c th to project
khc da trn ci file m ngun CS mnh km theo.
Gc ca code ny l Jan Axelson (tc gi cun sch USB Complete).
Bn hy m Form1.cs, trong l giao din 1 Form vi cc nt nh hnh:

2 Check box bt LED xanh v LED , khi nhn nt Send, d liu 2 check box s c truyn cho
thit b. V nhn read c trng thi 2 LED trn thit b hin thi v hin th ngc li ln
Checkbox.
Bn nhn F7 chuyn qua m ngun.
Bn hy thay i dng sau y:
Cu lc b Khoa hc - THPT Chuyn L Hng Phong TPHCM LHPSC
https://sites.google.com/site/lhpscienceclub
Giao tip USB qua WinUSB Trang 12
private const String WINUSB_GUID_STRING = "{7ad1481b-9b3f-4650-946b-c38a087ef87b}";
on "{7ad1481b-9b3f-4650-946b-c38a087ef87b}" bn thay bng GUID ca bn m bn nhp
vo ti dng 43 ca file usbtest.inf.
Bn c th bin dch v chy ngay thc hin chng trnh. Bn c th Check cc Checkbox
chn LED sng, v nhn nt Send xem cc LED sng. Th l bn hon thnh 1 kt ni USB cho
ring bn.
Sau y l giai thch mt s on m cn thit bn pht trin v sau:
Hm FindMyDevice() s tm thit b ca bn thng qua GUID m bn cho, tr v mt bin boolean l
true nu thnh cng (tm thy thit b), v false nu khng. Thit b ca bn s lu vo bin
myWinUsbDevice.
Hm SendDataBulk(byte[] data) s gi data theo EndPoint OUT c kiu Bulk. Nu thnh cng th s
tr v true.
Hm ReadDataBulk() s tr v data EndPoint IN c kiu Bulk. Nu c s tr v d liu, nu khng
s tr v null. Bn hy chnh gi tr MAX_DATA_IN theo s byte ln nht ca EndPoint (trong
trng hp ny l 2, max l 64).
Trong event USBTest_FormClosed(object sender, FormClosedEventArgs e), c dng
myWinUsbDevice.CloseDeviceHandle();
myDeviceManagement.StopReceivingDeviceNotifications(deviceNotificationHandle);
nhm ng cc bin giao tip USB li.
Ngoi ra, cn c rt nhiu hm c trong cc file WinUsbDevice.cs v DeviceManagement.cs, cc bn
t tham kho nhng g cn thit cho mnh.
Li kt
Ti liu n y l kt thc. Mnh hy vng ti liu ny s c ch cho cc bn ang nghin cu v giao
tip USB.
Ti liu ny c thc hin bi Bi Quang Minh Cu lc b Khoa hc THPT Chuyn L Hng
Phong TPHCM, nm 2012.

Вам также может понравиться