Tool/software: Code Composer Studio
Hi
I used TMS320F28377S with external flash memory SST26VF064B-104V/SM and I have a problem with ID read.
The reading procedure looks as follows:
- Master transmit 0x9F to start Read ID
-Master transmit dummy bytes
- Salve transmit three ID bytes
- Master read ID bytes.
I have a question what the reading procedure should look like ?
Where I sholud write 0x9F and dummy bytes ? To SPITxBUF or SPIDAT ?
I attach my code but it doesn't work.
In SPITXBUF, SPIRXBUF and SPIDAT I always have 0xFFFF.
Thank you for help
Best regards
Szymon
#include "F28x_Project.h" void delay1_loop(void); void spi_xmit(Uint16 a); void spi_fifo_init(void); void InitMySpi(void); void InitSpiGpioMy(); Uint16 Flash_SpiTransmit(Uint16 Data) { Uint16 i = 0; for (i = 0; i < 2; ++i) asm (" NOP"); SpiaRegs.SPITXBUF = Data; for (i = 0; i < 2; ++i) asm (" NOP"); return (Uint16) SpiaRegs.SPITXBUF; } Uint16 Flash_SpiReceive(Uint16 DataToTransmit) { Uint16 i = 0; for (i = 0; i < 2; ++i) asm (" NOP"); SpiaRegs.SPIDAT = DataToTransmit; for (i = 0; i < 2; ++i) asm (" NOP"); return (Uint16)SpiaRegs.SPITXBUF; } Uint16 tab[3]; Uint16 statusRegister; Uint16 configRegister; Uint16 tabConfig[2]; Uint16 dataSend[256]; Uint16 dataReceive[256]; void FlashReadJedec(void) { Uint16 i = 0; EALLOW; GpioDataRegs.GPACLEAR.bit.GPIO12 = 1; //CS na 0 EDIS; asm (" NOP"); for (i = 0; i < 100; ++i) asm (" NOP"); Flash_SpiTransmit(0x9F); //command read jedec while(SpiaRegs.SPIFFRX.bit.RXFFST !=1) { } Flash_SpiReceive(0x00); tab[0] = SpiaRegs.SPIRXBUF; tab[1] = SpiaRegs.SPIRXBUF; tab[2] = SpiaRegs.SPIRXBUF; for (i = 0; i < 100; ++i) asm (" NOP"); EALLOW; GpioDataRegs.GPASET.bit.GPIO12 = 1; //CS na 1 EDIS; } void main(void) { InitSysCtrl(); DINT; InitPieCtrl(); IER = 0x0000; IFR = 0x0000; InitPieVectTable(); // InitSpiaGpio(); InitSpiGpioMy(); InitMySpi(); spi_fifo_init(); while(1) { FlashReadJedec(); Uint16 a = tab[0]; Uint16 b = tab[1]; Uint16 c = tab[2]; } } void spi_fifo_init() { SpiaRegs.SPIFFTX.all = 0xE040; SpiaRegs.SPIFFRX.all = 0x2044; SpiaRegs.SPIFFCT.all = 0x0; } void InitMySpi(void) { SpiaRegs.SPICCR.bit.SPISWRESET = 0; SpiaRegs.SPICCR.bit.CLKPOLARITY = 0; SpiaRegs.SPICCR.bit.SPICHAR = (16-1); SpiaRegs.SPICCR.bit.SPILBK = 0; SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1; SpiaRegs.SPICTL.bit.TALK = 1; SpiaRegs.SPICTL.bit.CLK_PHASE = 0; SpiaRegs.SPICTL.bit.SPIINTENA = 0; // Set the baud rate SpiaRegs.SPIBRR.bit.SPI_BIT_RATE = 99; SpiaRegs.SPIPRI.bit.FREE = 1; SpiaRegs.SPICCR.bit.SPISWRESET = 1; } void InitSpiGpioMy() { EALLOW; GpioCtrlRegs.GPBPUD.bit.GPIO58 = 0; // (SPISIMOA) GpioCtrlRegs.GPBPUD.bit.GPIO59 = 0; // (SPISOMIA) GpioCtrlRegs.GPBPUD.bit.GPIO60 = 0; // (SPICLKA) GpioCtrlRegs.GPBQSEL2.bit.GPIO58 = 3; // (SPISIMOA) GpioCtrlRegs.GPBQSEL2.bit.GPIO59 = 3; // (SPISOMIA) GpioCtrlRegs.GPBQSEL2.bit.GPIO60 = 3; // (SPICLKA) GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 3; // SPISIMOA GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 3; // SPISOMIA GpioCtrlRegs.GPBMUX2.bit.GPIO60 = 3; // SPICLKA GpioCtrlRegs.GPBGMUX2.bit.GPIO58 = 3; // SPISIMOA GpioCtrlRegs.GPBGMUX2.bit.GPIO59 = 3; // SPISOMIA GpioCtrlRegs.GPBGMUX2.bit.GPIO60 = 3; // SPICLKA GpioCtrlRegs.GPAMUX1.bit.GPIO12 = 0; GpioCtrlRegs.GPADIR.bit.GPIO12 = 1; // CS GpioDataRegs.GPASET.bit.GPIO12 = 1; GpioCtrlRegs.GPAMUX1.bit.GPIO13 = 0; GpioCtrlRegs.GPADIR.bit.GPIO13 = 1; // WP GpioDataRegs.GPASET.bit.GPIO13 = 1; GpioCtrlRegs.GPAMUX1.bit.GPIO14 = 0; GpioCtrlRegs.GPADIR.bit.GPIO14 = 1; // Hold GpioDataRegs.GPASET.bit.GPIO14 = 1; EDIS; }