This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

USB ROM bsl enumeration

Other Parts Discussed in Thread: MSP430F5529

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?

**Attention** This is a public forum