We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Hello.
I have a SK-MLPC2387 board with LPC2387 processor and here some problem with it. I downloaded Keil HidUsb examples for LPC2378 and loaded it (hex file) in LPC2387 using latest version of FlashMagic utility (ISP). The loading was sucessfully finished and veryfied, then I disconnected board. When I connected the board again (after ~ 20 sec), operation system (Win 7) didn't find new device looks like USB cable was disconnected. The power LED is on, and I don't know where source of problem..
> operation system (Win 7) didn't find new device looks like USB cable was disconnected.
As you are working on a different board from the original which the example firmware is made for, compare schematics of these boards.
starterkit.ru SK_MLPC2368 starterkit.ru/.../SK_MLPC2368.pdf
KEIL MCB2300 http://www.keil.com/mcb2300/mcb2300-schematics.pdf
Crystal - 12MHz on both boards - fine
D+ pull-up - controlled through P2.9 on both board - fine But - SK_MLPC2368 -- NPN transistor (BC817-40) - MCB2300 -- PNP transistor (PMBTA92)
Required P2.9 polarity is reversed. That is, D+ pull-up is [b]disabled[/b] by the KEIL firmware - This fact matches to your above finding.
Replace it to a PNP transistor, make R2 as a pull-up - recommended
OR
Modify the source code
usbhw.c
void USB_Init (void) { ... ... /* The SoftConnect pin for LPC2300 on USB_U1 doesn't work for now, make it GPIO and make it low to turn off pull-up on D+. Once it's fixed, make #if 1 and set it as SoftConn Pin. */ //#if 1 /* MCB2300 V4.0 */ #if 0 /* MCB2300 V4.0 */ PINSEL4 &= ~0x000C0000; /* P2.9 USB1 SoftConnect */ PINSEL4 |= 0x00040000; /* PINSEl4 18.19 */ #else /* MCB2300 V3.0 */ PINSEL4 &= ~0x000C0000; FIO2DIR |= (1 << 9); FIO2CLR = (1 << 9); #endif ... ...
void USB_Connect (BOOL con) { // WrCmdDat(CMD_SET_DEV_STAT, DAT_WR_BYTE(con ? DEV_CON : 0)); if ( con ) FIO2SET = (1 << 9); else FIO2CLR = (1 << 9); }
Tsuneo
Aha, forget to format the code
void USB_Init (void) { ... ... /* The SoftConnect pin for LPC2300 on USB_U1 doesn't work for now, make it GPIO and make it low to turn off pull-up on D+. Once it's fixed, make #if 1 and set it as SoftConn Pin. */ //#if 1 /* MCB2300 V4.0 */ #if 0 /* MCB2300 V4.0 */ PINSEL4 &= ~0x000C0000; /* P2.9 USB1 SoftConnect */ PINSEL4 |= 0x00040000; /* PINSEl4 18.19 */ #else /* MCB2300 V3.0 */ PINSEL4 &= ~0x000C0000; FIO2DIR |= (1 << 9); FIO2CLR = (1 << 9); #endif ... ... void USB_Connect (BOOL con) { // WrCmdDat(CMD_SET_DEV_STAT, DAT_WR_BYTE(con ? DEV_CON : 0)); if ( con ) FIO2SET = (1 << 9); else FIO2CLR = (1 << 9); }
Thank you very much, now it is working. =)