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.

Need help on McBSP converted to SPI for EEPROM 25LC320A

Hi,

I am converting F28335 McBSP to SPI for EEPROM 25LC320A. I saw a voltage and current on SI, SCLK and !CS. I use external CS instead of FSX. !WP and !HOLD are permanently high. However, I see no current in the SO pin. I keep reading 0xFF because the SO pin enables pull-up. Am I doing anything wrong here? Please help.

Regards,

Here is how I initialize McBSPA GPIO

EALLOW;

/* Configure McBSP-A pins using GPIO regs*/
// This specifies which of the possible GPIO pins will be McBSP functional pins.
// Comment out other unwanted lines.

    GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 2;    // GPIO20 is MDXA pin
    GpioCtrlRegs.GPADIR.bit.GPIO20  = 1;    //output

    GpioCtrlRegs.GPAMUX2.bit.GPIO21 = 2;    // GPIO21 is MDRA pin
    GpioCtrlRegs.GPADIR.bit.GPIO21  = 0;    //input

    GpioCtrlRegs.GPAMUX2.bit.GPIO22 = 2;    // GPIO22 is MCLKXA pin
    GpioCtrlRegs.GPADIR.bit.GPIO22  = 1;    //output

    GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 2;        // GPIO7 is MCLKRA pin (Comment as needed)
    GpioCtrlRegs.GPADIR.bit.GPIO7  = 0;     //input
        //GpioCtrlRegs.GPBMUX2.bit.GPIO58 = 1;    // GPIO58 is MCLKRA pin (Comment as needed)
   
    GpioCtrlRegs.GPAMUX2.bit.GPIO23 = 2;    // GPIO23 is MFSXA pin
    GpioCtrlRegs.GPADIR.bit.GPIO23  = 1;    //output

    GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 2;        // GPIO5 is MFSRA pin (Comment as needed)
    GpioCtrlRegs.GPADIR.bit.GPIO5 = 0;    //input
        //GpioCtrlRegs.GPBMUX2.bit.GPIO59 = 1;    // GPIO59 is MFSRA pin (Comment as needed)

/* Enable internal pull-up for the selected pins */
// Pull-ups can be enabled or disabled by the user.
// This will enable the pullups for the specified pins.
// Comment out other unwanted lines.

    GpioCtrlRegs.GPAPUD.bit.GPIO20 = 0;     // Enable pull-up on GPIO20 (MDXA)
    GpioCtrlRegs.GPAPUD.bit.GPIO21 = 0;     // Enable pull-up on GPIO21 (MDRA)
    GpioCtrlRegs.GPAPUD.bit.GPIO22 = 0;     // Enable pull-up on GPIO22 (MCLKXA)
    GpioCtrlRegs.GPAPUD.bit.GPIO7 = 0;      // Enable pull-up on GPIO7 (MCLKRA) (Comment as needed)
        //GpioCtrlRegs.GPBPUD.bit.GPIO58 = 0;   // Enable pull-up on GPIO58 (MCLKRA) (Comment as needed)
    GpioCtrlRegs.GPAPUD.bit.GPIO23 = 0;     // Enable pull-up on GPIO23 (MFSXA)
    GpioCtrlRegs.GPAPUD.bit.GPIO5 = 0;      // Enable pull-up on GPIO5 (MFSRA) (Comment as needed)
        //GpioCtrlRegs.GPBPUD.bit.GPIO59 = 0;   // Enable pull-up on GPIO59 (MFSRA) (Comment as needed)


/* Set qualification for selected input pins to asynch only */
// This will select asynch (no qualification) for the selected pins.
// Comment out other unwanted lines.

    GpioCtrlRegs.GPAQSEL2.bit.GPIO21 = 3;   // Asynch input GPIO21 (MDRA)
    GpioCtrlRegs.GPAQSEL2.bit.GPIO22 = 3;   // Asynch input GPIO22 (MCLKXA)
    GpioCtrlRegs.GPAQSEL1.bit.GPIO7 = 3;    // Asynch input GPIO7 (MCLKRA) (Comment as needed)
        //GpioCtrlRegs.GPBQSEL2.bit.GPIO58 = 3; // Asynch input GPIO58(MCLKRA) (Comment as needed)
    GpioCtrlRegs.GPAQSEL2.bit.GPIO23 = 3;   // Asynch input GPIO23 (MFSXA)
    GpioCtrlRegs.GPAQSEL1.bit.GPIO5 = 3;    // Asynch input GPIO5 (MFSRA) (Comment as needed)
           //GpioCtrlRegs.GPBQSEL2.bit.GPIO59 = 3; // Asynch input GPIO59 (MFSRA) (Comment as needed)

    EDIS;

 

Here is how I convert McBSPA to SPI

 // McBSP-A register settings
    McbspaRegs.SPCR2.all=0x0000;         // Reset FS generator, sample rate generator & transmitter
    McbspaRegs.SPCR1.all=0x0000;         // Reset Receiver, Right justify word, Digital loopback dis.
   
    //To do: check this later. CLKRM and FSRM seem to be don't care in CLK STOP mode.
    McbspaRegs.PCR.all=0x0F08;           //(CLKXM=CLKRM=FSXM=FSRM= 1, FSXP = 1, SCLKME =0)
   
    //delete later. For testing only
    McbspaRegs.SPCR1.bit.DLB = 0;

    McbspaRegs.SPCR1.bit.CLKSTP =2; //Clock stop mode 10b low inactive state
    McbspaRegs.PCR.bit.CLKXP    =0; //transmit data on the rising edge of CLKX and
    McbspaRegs.PCR.bit.CLKRP    =0;    //receive data on the falling edge of MCLKR
   
    McbspaRegs.RCR2.bit.RDATDLY=01;      // FSX setup time 1 in master mode. 0 for slave mode (Receive)
    McbspaRegs.XCR2.bit.XDATDLY=01;      // FSX setup time 1 in master mode. 0 for slave mode (Transmit)

    McbspaRegs.RCR1.bit.RWDLEN1=0;     //0--8bit, 2--16bit, 5--32bit
    McbspaRegs.XCR1.bit.XWDLEN1=0;     //0--8bit, 2--16bit, 5--32bit

    McbspaRegs.SRGR2.all=0x2000;          // CLKSM=1, FSGM =0, FPER=1
   
    McbspaRegs.SRGR1.all        =0x0063;     // CLKG period, CLKGDV=16, frame width=1
    McbspaRegs.XCR1.bit.XFRLEN1    =0;     //transmit frame length = 1 serial word
    McbspaRegs.RCR1.bit.RFRLEN1 =0;     //receive frame length = 1 serial word

    McbspaRegs.XCR2.bit.XPHASE    =0; //single-phase transmit frame
    McbspaRegs.RCR2.bit.RPHASE    =0; //single-phase receive frame

    //============ Enable ===============
    DelayUs(100);
    McbspaRegs.SPCR2.bit.GRST=1;    //Enable sample rate generator
    DelayUs(100);                    //wait 100us
    McbspaRegs.SPCR2.bit.XRST=1;    //Enable TX
    McbspaRegs.SPCR1.bit.RRST=1;    //Enabke RX
    McbspaRegs.SPCR2.bit.FRST=1;    //Frame sync generator reset
    EDIS;

 

Here is how send and receive values to/from EEPROM

eepromCS();
        while( McbspaRegs.SPCR2.bit.XRDY == 0 ) {}
        McbspaRegs.DXR1.all= EEPROM_READ_INSTR;
        while( McbspaRegs.SPCR1.bit.RRDY == 0 ) {}
        rdata1 = McbspaRegs.DRR1.all;
       
        while( McbspaRegs.SPCR2.bit.XRDY == 0 ) {}
        McbspaRegs.DXR1.all= ((address & 0xFF00) >>8); //address MSB first
        while( McbspaRegs.SPCR1.bit.RRDY == 0 ) {}
        rdata1 = McbspaRegs.DRR1.all;
   
        while( McbspaRegs.SPCR2.bit.XRDY == 0 ) {}
        McbspaRegs.DXR1.all= (address & 0x00FF); //address LSB
        while( McbspaRegs.SPCR1.bit.RRDY == 0 ) {}
        rdata1 = McbspaRegs.DRR1.all;
   
        while( McbspaRegs.SPCR2.bit.XRDY == 0 ) {}
        McbspaRegs.DXR1.all= 0xA5; //dummy
        while( McbspaRegs.SPCR1.bit.RRDY == 0 ) {}
        rdata1 = McbspaRegs.DRR1.all;


        while( McbspaRegs.SPCR2.bit.XRDY == 0 ) {}
        McbspaRegs.DXR1.all= 0xB5; //dummy
        while( McbspaRegs.SPCR1.bit.RRDY == 0 ) {}
        rdata1 = McbspaRegs.DRR1.all;


        eepromDS();