winusb.pdf

Upload: le-minh-chau

Post on 04-Apr-2018

222 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/29/2019 WinUSB.pdf

    1/12

    Cu lc b Khoa hc - THPT Chuyn L Hng Phong TPHCM LHPSChttps://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 thiuWinUSB l mt driver chung cho cc thit b USB c pht trin vi WDF (Windows DriverFramework) cho Windows XP SP2. Kin trc WinUSB bao gm driver kernel-mode (winusb.sys) vth vin lin kt ng user-mode (winusb.dll) cha cc hm WinUSB, c ci sn trnWindows XP SP2 tr ln. Bng cch s dng cc hm ny, bn c th qun l thit b USB vi phnmm user-mode.

    Ti liu ny s gip bn c th thc hin mt kt ni USB vi kh nng cho php Bulk Transfer (HIDch 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 cngC rt nhiu loi vi x l c th tch hp sn giao tip USB, trong ti liu ny, mnh s s dngPIC18F14K50. Vi phn mm CCS lp trnh firmware. Bn cng cn mt header ICSP np vy l IC dn (khng c trong s , bn tham kho thm ICSP ngoi).

    U1: PIC18F14K50 C1: T ceramic 470nF

  • 7/29/2019 WinUSB.pdf

    2/12

    Cu lc b Khoa hc - THPT Chuyn L Hng Phong TPHCM LHPSChttps://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 FullSpeed. 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):

    FirmwareTrong 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 anhvo (12MHz)

    PLL s nhn 4ln tn s thchanh (12 * 4 = 48MHz)

    Xung ngh s dng

    cho USB

  • 7/29/2019 WinUSB.pdf

    3/12

    Cu lc b Khoa hc - THPT Chuyn L Hng Phong TPHCM LHPSChttps://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.

  • 7/29/2019 WinUSB.pdf

    4/12

    Cu lc b Khoa hc - THPT Chuyn L Hng Phong TPHCM LHPSChttps://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)

  • 7/29/2019 WinUSB.pdf

    5/12

    Cu lc b Khoa hc - THPT Chuyn L Hng Phong TPHCM LHPSChttps://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, thPIC s truyn li trng thi cc LED li cho PIC qua inbuffer, cn nu outbuffer[0] l 1, th trng thicc 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.

  • 7/29/2019 WinUSB.pdf

    6/12

    Cu lc b Khoa hc - THPT Chuyn L Hng Phong TPHCM LHPSChttps://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 trongth mc Driver trong th mc ci t CCS ra th mc project ca bn. Sau hy chnh s vi dngnh 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 vPID 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 vithit 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 cth 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 tdriver, sau khi cm thit b, n s hin th tn quy nh trong driver nn vic thay i ny cngkhng cn thit).

    V th l xong, bn c th nhn nt F9 bin dch firmware. Np file hex vo PIC v bn c mtthit b USB.

    Driver WinUSB

    To gi ci t DriverDriver WinUSB khng t nhn dng ging nh HID (d c sn trong my). Bn phi to mt gici 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)

  • 7/29/2019 WinUSB.pdf

    7/12

    Cu lc b Khoa hc - THPT Chuyn L Hng Phong TPHCM LHPSChttps://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 cnht, 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.

    Lu file li. Vy l xong b ci t driver.

    Ci t DriverBn 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:

  • 7/29/2019 WinUSB.pdf

    8/12

    Cu lc b Khoa hc - THPT Chuyn L Hng Phong TPHCM LHPSChttps://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:

  • 7/29/2019 WinUSB.pdf

    9/12

    Cu lc b Khoa hc - THPT Chuyn L Hng Phong TPHCM LHPSChttps://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.

  • 7/29/2019 WinUSB.pdf

    10/12

    Cu lc b Khoa hc - THPT Chuyn L Hng Phong TPHCM LHPSChttps://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.

  • 7/29/2019 WinUSB.pdf

    11/12

    Cu lc b Khoa hc - THPT Chuyn L Hng Phong TPHCM LHPSChttps://sites.google.com/site/lhpscienceclub

    Giao tip USB qua WinUSB Trang 11

    Phn mmBn download solution ca mnh ti a ch: http://www.mediafire.com/?k7f3lipcjrwm5kgSolution ny c to trn Microsoft Visual Studio 2012 th nghim, nhng bn c th to projectkhc 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 chothit b. V nhn read c trng thi 2 LED trn thit b hin thi v hin th ngc li lnCheckbox.

    Bn nhn F7 chuyn qua m ngun.

    Bn hy thay i dng sau y:

  • 7/29/2019 WinUSB.pdf

    12/12

    Cu lc b Khoa hc - THPT Chuyn L Hng Phong TPHCM LHPSChttps://sites.google.com/site/lhpscienceclub

    Giao tip USB qua WinUSB Trang 12

    privateconstString WINUSB_GUID_STRING = "{7ad1481b-9b3f-4650-946b-c38a087ef87b}";

    on "{7ad1481b-9b3f-4650-946b-c38a087ef87b}" bn thay bng GUID ca bn m bn nhpvo 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 choring 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 ltrue nu thnh cng (tm thy thit b), v false nu khng. Thit b ca bn s lu vo binmyWinUsbDevice.

    Hm SendDataBulk(byte[] data) s gi data theo EndPoint OUT c kiu Bulk. Nu thnh cng th str v true.

    Hm ReadDataBulk() s tr v data EndPoint IN c kiu Bulk. Nu c s tr v d liu, nu khngs tr v null. Bn hy chnh gi tr MAX_DATA_IN theo s byte ln nht ca EndPoint (trongtrng 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 bnt tham kho nhng g cn thit cho mnh.

    Li ktTi liu n y l kt thc. Mnh hy vng ti liu ny s c ch cho cc bn ang nghin cu v giaotip USB.

    Ti liu ny c thc hin bi Bi Quang Minh Cu lc b Khoa hc THPT Chuyn L HngPhong TPHCM, nm 2012.