I recently purchased an Atmel NGW100 development board which includes an Atmel AT32AP7000 CPU. This CPU is based on the new Atmel AVR32 architecture, and is capable of running full Linux. This review covers the basics of this development board, the AVR32 architecture, options for building Linux for this system, as well as opinions on how a new architecture can succeed in a field of well established architectures like ARM and MIPS.
What is AVR32?
The AVR32 architecture defined by Atmel is a 32-bit RISC load/store architecture. There are several different versions of the core. Atmel currently supplies two classes of AVR32 cpus:
- UC3 Flash MCUs – low end devices with integrated RAM and flash, no MMU, and look similar in capability to ARM7 microcontroller type devices.
- AP7 Application Processors – faster devices, include MMU, seem similar in capability and speed to ARM9 application processors such as Atmel’s AT92SAM devices.
As I am most interested in CPUs that can run Linux, this review will focus on the AP7 (AVR32 AP) class devices.
It seems that AVR32 is Atmel’s answer to ARM Cortex. Some features of the AP7 devices:
- good code density
- DSP instructions that execute in a single cycle
- Full MMU
- Instruction and Data caches
- SIMD extensions
- dynamic branch prediction
The MMU in the AP7 devices is interesting in that page tables are handled in software similar to a MIPS device. In a ARM CPU, the page tables are located in physical RAM and are strictly defined by the ARM architecture and page faults are handled in hardware. With MIPS (at least some devices) and AVR32, the MMU basically consists of a TLB (Translation Lookaside Buffer) that maps virtual addresses to physical address. As the TLB is limited in size, any misses are handled in software.
NGW100 Development board
The NGW100 development board is available from a number of distributors (including Digikey) for about $70. The board includes the following major components:
- Atmel AT32AP7000 CPU
- 32MB of SDRAM (MT48LC16M16A2)
- 8MB Parallel NOR Flash (AT49BV642D-70TU)
- 8MB Serial NOR Flash (AT45DB642D)
- 2 Ethernet ports
- SD/MMC slot
- RS232 port
- USB Client port
- Microcontroller for board control (ATtiny24-20SSU)
Atmel is directly supporting the development effort for the AP7 processors. They seem to be doing it right in that they are pushing support directly into the mainstream kernel. Currently, Atmel provide patches for GCC and uClibc. There is already efforts underway to provide AVR32 support in Openembedded, which will enable developers to quickly build full featured Linux distributions for AVR32 based products.
It will be interesting to see how the AVR32 based products work out. On one hand, one could argue that a custom architecture like AVR32 can’t succeed as it does not have an extensive ecosystem of tool vendors in place like ARM and MIPS. But, the availability of open source software such as GCC and Linux is rapidly lowering the barrier to entry for creating tools for new architectures. No longer do you need to wait for commercial tool vendors to provide software support. The model for software development is changing.
In comparison to Atmel’s AT91SAM parts, its difficult initially to see what the AVR32 parts offer over the SAM parts. For one, they are lacking a USB Host port which is becoming increasingly important to have in embedded Linux systems. Perhaps they offer other advantages such as lower cost and power. As we gain experience with these parts, I’m sure we’ll find applications where they are an excellent fit.