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.

CCS/TMS570LS3137: Data abort

Part Number: TMS570LS3137

Tool/software: Code Composer Studio

Hi team,

Our customer is getting data abort when trying to interface 32MB Nor flash to the controller TMS570LS3137. The customer was able to read and write the first 16MB data but as soon as he tries to read data beyond 16MB (address = 0x61000000), he gets data abort.

Here is the code:
*( (uint16_t *)base_addr + 0x555 ) = 0x00AA; /* write unlock cycle 1 */
*( (uint16_t *)base_addr + 0x2AA ) = 0x0055; /* write unlock cycle 2 */
*( (uint16_t *)base_addr + 0x555) = 0x00A0; /* write program setup command */
*( (uint16_t *)base_addr + 1) = data1; /* write data to be programmed */
Read_back_data = *( (uint16_t *)base_addr + 1);

*( (uint16_t *)base_addr + 0x555 ) = 0x00AA; /* write unlock cycle 1 */
*( (uint16_t *)base_addr + 0x2AA ) = 0x0055; /* write unlock cycle 2 */
*( (uint16_t *)base_addr + 0x555) = 0x00A0; /* write program setup command */
*( (uint16_t *)base_addr + 0x800001) = data2; /* write data to be programmed */
Read_back_data = *( (uint16_t *)base_addr + 0x800001);

The base address is 0x6000000, and the customer get data abort at last statement

Hoping for your assistance to help our customer.

Regards,
Carlo

  • Hello Carlo,

    The actual memory size is supported by each chip-select is16MB. Please refer to the memory map table in Datasheet.

  • Hi QJ,

    Thank you for looking into this.

    According to our customer, based on  the TMS570 reference manual on page 637 "Additionally, when the EMIF interfaces to a 16-bit asynchronous device, the EMIF_BA[0] pin can serve as the upper address line EMIF_A[22]."

    Also if EMIF_BA[1] provides least significant bit of the address, that means the EMIF has effectively 24 address lines (BA[0], A21-A0, BA[1]), So it should be able to address 2^24 (16M Addresses).

    Since the memory is 16bit (each location has 2 bytes of data), 16M Addresses Corresponds to 32MB of data.

    When the customer try to access address location from 0x600000000 to 0x60FFFFFF, lines A21-A0, BA[1] toggles to provide physical addresses from 0 to 8M of the memory as expected. But as soon as it try to write at location 0x61000000, there is no activity on the bus, and when they try to read from the same location they get Data abort.

    Is the BA[0] line has no significance when trying to access Asynchronous memory?

    Regards,
    Carlo

  • Hello Carlo,

    Does your customer configure the pinmux for BA[0] correctly? EMIF_BA[0] is multiplexed with N2HET, and the N2HET is used by default.

  • Hello QJ,

    Our customer initiated a separate post regarding his situation, please refer to the link below.

    Regards,
    Carlo

  • Hello Carlo,

    I tested this morning, and was not able to access the 0x6100_0000. I am not able to toggle BA[0] which is used as EMIF_A[22]. I need to check with our design team.

  • Hello Carlo,

    From EMIF wise, the EMIF_BA[0] can be used as EMIF_A[22] when the EMIF is interfacing with 16-bit memory. Since the device has limited Async memory size of 16MB, the EMIF_BA[0] can not be used as EMIF_A[22] for this device.