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.