Hi,
I am trying to interface Micron SPI flash M25P16 with Tiva TM4C129XNCZAD chip. If I try with TI RTOS API's everything is working fine. But its not working with baremetal API's. We configured a GPIO as chipselect. The below is the code which i used and I am getting all 0xFF in Rx buffer. Please have a look.
int main(void) { volatile uint32_t ui32Loop; uint32_t ui32SysClock,junk,i; uint32_t txDataBuffer[20],rxDataBuffer[20]; /* Buffer for SPI rx */ ui32SysClock = SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480), 120000000); /* Call board init functions. */ Board_initGeneral(); /*init spi*/ SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI2); //GPIOPinConfigure() GPIOPinConfigure(GPIO_PD3_SSI2CLK); //GPIOPinConfigure(GPIO_PD2_SSI2FSS); GPIOPinConfigure(GPIO_PD1_SSI2XDAT0); GPIOPinConfigure(GPIO_PD0_SSI2XDAT1); GPIOPinTypeGPIOOutput(FLASH_CS_BASE, FLASH_CS_PIN); /* Configure pad settings */ GPIOPadConfigSet(GPIO_PORTD_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_3, GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD); GPIOPinTypeSSI(GPIO_PORTD_BASE, GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_3); /* End of initialization for SPI */ SSIConfigSetExpClk(SSI2_BASE, ui32SysClock, SSI_FRF_MOTO_MODE_3, SSI_MODE_MASTER, 10000000, 8); SSIEnable(SSI2_BASE); // /* Read data from flash */ memset(rxDataBuffer,0, 20); memset(txDataBuffer,0, 20); txDataBuffer[0] = READ_IDENTIFICATION; GPIOPinWrite(FLASH_CS_BASE, FLASH_CS_PIN, 0); SSIAdvModeSet(SSI2_BASE, SSI_ADV_MODE_WRITE); SSIDataPut(SSI2_BASE, txDataBuffer[0]); SSIAdvModeSet(SSI2_BASE, SSI_ADV_MODE_READ_WRITE); for(i = 0; i < 20; i++) { SSIDataPut(SSI2_BASE, 0); SSIDataGet(SSI2_BASE, &rxDataBuffer[i]); } GPIOPinWrite(FLASH_CS_BASE, FLASH_CS_PIN, 1); while(1); } void Board_initGeneral(void) { SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOC); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOH); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOJ); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOK); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOL); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOM); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPION); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOP); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOQ); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOR); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOS); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOT); }