I cannot get the USB ROM bsl to enumerate.
msp430f5529, XT2 24Mhz
I have a combination CDC / HID interface that communicates with a host running linux. the msp430 is always connected to the bus. There is no VBUS. I have modified the usb api to work without needed VBUS.
when the msp430 receives a "firmware update" command, it should jump to the ROM BSL. right now all I am trying to do is get into the BSL and show up on the host. here's the code I've been playing with
// ------------------------------------------------------------------------------
case eFIRMWAREUPDATE:
// disconnect and disable usb
__delay_cycles(USB_MCLK_FREQ); // wait a sec
__disable_interrupt();
ADC12CTL0 = 0;
ADC12CTL1 = 0;
TA0CTL = TACLR;
TA1CTL = TACLR;
TA2CTL = TACLR;
TB0CTL = TBCLR;
UCA0CTL1 = UCSWRST;
UCA0CTL0 = 0;
UCA1CTL1 = UCSWRST;
UCA1CTL0 = 0;
UCB0CTL1 = UCSWRST;
UCB0CTL0 = 0;
// init FLL per ERRATA USB8
// use REFO for FLL and ACLK
// UCSCTL3 = (UCSCTL3 & ~(SELREF_7)) | (SELREF__REFOCLK);
// UCSCTL4 = (UCSCTL4 & ~(SELA_7)) | (SELA__REFOCLK);
// Init_FLL_Settle(USB_MCLK_FREQ / 1000, USB_MCLK_FREQ / 32768, 0); //Start the FLL, dont use it to drive MCLK & SMCLK yet
// UCSCTL4 = (UCSCTL4 & ~(SELS_7)) | (SELS__DCOCLK);
// UCSCTL4 = (UCSCTL4 & ~(SELM_7)) | (SELM__DCOCLK);
// UCSCTL4 = (UCSCTL4 & ~(SELM_7)) | (SELM__XT2CLK);
__delay_cycles(USB_MCLK_FREQ); // wait a sec
USB_disconnect();
USB_disable();
__delay_cycles(USB_MCLK_FREQ); // wait a sec
__delay_cycles(USB_MCLK_FREQ); // wait a sec
// jump to ROM BSL
((void (*)())0x1000)();
break;
// ------------------------------------------------------------------------------
I do not use the DCO for anything in my system and had to follow the UBS8 errata workaround to allow the usb pll to initialize. After that, I disable the FLL and dont use the DCO. I have all the FLL code here because I thought I might need to redo the workaround before jumping to the BSL. During init that code works fine but when I put it here I always get DCOFFG faults. anyways here's some questions
1) does the ROM BSL care about VBUS if you enter it by jumping to 0x1000?
2) does the USB8 errata apply to the ROM bsl?
3) should I call BOTH USB_disconnect() and USB_disable() before the jump?