ARM is a company that develops processor cores. ARM does not produce any silicon itself, but licenses the IP (intellectual property) to semiconductor manufacturers who integrate the core with peripherals and RAM.
The ARM7(TDMI) was the first ARM architecture that gained widespread use in small to medium-size microcontrollers. The extension TDMI indicates support for an additional, 16 bit instruction set, called Thumb. The Thumb instruction set allows smaller application binary sizes at only marginally reduced performance. In some processors (e.g. AT91SAM7) the Thumb instruction set is actually faster, because Flash is often connected to the core with only a 16 bit wide bus, and the standard, 32-bit instruction set, requires additional wait states when loading instructions.
The first company to offer small ARM7-based microcontrollers was Philips (today NXP) with the LPC2000 series, which is still popular especially among hobbyists because of the wide availability and the easy to use serial-port bootloader.
The ARM7TDMI has a few disadvantages, though. Although the instruction set is identical in all ARM7TDMI-based microcontrollers, extensions like the interrupt controller, on-chip memory, IO ports and other peripherals are not standardized and make it hard to port software between controllers of different manufacturers. Another common criticism is that the interrupt system of the ARM7 is too complex and interrupts have too long delays.
The Cortex-M4 is a Cortex-M3 with DSP Instructions, and optional floating-point unit (FPU).
ARM Cortex-M4-based controllers are available from:
- ST (STM32F3/F4)
- EnergyMicro (EFM32WG)
- Freescale (Kinetis)
- Infineon (XMC4000)
- NXP (LPC4300)
- Atmel (SAM4S)
- Texas Instruments (Stellaris LM4F)
The Cortex-M3 architecture was first announced in 2004. It can be seen as the successor of the ARM7, since it addresses the same market and fixes the shortcomings of the ARM7 architecture. It uses a new Thumb-2 instruction set exclusively and comes with standardized peripheral modules and a better (lower delay) interrupt system.
The Cortex-M0+ is an other new low power version of the M3.
There are Cortex-M0+ based controllers available from:
ARM Cortex-M0, Cortex-M1
The Cortex-M0 was announced in 2009 as an even smaller, lower power version of the M3.
The Cortex-M1 is a variant that is intended specifically for implementation inside FPGAs.
ARM9(E), ARM10, ARM11
The main differences to the ARM7 is that the ARM9 is using a Harvard architecture (separate buses for instruction and data) and a longer pipeline, which allows higher clock rates. ARM9-based processors usually have little internal memory (except for instruction and data caches) and are intended to be used with external memory, mostly SDRAM and parallel flash. The ARM9 core is offered in a lot of variants, with extensions like floating point co-processors or Java support. ARM9 applications typically use some kind of Operating System like Linux.
ARM10 and ARM11 are targeted to mobile applications and are generally not found in typical microcontroller applications.
An example for an ARM9-based microcontroller family is the Atmel AT91SAM9.
ARM Cortex-A8, Cortex-A9
The Cortex-A8 and Cortex-A9 cores are targeted to high-end mobile devices and are, for example, implemented in TI's OMAP chip. They can be seen as the successor of the ARM9(E)/ARM10/ARM11.
The Cortex-A9 allows for multiple cores, hence these devices can be used in really high-end mobile devices or even netbooks (competing with low-power x86-architecture). Boardcon development board EM4412 features a Samsung Exynos4412 system-on-chip with four Cortex-A9 cores.
The Cortex-R4 is based on the ARMv7 architecture and is software-compatible with ARM9E family. With reduced gate count (to reduce the footprint), this core is targetting mid-range performance for so-called deeply embedded devices.
One of the reasons why ARM controllers are so popular is the support by the open source compiler GCC. Both free and non-free packages of the GCC toolchain are available, differing mainly in the included libraries and supporting software like debuggers and IDEs.
GNU Tools for ARM Embedded Processors is a ARM GCC mantained by ARM. The tools have no size restrictions.
IAR produces one of the most well-known commercial compilers for ARM. IAR offers free Kickstart versions of the tools which can be used to build and debug smaller projects (32kBytes). Commercial use of the Kickstart version is allowed.
Keil produces an IDE (µVision) that also offers an integrated debugger and simulator. Early versions included Keil's own compiler (CARM) which is no longer available or supported. Recent versions of the Keil MDK-ARM include Compiler, Assembler and Linker from the RealView Suite developed by ARM. The Keil IDE also support building with GNU tools (gcc). In addition to simulating different ARM-cores the simulator is also capable of simulating integrated devices (i.e. UARTs, timers) of verious ARM-based controllers. ARM acquired Keil ARM in 2005. An evaluation version is available. This evaluation version not only restricts code-size for building with RV (no build-limit with GNU), debugging and simulation (currently 32kBytes) but also prohibits commercial use.
Rowley Crossworks for ARM includes a GCC compiler integrated with an optimized library, a simple RTOS, and an IDE with a debugger. It is available for Linux and Windows.
For up to date information about free GCC compiler toolchains, please take a look at this post in the forum.
Most ARM-based processors come with a JTAG interface. The debugging instruction set is standardized across all ARM cores, so you can use the same JTAG hardware and software on all ARM-based processors. Not standardized however is the programming of on-chip flash memory, which needs dedicated support for each controller type.
A popular open source JTAG solution is OpenOCD. It supports parallel port and USB JTAG interfaces and is used together with GDB (GNU Debugger) as the front-end.
Another option is the Black Magic Probe. branch is available to reflash the STlink on Discovery boards as blackmagic probe debuggers, as well as to use F4 on a F4Discovery as blackmagic probe debugger. Find an explanation how to modify a Discovery Board as black magic probe here.
(Real Time) Operating systems
A great number of operating systems for ARM-based processors and controllers is available, many of them free and open source.
For network-enabled, non-realtime systems, Linux is a very popular choice. Also used but less common are the Unix derivatives (Net, Free, Open)BSD, which unlike Linux allow redistribution as closed source.
For smaller microcontrollers or systems with real-time requirements, FreeRTOS and TNKernel are two examples for open source systems. Feature-wise somewhere between Linux and FreeRTOS are RTEMS and eCOS, which offer real-time capability, but also a POSIX API (i.e., limited Unix compatibility).
- MYD-AM335X for TI AM335X ARM Cortex-A8 series MPUs from MYIR
- MYD-IMX28X for Freescale i.MX28 ARM926EJ-S series processors from MYIR
- MYD-SAMA5D3X for Atmel SAMA5D3 ARM Cortex-A5 series MPUs from MYIR
- MYD-SAM9X5 and MYD-SAM9X5-V2 for Atmel SAM9X5 ARM9 series processors from MYIR
- MYD-LPC435X for NXP LPC4350/4357 ARM Cortex-M4/M0 Microcontrollers from MYIR
- MYD-LPC185X for NXP LPC1850/1857 ARM Cortex-M3 Microcontrollers from MYIR
- MYD-LPC1788 for NXP LPC1788 ARM Cortex-M3 Microcontrollers from MYIR
- EM2440-III for Samsung ARM9 series processors
- EM210 for Samsung ARM Cortex-A8 series processors
- EM4412 for Samsung ARM Cortex-A9 series processors