Electronic – External MMU for cortex-M

cortex-mfpgalinux

The Cortex-M processors are getting faster and more powerful. The Cortex-M7 has just been announced. Yet these cannot run Linux (other than uCLinux) because the chips lack an MMU – Memory Management Unit.

Is there an external MMU chip? Wikipedia refers to the Motorola 68851 and Zilog z8015, but both are rather old. Ideally, an up-to-date version would allow you to add DIMM memory modules to an Arduino Due (as an example).

Is such a chip available? Or is this the kind of custom task you can only do with an FPGA?

Best Answer

TL;DR: There's nothing which makes it technically impossible, but there are a number of limitations, and "real" ARM CPUs do a better job of this anyway.

The biggest difference between the older CPUs that were often paired with these MMUs and modern Cortex-M microcontrollers is that the memory bus was fully external on those CPUs: all memory reads and writes were visible on the bus, and could be manipulated by the MMU. This is not the case on Cortex-M microcontrollers: quite a bit of the 32-bit address space is reserved for internal memory and peripherals, and cannot be remapped.

Even where external memory interfaces are available, they only appear in part of the address space, and are often quite limited in size and application. For instance, on STM32F1xx microcontrollers, the FSMC can address up to 4 SRAM banks of up to 64 MB each, leaving you with only 256 MB of remappable address space.

The long and the short of it is that, if you want a MMU, you don't use a Cortex-M. You use one of the higher-end ARM CPUs that have an integrated MMU.

Related Topic