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?
I do not know much about F5529. But my impression is that there is no ROM BSL. There may be a factory loaded BSL code in the so-called BSL-Flash. Are you sure the chip you are using has working BSL code in its BSL-Flash?
ROM / FLASH whats in a name? I throw them around casually lol.
I figured out the problem - VBUS. The TI usb BSL requires VBUS to be there even if you use the jump to 0x1000 method. I'm kicking myself for not including VBUS :(