SoC
  • Home
  • Arm
  • Arm Cortex M0/M0+
  • Arm Cortex M4
  • Arm Cortex M3
  • Contact
Reading: Best Practices for Using External RAM with Arm Cortex
SUBSCRIBE
SoCSoC
Font ResizerAa
  • Home
  • Arm
  • Arm Cortex M0/M0+
  • Arm Cortex M4
Search
  • Home
  • Arm
  • Arm Cortex M0/M0+
  • Arm Cortex M4
Have an existing account? Sign In
Follow US
  • Looking for Something?
  • Privacy Policy
  • About Us
  • Sitemap
  • Contact Us
© S-O-C.ORG, All Rights Reserved.
Arm

Best Practices for Using External RAM with Arm Cortex

Eileen David
Last updated: September 27, 2023 3:01 am
Eileen David 8 Min Read
Share
SHARE

Adding external RAM to an Arm Cortex system can provide a significant performance boost by increasing the amount of available memory. However, properly interfacing external RAM requires careful planning and configuration to ensure reliable operation. This article provides best practices and step-by-step guidance for using external RAM with Arm Cortex CPUs.

Contents
Overview of External RAM IntegrationInterfacing GuidelinesMemory Interface SignalsMatching Electrical SpecificationsTrace RoutingBypass CapacitorsConfiguration and Initialization1. Memory Interface Configuration2. Address Decoding3. Clock Configuration4. Pin Multiplexing5. Timing Parameters6. Bring-up and InitializationCommon Issues and DebuggingBoard Bring-up ProblemsInitialization FailuresIntermittent CrashesHigh Power ConsumptionSoftware Optimization Tips1. Enabling Caching2. Optimizing Data Alignment3. Prefetching Data4. Access Optimization5. Avoiding Wait States6. Using DMA EfficientlyExample ImplementationHardware ConfigurationSoftware InitializationConclusion

Overview of External RAM Integration

The Arm Cortex CPUs provide interfaces for connecting external memories like SRAM, PSRAM, and SDRAM. The external memory can be used to supplement or completely replace the internal memory of the Cortex CPU. Using external RAM has several benefits:

  • Increasing memory size – More RAM to run larger applications or store more data.
  • Higher bandwidth – External RAM typically has higher bandwidth than internal RAM, improving performance.
  • Flexibility – External RAM can be changed as per application requirements.

However, using external RAM also poses some challenges related to timing, power consumption, PCB routing, and configuration. This article provides recommendations to overcome these challenges.

Interfacing Guidelines

Here are some key guidelines for interfacing external RAM with Cortex CPUs:

Memory Interface Signals

The memory interface consists of address, data, and control signals. Some key signals are:

  • Address bus – Connects to the address inputs of the RAM.
  • Data bus – Bi-directional bus for reading/writing data.
  • Clock – Used for synchronizing data transfers.
  • Chip select – Activates the RAM device for access.
  • Read/Write – Indicates read or write operation.

Matching Electrical Specifications

The interface signals must match the voltage levels and drive strength requirements of the external RAM device. Pay attention to factors like:

  • Memory interface voltage – 1.8V or 3.3V.
  • Input and output voltage levels.
  • Current drive capabilities.
  • Termination requirements.

Trace Routing

Use shortest possible traces for memory signals to minimize reflections and signal integrity issues. Some best practices are:

  • Minimize vias and stubs.
  • Route clock and data bus signals first.
  • Match trace lengths for address/command/data.
  • Add termination resistors if required.

Bypass Capacitors

Add multiple bypass capacitors close to the external memory device to provide a low impedance power supply. Use a mix of capacitors like tantalum, ceramic, etc. for filtering different frequency noise.

Configuration and Initialization

The Arm Cortex memory controller and related peripherals need to be configured correctly to interface with external memory. Here are some key steps for configuration:

1. Memory Interface Configuration

Configure the type of external RAM in the memory interface – static, pseudo-static or SDRAM. Set important parameters like RAM size, data bus width, timing values, and access latency in the configuration registers.

2. Address Decoding

Set up address decoding to generate the chip select signal for external RAM access. You can either use an address decoder or configure a Chip Select signal through General Purpose I/O (GPIO).

3. Clock Configuration

External RAM normally requires a higher frequency clock. Make sure to configure the appropriate clock divider and source in the PLL. SDRAM may need an inverted clock signal as well.

4. Pin Multiplexing

Configure pin multiplexing to connect the required RAM interface signals through GPIO/peripherals like FSMC, AHB to APB bridge etc. on your microcontroller board.

5. Timing Parameters

For SDRAM, load the correct timing parameters like refresh rate, CAS latency etc. into the SDRAM controller registers as per your SDRAM chip.

6. Bring-up and Initialization

Follow a proper bring-up sequence to apply power, provide clock, and initialize the SDRAM using predefined commands for precharge, load mode register etc.

Common Issues and Debugging

Some common issues faced during integration and their debugging techniques are:

Board Bring-up Problems

  • No activity on address/data bus – Check soldering, shorts, opens on PCB.
  • No CS activation – Verify address decoding logic.
  • No clock – Check clock source, divider configuration.

Initialization Failures

  • Improper bring-up sequence – Follow datasheet procedure.
  • Incorrect timing parameters – Double check calculation against datasheet.
  • Failing commands – Increase delays between commands.

Intermittent Crashes

  • Add more bypass capacitors near RAM.
  • Reduce clock frequency.
  • Increase timing delays as per datasheet guidelines.

High Power Consumption

  • Interface voltage level mismatch – Check voltage translators.
  • Termination missing – Add resistors to terminate trace.
  • Excessive switching – Reduce bus activity through firmware optimization.

Software Optimization Tips

Software optimizations can improve performance when using external RAM. Some techniques include:

1. Enabling Caching

Enabling instruction and data caching leverages faster cache instead of direct external RAM access. But pay attention to cache coherency with DMA and multicore systems.

2. Optimizing Data Alignment

Align data structures to optimize external memory accesses. For example, align buffers on cache line boundary.

3. Prefetching Data

Use prefetch instructions and DMA features to load data into caches before actual access.

4. Access Optimization

Optimize read/write patterns based on external RAM capabilities. For example, prioritize sequential accesses instead of random.

5. Avoiding Wait States

Minimize access delays and wait states by providing sufficient metadata instructions and optimizing code execution flow.

6. Using DMA Efficiently

Structure DMA transfers for bulk data movement to/from external RAM avoiding CPU overhead.

Example Implementation

Here is an example of interfacing 1MB external PSRAM with a Cortex-M7 CPU on an ARM development board. The PSRAM chip MT48LC1M16LF has 16-bit data bus and operates at 3.3V.

Hardware Configuration

  • Use the FSMC peripheral to generate RAM interface signals.
  • Connect FSMC A[23:1] pins to PSRAM address bus for 1MB range.
  • Use FSMC D[15:0] for the 16-bit data bus.
  • Connect chip select through GPIO port A, pin 5.
  • Configure 3.3V power supply for PSRAM.
  • Add 0.1uF and 10uF bypass capacitors on PSRAM power pins.

Software Initialization

  • Enable FSMC clock and related GPIO clocks.
  • Configure GPIOA pin 5 output for chip select.
  • Configure FSMC for static memory in 16-bit mode.
  • Set timing parameters based on PSRAM datasheet.
  • Initialize PSRAM by issuing write command and verifying data.

Conclusion

Adding external RAM to Arm Cortex systems can significantly improve performance and memory space. Careful planning is required for signal integrity, configuration, timing, initialization and software optimization to reliably interface the external memory. Following the recommendations outlined in this article will help developers to successfully integrate external RAM and unlock the full potential of their Cortex application.

Newsletter Form (#3)

More ARM insights right in your inbox

 


Share This Article
Facebook Twitter Email Copy Link Print
Previous Article How to Troubleshoot External Memory Interfaces?
Next Article What type of FPU is the cortex M33?
Leave a comment Leave a comment

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

2k Followers Like
3k Followers Follow
10.1k Followers Pin
- Sponsored-
Ad image

You Might Also Like

Switching from MSP to PSP for Cortex-M Task Switching

Task switching on Cortex-M microcontrollers can be done using either…

8 Min Read

What is ARMv8-M in Arm Cortex-M series?

ARMv8-M refers to the latest architecture version of the Cortex-M…

6 Min Read

How to Track Down Hard Faults Caused by Context Switching?

Context switching is the process where the processor switches from…

9 Min Read

Importance of Adequate Stack Size for Threads in Keil RTX

When developing multithreaded applications using Keil RTX, one important consideration…

7 Min Read
SoCSoC
  • Looking for Something?
  • Privacy Policy
  • About Us
  • Sitemap
  • Contact Us
Welcome Back!

Sign in to your account