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.

TMS570LC4357-EP: 8bit EMIF interface

Part Number: TMS570LC4357-EP
Other Parts Discussed in Thread: TMS570LC4357

I have an EMIF-interface on a TI MCU, which is configured with an 8bit external width data bus; the interface is asynchronous SRAM Normal mode. But the MCU is interfacing an FPGA, and I am only interested in the decoding of EMIF access, i.e., the HW-view. The question is the following:

Is it possible to read or write a single 32bit word to a physical 8bit EMIF-port with a single operation, so that the actual action on the port is a sequence of 4 read/writes (i.e., activations of nRW and/or nCS, and byte address BA[1..0] incremented from 0..3 or maybe decremented);
(byte enable signals are probably also updated, but this is not used).
All illustrations in SPRU971e and Ref Manual to TMS570LC4357 16/32-Bit RISC Flash Microcontroller only show one transaction.

OR

Is it so, that with 8bit wide EMIF interface, ONLY byte access is possible, and a 32bit wide reading/writing has to be performed as 4 individual operations. In my case this will be unfortunate, because SW guys then have to prevent for example interrupts from disrupting the 4 consecutive operations.

  • Hi Peter,

    Yes, you can read 32-bit word with a physical 8-bit EMIF port. The picture below is the waveform of 32-bit reading with 16-bit EMIF port. The 1st waveform is OE, and 2nd one is CS:

    unsigned int READ_EMIF_MEMORY_32BIT( unsigned int Start_Address, unsigned int  No_Of_Words, unsigned int Pattern)
    {
         unsigned int ReadPattern;
         unsigned int *Addr = (unsigned int *) Start_Address;

         while(No_Of_Words > 0)
         {
               ReadPattern = *Addr++;

               No_Of_Words--;
          }
          return (0);
    }

    You can perform byte read/write if DQM[1:0] are used.

  • Thanks, Wang, this is very helpful.

    Start_Address is simply a number pointing into EMIF address space, and after casting it into a pointer of 32bits (I assume that an unsigned int in this context is 32bit, right? - otherwise we are simply showing that 16bit can access EMIF 16bits interface), the interface automatically make a double read action to retrieve 2 x 16bits and return a 32bit uint. And I agree, it will most likely also work for quadruple 8bit actions.