Ethernut 2.1 Memory Map
The ATmega128 used on Ethernut 2.1 is a member of the AVR family of microcontrollers, which are Harvard Architecture Machine, where program code and data are stored separately.
Data Memory
| Address | Description |
|---|---|
| 0x0000 - 0x001F | CPU Registers (Note 1) |
| 0x0020 - 0x005F | I/O Registers (Note 1) |
| 0x0060 - 0x00FF | Extended I/O Registers (Note 1) |
| 0x0100 - 0x10FF | Fast Internal RAM, no wait states required |
| 0x1100 - 0x7FFF | Fixed External RAM |
| 0x8000 - 0xBFFF | Banked External RAM, 30 pages, 16k each |
| 0xC000 - 0xCFFF | Ethernet Controller Registers (Note 2) |
| 0xD000 - 0xDFFF | Unused, Available for Custom Extensions (Note 3) |
| 0xE000 - 0xEFFF | Unused, Available for Custom Extensions (Note 4) |
| 0xFF00 - 0xFFFF | Bank Select Register (Note 5) |
Note 1: See ATmega128 datasheet
Note 2: See LAN91C111 datasheet. Not fully decoded, registers are mirrored.
Note 3: Recommended for fast access.
Note 4: Recommended for slow peripherals.
Note 5: Writing bank number to (0xFF00 + bank number) selects the bank at 0x8000.
Example: outr(0xFF02, 0x02) enables the third memory bank.
Program Memory
| Word Address | Description |
|---|---|
| 0x0000 - 0x0045 | Vector Table |
| 0x0046 - 0xEFFF | Initialization, RTOS and Application Sections |
| 0xF000 - 0xF7FF | Bootloader Section, if BOOTSZ = 00b (Note 1) |
| 0xF800 - 0xFBFF | Bootloader Section, if BOOTSZ = 01b (Note 1) |
| 0xFC00 - 0xFDFF | Bootloader Section, if BOOTSZ = 10b (Note 1) |
| 0xFE00 - 0xF7FF | Bootloader Section, if BOOTSZ = 11b (Note 1) |
Note 1: Available for applications if not used by bootloader.
