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.

CC2650: ROM Bootloader SPI interface not working when MOSI idle state is low

Part Number: CC2650

Here's my setup:
CC2650 7x7 VQFN48 is the chip I'm trying to program via the ROM bootloader.
I'm using a linux-based single-board computer (SBC) to drive the SPI bus to talk to the bootloader in the CC2650.
The DIO11 pin of the CC2650 is connected to the SBC and is used for both slave/chip select in SPI communication and to open up the bootloader backdoor (configured in BL_CONFIG:BL_PIN_NUMBER).  DIO11 is configured to opens the backdoor when it's externally set low by my SBC during reset.  About 500ms after reset, I set bootloader pin high again to enable the bootloader.  Then I start using the same pin as chip select pin.

For some reason, after the SBC resets the CC2650, the MOSI pin of the SPI bus controlled by the bootloader goes high about 1ms after reset line goes high, but then goes low 10-20ms later about 90% of the time.  When this happens, SPI communication with bootloader doesn't work (I don't get a response to the PING command).  But in the other 10% of the time, when the MOSI line goes high and doesn't go low, bootloader communication works fine and I get an ACK.

Now, in both cases, SPI communication while sending the PING command looks absolutely identical in both cases on my logic analyzer (other engineers confirmed it) except for the fact that the MOSI line is set high when there are no clock transitions in the "ACK" scenario.  So I'm wondering if there's a requirement in the bootloader for the SPI bus to set MOSI low in the idle state.  Otherwise, I'll have to look for issues elsewhere in my setup.

MOSI goes high after reset and stays high:

MOSI goes high after reset, then goes low 13ms later:

MOSI starts high while the clock is still idle before the transmission, then returns back to high state after transmission is over (I get an ACK after this command is sent):

MOSI starts low before the transmission of the same command as above, then returns back to low state after transmission is over (this results in no response from bootloader):

Thank you!

Michael

  • Hello Michael,

    Have you confirmed power is stable when the reset is issued? That was the issue in this post:
    e2e.ti.com/.../617443

    I'll check on the MOSI requirement and get back to you.

    Best wishes
  • Hi Michael,

    Thanks for the screenshots. I talked to one of the developers of the ROM code, and we couldn't figure out how this could happen.

    The ROM bootloader sets a pull-up on this line after reset and doesn't do anything else with it, especially not until a byte is clocked into the SPI and it can determine that it's SPI and not UART that's used. MOSI is the data input line to the bootloader and so is it possible that the linux system you use could be setting the level on this line somehow?

    Best regards,
    Aslak