Professional Documents
Culture Documents
I NI U
H n i, ngy 18/12/2008
Nguy n Ng c H ng
-1-
Nguy n Ng c H ng L p TKTL 40 HVKTQS
Ph n 1
Ph n c ng USB 2.0
1. Cc linh ki n chnh:
- Pic18f4550( ho c Pic18f2550 ).
- ng USB ki u B.
- Cp USB 2 u ki u A v B.
- Th ch anh c tr s l b i c a 4, t c l c gi tr 4,8,12,16,20(Mhz).
- t s linh ki n lm m ch tu ch n.
2. m ch giao ti p n gi n:
3. u b ng m ch thi t k :
V khng c my nh nn khng ch p c hnh ny.
4. t s ch v ph n c ng:
- Th ch anh s d ng ph i l cc b i c a 4 v d 4M, 8M, 12M, 20M.
Yu c u ny l do t n s ho t ng c a bus USB l 12Mbs, chip
n t o ra t n s 4M t ngu n th nh anh, sau dng nhn t n t i
96M v ty thu c vo vi c c t bit chia t n c p cho modul
USB v CPU.
- Khng nn b qua cc t ch ng nhi u chn t, chn ngu n c a
chp, t i chn n p ra c a v-usb.
- Dy cp USB 2 u nn mua ng b v i c ng USB ki u B v
khng nn dy cp qu di s gy suy gi m tn hi u.
-2-
Nguy n Ng c H ng L p TKTL 40 HVKTQS
- Nn t n d ng ngu n nui t c ng USB thay v ngu n ngoi v b
xung thm m t s t ch ng nhi u, n nh ngu n n u c n.
- Khi lm v i PIC18f2550 ti th y c n ph i n i tr chn PGM xu ng
t th chip m i ch y??
Vi c ti p theo l vi t fimware cho chip, sau t o driver v vi t dao di n
th c hi n vi c truy n nh n, t t c cc v n c c p ph n 2 v ph n 3.
Ch r ng vi c m ph ng trn proteus 7.2 ch gip ta nh n bi t c fimware
a ta vi t ng ch a qua vi c PC c pht hi n c thi t b hay khng m
khng th dung n t o driver b ng ph n m m WinDriver, c l do hai ph n
m ny khng t ng thch nhau.
-3-
Nguy n Ng c H ng L p TKTL 40 HVKTQS
Ph n 2:
Vi t Fimware cho Pic18f4550 ( ho c Pic18f2550)
1. Trnh bin d ch:
C th vi t Fimware b ng t t c cc trnh bin d ch thng d ng, song theo ki n
a ti CCS l trnh bin d ch h tr vi t Fimware cho chp USB kh t t. Trong
v d c a CCS c cc v d cho c HID, Costume Driver v CDC. ng th i cc
th vi n hm cho USB c xy d ng t ng i thu n l i khi s d ng v v y r t
thu n l i cc b n c th nhanh chng th c hi n USB.
2. Cc th c th nghi m:
Sau khi ph n c ng c un i y b n c th n p th
cc cc fimware c s n t ng thch v i ph n c ng v c m thi t b vo my tnh.
u ph n c ng ng v fimware t ng thch my tnh s thng bo Found
New Hardware v i h i ci t Driver cho thi t b . C n l u n u ph n m n
trong chp ci t t n s th ch anh khng kh p v i th ch anh ph n c ng s gy
ra l i v my tnh khng th nh n di n thi t b . N u khi t ng thch v th ch
anh m my tnh v n khng detect thi t b th c th ph n c ng c a b n v n cn
n ho c c ng USB c v n v ti p xc hy ki m tra k .
u thi t b c a b n khng b l i v fimware chnh xc:
3. Cc th vi n v hm s d ng chnh vi t USB:
C 3 file b n c n include vo project CCS c a b n l:
- #include <pic18_usb.h>
- #include <usb.c>
- #include <usb_desc_scope1.h>
Hai file trn c s n trong th vi n c a CCS ch a cc nh ngh a v cc hm ph c
cho giao ti p USB, file th 3 l file m t thi t b c ch nh s a t file
usb_desc_scope.h ng c s n trong th vi n c a CCS ph h p v i yu c u
a b n. Ngoi ra cn m t file n a l:
- #include . ng d n/ usb_demo_bulk.h>
File ny khng c s n trong CCS nh cc file trn. N c t o ra khi b n l p
t Project trn CCS qua PIC Wizard, tn file do b n t.
-1-
Nguy n Ng c H ng L p TKTL 40 HVKTQS
-2-
Nguy n Ng c H ng L p TKTL 40 HVKTQS
//configuration descriptor
char const USB_CONFIG_DESC[] = {
//config_descriptor for config index 1
USB_DESC_CONFIG_LEN, //length of descriptor size
USB_DESC_CONFIG_TYPE, //constant CONFIGURATION (0x02)
USB_TOTAL_CONFIG_LEN,0, //size of all data returned for this config
1, //number of interfaces this device supports
0x01, //identifier for this configuration. (IF we had more than one
configurations)
0x00, //index of string descriptor for this configuration
0xC0, //bit 6=1 if self powered, bit 5=1 if supports remote wakeup (we don't),
bits 0-4 reserved and bit7=1
0x32, //maximum bus power required (maximum milliamperes/2) (0x32 =
100mA)
//endpoint descriptor
USB_DESC_ENDPOINT_LEN, //length of descriptor
USB_DESC_ENDPOINT_TYPE, //constant ENDPOINT (0x05)
0x81, //endpoint number and direction (0x81 = EP1 IN)
0x02, //transfer type supported (0 is control, 1 is iso, 2 is bulk, 3 is interrupt)
USB_EP1_TX_SIZE & 0xFF,USB_EP1_TX_SIZE >> 8, //maximum packet size
supported
0x01, //polling interval in ms. (for interrupt transfers ONLY)
//endpoint descriptor
-3-
Nguy n Ng c H ng L p TKTL 40 HVKTQS
};
//define how many interfaces there are per config. [0] is the first config, etc.
const char USB_NUM_INTERFACES[USB_NUM_CONFIGURATIONS]={1};
//////////////////////////////////////////////////////////////////
///
/// start device descriptors
///
//////////////////////////////////////////////////////////////////
//device descriptor
char const USB_DEVICE_DESC[] ={
USB_DESC_DEVICE_LEN, //the length of this report
0x01, //constant DEVICE (0x01)
0x10,0x01, //usb version in bcd
0x00, //class code (if 0, interface defines class. FF is vendor defined)
0x00, //subclass code
0x00, //protocol code
USB_MAX_EP0_PACKET_LENGTH, //max packet size for endpoint 0. (SLOW
SPEED SPECIFIES 8)
0xd8,0x04, //vendor id (0x04D8 is Microchip)
0x01,0x01, //product id
0x00,0x01, //device release number
-4-
Nguy n Ng c H ng L p TKTL 40 HVKTQS
//////////////////////////////////////////////////////////////////
///
/// start string descriptors
/// String 0 is a special language string, and must be defined. People in U.S.A. can leave this
alone.
///
/// You must define the length else get_next_string_character() will not see the string
/// Current code only supports 10 strings (0 thru 9)
///
//////////////////////////////////////////////////////////////////
-5-
Nguy n Ng c H ng L p TKTL 40 HVKTQS
' ',0,
'B',0,
'u',0,
'l',0,
'k',0,
' ',0,
'N',0,
'N',0,
'H',0,
};
#ENDIF
-6-
Nguy n Ng c H ng L p TKTL 40 HVKTQS
#use delay(clock=12000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
void setup()
{
setup_adc_ports(AN0|VSS_VDD);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(FALSE);
setup_wdt(WDT_OFF);
setup_timer_0(RTCC_INTERNAL);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
setup_low_volt_detect(FALSE);
setup_oscillator(False);
}
Nh ng m ch ti nh d u trn, b n c n l u r ng t n s th nh anh
ngoi s c chia c dao ng 4M y l yu c u b t bu c khi s d ng
PLL. y ti dng th ch anh 12M nn PLL=3. M t s tham s khc b n c th
xem chi ti t trong datasheet.
Nh v y n y ta ch cn m t cng vi c n a l vi t hm main.
7. ch ng trnh chnh:
#include "E:\MICROCONTROL\PIC\USB\usb_demo_bulk.h"
#include <pic18_usb.h>
#include <usb_desc_scope1.h>
#include <usb.c>
void usb_debug_task(void)
{
-7-
Nguy n Ng c H ng L p TKTL 40 HVKTQS
new_connected=usb_attached();
new_enumerated=usb_enumerated();
last_connected=new_connected;
last_enumerated=new_enumerated;
}
void main()
{
int8 out_data[2];
int8 in_data[2];
int8 send_timer=0;
int8 count=0;
int16 i;
setup();
while (TRUE)
{
usb_task();
usb_debug_task();
if(usb_enumerated())
{
if (!send_timer)
{
count++;
send_timer=250;
out_data[0]=count;
if (usb_put_packet(1, out_data, 1, USB_DTS_TOGGLE))
printf("\r\n<-- Sending 2 bytes: 0x%X", out_data[0]);
}
if (usb_kbhit(1))
{
usb_get_packet(1, in_data, 1);
-8-
Nguy n Ng c H ng L p TKTL 40 HVKTQS
-9-
Nguy n Ng c H ng L p TKTL 40 HVKTQS
Ph n 3:
Vi t Ch ng Trnh C# giao ti p v i thi t b USB
-1-
Nguy n Ng c H ng L p TKTL 40 HVKTQS
Ch n pht ra file Driver v nh tn cho thi t b c a b n:
Ti p t c ch n next ta c:
Cng vi c cn l i ch l OK v ch my ch y hihi.
-2-
Nguy n Ng c H ng L p TKTL 40 HVKTQS
Ch y Project trn Visual Studio 2005 b n c th th y WinDriver t o cho ta
t giao di n ban u s d ng cc giao ti p USB, b n c th s d ng lun
giao di n ny th c hi n theo Project c a b n:
-3-
Nguy n Ng c H ng L p TKTL 40 HVKTQS
- p KEY_USB_Pipe c s l ng hm t ng i l n v chuyn d ng
c vi t d li u ki m tra tr ng thi truy n nh n, ki m sot vi c kh i ng v
ng cc ng ng
- L p Pipe_list th c hi n qu n l cc ng ng vo ra c a thi t b .
p cc hm ny kh linh ho t v y cho m i ng d ng USB v b n c ng
khng c n ph i tm hi u k t t c cc hm v chng ta ch c n lm vi c v i
t s hm nh t nh l giao ti p.
-6-
Nguy n Ng c H ng L p TKTL 40 HVKTQS
D_USER_ATTACH_CALLBACK dDeviceAttachCb = new
D_USER_ATTACH_CALLBACK(UserDeviceAttach);
D_USER_DETACH_CALLBACK dDeviceDetachCb = new
D_USER_DETACH_CALLBACK(UserDeviceDetach);
// kh i t o thi t b USB
usb_device = pDev;
// kh i t o ng ng nh n v truy n
usb_pipe_rev =
(PROJECT_USB_4550_Pipe)usb_device.GetpPipesList()[1];
usb_pipe_trs =
(PROJECT_USB_4550_Pipe)usb_device.GetpPipesList()[2];
-7-
Nguy n Ng c H ng L p TKTL 40 HVKTQS
safeLogTextCallBack cb = new
safeLogTextCallBack(SafeLogText);
this.Invoke(cb, new object[] { sMsg });
}
else
{
txtLog.AppendText(sMsg);
}
}
public void TraceMsg(string sMsg)
{
SafeLogText(sMsg);
}
By gi ta b t tay vo vi c xy d ng hm dng truy n nh n d li u. Khi nh n
vo button write th th c hi n truy n m t byte xu ng V K:
private void btwrite_Click(object sender, EventArgs e)
{
SingleTransfer();
}
Hm SingleReceiver(); t ng t nh hm SingleTransfer(); th c hi n vi c
nh n d li u vo b m:
usb_pipe_rev.UsbPipeTransferAsync(true, 0, buffer,
dwBuffSize, TIME_OUT, new
D_USER_TRANSFER_COMPLETION(Transfer_rev_Completion));
using Jungo.wdapi_dotnet;
using Jungo.project_usb_4550_lib;
using wdu_err = Jungo.wdapi_dotnet.WD_ERROR_CODES;
-8-
Nguy n Ng c H ng L p TKTL 40 HVKTQS
using WORD = System.UInt16;
using UCHAR = System.Byte;
namespace project_usb_4550
{
public partial class form_main : Form
{
private const string DEFAULT_LICENSE_STRING =
"6C3CC2CFE89E7AD04238DF2EF24449E848CDC187.NguyenNgocHung";
private const string DEFAULT_DRIVER_NAME = "windrvr6";
private const WORD DEFAULT_VENDOR_ID = 0x04D8;
private const WORD DEFAULT_PRODUCT_ID = 0x0101;
public const DWORD TIME_OUT = 30000;
uDevManager = new
PROJECT_USB_4550_DeviceManager(dDeviceAttachCb, dDeviceDetachCb,
DEFAULT_VENDOR_ID, DEFAULT_PRODUCT_ID, DEFAULT_DRIVER_NAME,
DEFAULT_LICENSE_STRING);
}
usb_device = pDev;
usb_pipe_rev =
(PROJECT_USB_4550_Pipe)usb_device.GetpPipesList()[1];
usb_pipe_trs =
(PROJECT_USB_4550_Pipe)usb_device.GetpPipesList()[2];
-9-
Nguy n Ng c H ng L p TKTL 40 HVKTQS
private void DeviceDetachGuiCb(PROJECT_USB_4550_Device pDev)
{
TraceMsg("Your device has detached\r\n");
}
usb_pipe_rev.UsbPipeTransferAsync(true, 0, buffer,
- 10 -
Nguy n Ng c H ng L p TKTL 40 HVKTQS
dwBuffSize, TIME_OUT, new
D_USER_TRANSFER_COMPLETION(Transfer_rev_Completion));
}
- 11 -