I'm using a TM4C1232D5PM and a W25Q64 SPI FLASH memory.
I read blocks of 8,192 bytes from the memory. Depending on the contents of the 8K block the SPI clock will get stuck low. I have tried different SPI cock frequencies from 1MHz to 25MHz. I've tried using the library functions and using direct hardware register access.
SSI0 initialization:
SysCtlPeripheralEnable(SYSCTL_PERIPH_SSI0); SSIConfigSetExpClk(SSI0_BASE, SysCtlClockGet(), SSI_FRF_MOTO_MODE_3, SSI_MODE_MASTER, 1000000, 8); SSIEnable(SSI0_BASE);
Test function:
uint32_t j,k; uint32_t Data; DISKADDR DiskAddr; DiskAddr.Address = Sector << 9; GPIOPinWrite(GPIO_PORTA_AHB_BASE, GPIO_PIN_3, 0x00); SSIDataPut(SSI0_BASE,0x03); while(SSIBusy(SSI0_BASE)); SSIDataPut(SSI0_BASE,DiskAddr.Value.Addr2); while(SSIBusy(SSI0_BASE)); SSIDataPut(SSI0_BASE,DiskAddr.Value.Addr1); while(SSIBusy(SSI0_BASE)); SSIDataPut(SSI0_BASE,DiskAddr.Value.Addr0); while(SSIBusy(SSI0_BASE)); while (SSIDataGetNonBlocking(SSI0_BASE,&Data) == True); for(j=0;j<Height;j++) { for(k=0;k<Width;k++) { SSIDataPut(SSI0_BASE,0xFF); while(SSIBusy(SSI0_BASE)); SSIDataGet(SSI0_BASE,&Data); //lsb SSIDataPut(SSI0_BASE,0xFF); while(SSIBusy(SSI0_BASE)); SSIDataGet(SSI0_BASE,&Data); //msb } } GPIOPinWrite(GPIO_PORTA_AHB_BASE, GPIO_PIN_3, GPIO_PIN_3);
Any idea what might be causing this?
Thanks,
Paul.