Other Parts Discussed in Thread: CC1310
Tool/software: TI-RTOS
My trouble is the bootloader basically never acknowledges me. Below is a Logic analyzer of one such try. I am resetting the processor between attempts with the bootloader pin held high. The two boards are stacked together and channels are on the pins of the CC1310:
Channel 0 - DIO10
Channel 1 - DIO11
Channel 2 - DIO08
Channel 3 - DIO09
Channel 4 - DIO02
Channel 5 - DIO03
Channel 6/7 - NC
The thing that weirds me (and my capture software) out is that little blip where the clock is pulled to idle low and enable is activated. That seems to be attached to SPI_Open. It worries that it might confuse the bootloader but I don't have anything to back that up or refute it either. Here is all the bits of software that I think are related to this process. The busy wait is an attempt at following the note in 8.2.2.2 of swcu117g.
//inside my CC3220SF_LAUNCHXL.c /* * =============================== SPI =============================== */ #include <ti/drivers/SPI.h> #include <ti/drivers/spi/SPICC32XXDMA.h> SPICC32XXDMA_Object spiCC3220SDMAObjects[CC3220SF_LAUNCHXL_SPICOUNT]; #if defined(__TI_COMPILER_VERSION__) #pragma DATA_ALIGN(spiCC3220SDMAscratchBuf, 32) #elif defined(__IAR_SYSTEMS_ICC__) #pragma data_alignment=32 #elif defined(__GNUC__) __attribute__ ((aligned (32))) #endif uint32_t spiCC3220SDMAscratchBuf[CC3220SF_LAUNCHXL_SPICOUNT]; const SPICC32XXDMA_HWAttrsV1 spiCC3220SDMAHWAttrs[CC3220SF_LAUNCHXL_SPICOUNT] = { /* index 0 is reserved for LSPI that links to the NWP */ { .baseAddr = LSPI_BASE, .intNum = INT_LSPI, .intPriority = (~0), .spiPRCM = PRCM_LSPI, .csControl = SPI_SW_CTRL_CS, .csPolarity = SPI_CS_ACTIVEHIGH, .pinMode = SPI_4PIN_MODE, .turboMode = SPI_TURBO_OFF, .scratchBufPtr = &spiCC3220SDMAscratchBuf[CC3220SF_LAUNCHXL_SPI0], .defaultTxBufValue = 0, .rxChannelIndex = UDMA_CH12_LSPI_RX, .txChannelIndex = UDMA_CH13_LSPI_TX, .minDmaTransferSize = 100, .mosiPin = SPICC32XXDMA_PIN_NO_CONFIG, .misoPin = SPICC32XXDMA_PIN_NO_CONFIG, .clkPin = SPICC32XXDMA_PIN_NO_CONFIG, .csPin = SPICC32XXDMA_PIN_NO_CONFIG }, { .baseAddr = GSPI_BASE, .intNum = INT_GSPI, .intPriority = (~0), .spiPRCM = PRCM_GSPI, .csControl = SPI_HW_CTRL_CS, .csPolarity = SPI_CS_ACTIVELOW, .pinMode = SPI_4PIN_MODE, .turboMode = SPI_TURBO_OFF, .scratchBufPtr = &spiCC3220SDMAscratchBuf[CC3220SF_LAUNCHXL_SPI1], .defaultTxBufValue = 0, .rxChannelIndex = UDMA_CH6_GSPI_RX, .txChannelIndex = UDMA_CH7_GSPI_TX, .minDmaTransferSize = 100, .mosiPin = SPICC32XXDMA_PIN_07_MOSI, .misoPin = SPICC32XXDMA_PIN_06_MISO, .clkPin = SPICC32XXDMA_PIN_05_CLK, .csPin = SPICC32XXDMA_PIN_08_CS, } }; const SPI_Config SPI_config[CC3220SF_LAUNCHXL_SPICOUNT] = { { .fxnTablePtr = &SPICC32XXDMA_fxnTable, .object = &spiCC3220SDMAObjects[CC3220SF_LAUNCHXL_SPI0], .hwAttrs = &spiCC3220SDMAHWAttrs[CC3220SF_LAUNCHXL_SPI0] }, { .fxnTablePtr = &SPICC32XXDMA_fxnTable, .object = &spiCC3220SDMAObjects[CC3220SF_LAUNCHXL_SPI1], .hwAttrs = &spiCC3220SDMAHWAttrs[CC3220SF_LAUNCHXL_SPI1] } }; const uint_least8_t SPI_count = CC3220SF_LAUNCHXL_SPICOUNT; //this is eventually called by a thread void EnableBootloader() { SPI_Params_init(&spiParams); spiParams.bitRate = 500000; spiParams.mode = SPI_MASTER; spiParams.transferMode = SPI_MODE_BLOCKING; spiParams.frameFormat = SPI_POL1_PHA1; spiHandle = SPI_open(CC3220SF_LAUNCHXL_SPI1, &spiParams); if (!spiHandle) { System_printf("SPI did not open\n"); } spiTransaction.rxBuf = rxBuffer; spiTransaction.txBuf = txBuffer; txBuffer[0] = 0x03; spiTransaction.count = 1; SPI_transfer(spiHandle, &spiTransaction); //busywait memset(rxBuffer, 0, 256); memset(txBuffer, 0, 256); txBuffer[0] = 0x20; txBuffer[1] = 0x20; spiTransaction.count = 2; SPI_transfer(spiHandle, &spiTransaction); //I'm not certain about this part, whether it responds with ACK/NACK at the same time I'm sending PING or in the next packet txBuffer[0] = 0x0; txBuffer[1] = 0xCC; spiTransaction.count = 2; status = SPI_transfer(spiHandle, &spiTransaction); if (status == 0) { System_printf("There was an issue with read\n"); } } int main(void) { Board_initGeneral(); GPIO_init(); //UART_init(); SPI_init(); System_printf("\n"); /* Start BIOS */ BIOS_start(); }