Part Number: TMS320F28335
Hi there,
I have SPI code that work perfectly with MCP3202 (Microchip ADC), but it didn't work with MT25Q nor flash.
Schematics looks like this:

And here is the code:
void spi_init() {
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO8 = 0; // GPIO8
GpioCtrlRegs.GPADIR.bit.GPIO8 = 1; // direction is output
GpioDataRegs.GPASET.bit.GPIO8 = 1; // output = 1
GpioCtrlRegs.GPAMUX2.bit.GPIO19 = 0; // GPIO19
GpioCtrlRegs.GPADIR.bit.GPIO19 = 1; // direction is output
GpioDataRegs.GPASET.bit.GPIO19 = 1; // output = 1
EDIS;
SpiaRegs.SPICCR.bit.SPISWRESET = 0; // SW reset
SpiaRegs.SPICCR.bit.SPICHAR = 7; // 8 bits words
SpiaRegs.SPICCR.bit.CLKPOLARITY = 0; // rising edge
SpiaRegs.SPICCR.bit.SPILBK = 0; // disable loop back
SpiaRegs.SPISTS.all = 0xFF; // clear INT bits
SpiaRegs.SPICTL.bit.MASTER_SLAVE = 1; // DSP is master
SpiaRegs.SPICTL.bit.CLK_PHASE = 0; // rising edge without delay
SpiaRegs.SPICTL.bit.TALK = 1; // enable TX
SpiaRegs.SPICTL.bit.SPIINTENA = 0; // disable interrupts
SpiaRegs.SPICTL.bit.OVERRUNINTENA = 0; // disable over run int
SpiaRegs.SPIBRR = 127; // LSPCLK / (SPIBRR + 1) = 120 / (127 + 1) = approximate 1 Mhz
SpiaRegs.SPIFFTX.bit.SPIRST = 0; // reset tx & rx
SpiaRegs.SPIFFTX.bit.SPIFFENA = 1; // enable fifo enhanced op
SpiaRegs.SPIFFTX.bit.TXFIFO = 0; // reset fifo ptr to zero
SpiaRegs.SPIFFTX.bit.TXFFIENA = 0; // disable TX fifo interrupts
SpiaRegs.SPIFFRX.bit.RXFIFORESET = 0; // reset FIFO
SpiaRegs.SPIFFRX.bit.RXFFIENA = 1; // enable RX fifo interrupts
SpiaRegs.SPICTL.bit.SPIINTENA = 1; // enable generating interrupts
SpiaRegs.SPIFFRX.bit.RXFIFORESET = 1; // stop reset FIFO
SpiaRegs.SPIFFCT.all = 10; // 10 bit delay between 2 words
SpiaRegs.SPIPRI.bit.FREE = 0;
SpiaRegs.SPIPRI.bit.SOFT = 0; // stop on emulation
SpiaRegs.SPIFFTX.bit.SPIRST = 1; // enable tx & rx
SpiaRegs.SPIFFTX.bit.TXFIFO = 1; // enable fifo operation
SpiaRegs.SPICCR.bit.SPISWRESET = 1; // stop SW reset
}
int read_ps_voltage(void) {
Uint16 i, send[3], recv[3], volt;
GpioDataRegs.GPACLEAR.bit.GPIO8 = 1; // CS for MSP3202, set to 0
send[0] = 0x0100;
send[1] = 0xA000;
send[2] = 0x0000;
for (i = 0; i < 3; i++) {
SpiaRegs.SPITXBUF = send[i];
while (SpiaRegs.SPIFFRX.bit.RXFFST != 1);
recv[i] = SpiaRegs.SPIRXBUF;
}
volt = (recv[1] << 8) & 0x0F00;
volt = volt | recv[2];
GpioDataRegs.GPASET.bit.GPIO8 = 1; // CS for MSP3202, set to 1
return volt;
}
int read_flash_id() {
Uint16 i, send[2], recv[2];
GpioDataRegs.GPACLEAR.bit.GPIO19 = 1; // CS for MT25Q, set to 0
send[0] = 0x9E00;
send[1] = 0x0000;
for (i = 0; i < 2; i++) {
SpiaRegs.SPITXBUF = send[i];
while (SpiaRegs.SPIFFRX.bit.RXFFST != 1);
recv[i] = SpiaRegs.SPIRXBUF;
}
GpioDataRegs.GPASET.bit.GPIO19 = 1; // CS for MT25Q, set to 1
return recv[1];
}
Uint16 ps_volt = 0;
Uint16 flash_id = 0;
void main() {
/* do some inits here */
spi_init();
ps_volt = read_ps_voltage(); // read from mcp3202
flash_id = read_flash_id(); // read from mt25q
/* do other stuff... */
}
Beside, I probed the all 4 signals (CS*, CLK, DQ0, DQ1) on MT25Q pin, and all looks just fine except DQ1 (connected to C2000 MISO) did not have any signal output (which expected to get a byte of ID - 20h), which I get low signal all the way for this pin.
Attached with MT25Q datasheet.
Please advise.