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.

Problem with interfacing SPI flash M25P16

Other Parts Discussed in Thread: TM4C129XNCZAD

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);
}