| |
| SSV ADNP/ESC1 Embedded Softcore Computing |
| Nios Softcore, Altera Cyclone FPGA |
| |
| Last Update: February 27, 2004 |
| ==================================================================== |
| |
| This file contains information regarding U-Boot and the SSV Embedded |
| Nios Softcore Computing platform ADNP/ESC1. For general Nios |
| information see doc/README.nios. |
| |
| Most stuff of this file was borrowed and based on README.dk1s10, |
| the Altera DK-1S10 related information file. |
| |
| For those interested in contributing ... see HELP WANTED section |
| in doc/README.nios. |
| |
| Contents: |
| |
| 1. Files |
| 2. Memory Organization |
| 3. CPU Variations |
| 4. Examples |
| 5. Programming U-Boot into FLASH with GERMS |
| 6. Autoboot |
| 7. U-Boot environment convention and update philosophy |
| |
| ==================================================================== |
| |
| 1. Files |
| ========= |
| board/ssv/adnpesc1/* |
| include/configs/ADNPESC1.h |
| include/configs/ADNPESC1_base_32.h |
| |
| |
| 2. Memory Organization |
| ======================= |
| |
| For the most part, you can put things pretty much anywhere. |
| This is pretty flexible for Nios. So here we make some arbitrary |
| choices & assume that the monitor is placed at the end of a memory |
| resource. So you must make sure TEXT_BASE is chosen appropriately. |
| This is very important if you plan to move your memory to another |
| place as configured at this time! |
| |
| -The heap is placed below the monitor (U-Boot code). |
| -Global data is placed below the heap. |
| -The stack is placed below global data (&grows down). |
| |
| (see doc/README.adnpesc1_base32 too) |
| |
| |
| 3. CPU Variations |
| ================= |
| |
| There are more than one NIOS CPU variation for the ADNP/ESC1 possible. |
| U-Boot supports the following CPU configurations: |
| |
| - SSV Basis 32 (make ADNPESC1_base_32_config) |
| - SSV Basis 32 at DNP evaluation base board 2 |
| (make ADNPESC1_DNPEVA2_base_32_config) |
| |
| |
| 4. Examples |
| ============ |
| |
| The hello_world example works fine. To try out you have to change |
| the default load address from 0x0100_0000 to 0x0204_0000 in |
| examples/Makefile (the real SDRAM for default board configuration). |
| |
| |
| 5. Programming U-Boot into FLASH with GERMS |
| ============================================ |
| |
| The current version of the ADNP/ESC1 port with the default |
| configuration settings occupies about 97 KBytes of flash. |
| A minimal configuration occupies less than 70 KByte |
| (network, SPI, POST and board command support disabled). You |
| can save more memory by deactivating the Hu-Shell support and |
| long command help (CFG_HUSH_PARSER, CFG_LONGHELP). |
| |
| To program U-Boot into the ADNP/ESC1 flash using GERMS do the |
| following: |
| |
| 1. Download U-Boot to its target run space in SDRAM: |
| |
| a. Close jumper RCM_EN# and push the reset button. |
| |
| b. From the command line, download U-Boot using the |
| nios-run: |
| |
| $ nios-run -r u-boot.srec |
| |
| NOTE: In some cases this want fail. I don't know why, |
| but try again. |
| |
| This takes about 1 minute (GERMS is not very speedy here). |
| After u-boot is downloaded it will be executed. You should |
| see the following: |
| |
| U-Boot 1.0.2 (Jan 30 2004 - 12:59:15) |
| |
| CPU: Nios-32 Rev. 3.3 (0x3038) |
| Reg file size: 512 LO_LIMIT/HI_LIMIT: 1/30 |
| Board: SSV DilNetPC ADNP/ESC1 |
| Conf.: SSV Base 32 (nios_32) |
| In: serial |
| Out: serial |
| Err: serial |
| ADNPESC1 > |
| |
| |
| 2. Quit nios-run and start your terminal application (e.g. start |
| Hyperterminal or minicom). |
| |
| 3. Download the u-boot code to RAM. When using Hyperterminal, do the |
| following: |
| |
| a. From the u-boot command prompt start a binary download to SDRAM: |
| |
| at the SSV Basis 32 to SDRAM: |
| |
| ==> loadb 2000100 |
| |
| b. Download u-boot.bin using kermit. |
| |
| 4. From the U-Boot command prompt, erase flash: |
| |
| at the SSV Basis 32 from 0x1000000 to 0x103ffff: |
| |
| ==> protect off 1:0-3 |
| ==> erase 1:0-3 |
| |
| 5. Copy the binary image from SDRAM to flash: |
| |
| at the SSV Basis 32 from SDRAM: |
| |
| ==> cp.b 2000100 1000000 $filesize |
| |
| U-Boot will now automatically start when the board is powered on or |
| reset using the SSV Basis 32 configuration without closed RCM jumper. |
| To start U-Boot with closed RCM Jumper, enter the following GERMS |
| command: |
| |
| + g 1000000 |
| |
| |
| 6. Autoboot |
| =========== |
| |
| U-Boot will try to boot a valid Nios application from Flash. For this |
| it will use the deposited Hu-Shell script in environment variable |
| 'bootcmd' which is looking for a valid Nios application identifier |
| string in Flash and go on at even its entry address. For more |
| information see the next chapter. |
| |
| |
| 7. U-Boot environment convention and update philosophy |
| ====================================================== |
| |
| U-Boot for the SSV ADNP/ESC1 target knows about many environment |
| variables used to control the startup process, update process for |
| raw Nios applications, and optionally file system image updates. |
| In default configuration there are two Hu-Shell scripts to update |
| the Nios application and/or the file system image: |
| |
| 1. Update Nios application (ex. the uCLinux kernel): |
| |
| run 'appl_update' |
| |
| 2. Update optional file system image (ex. RomFS image used by uCLinux): |
| |
| run 'fs_update' |
| |
| The Nios application can be any programm code generated in relation |
| to the Nios application identifier -- the string "Nios" at offset |
| address 0x0c. To use the scripts like described above in a secure way |
| you have to check-up the next environment variables: |
| |
| 1. update_allowed |
| |
| - Update switch -- must be set to '1' (one) to allow any update |
| - default is '0' (zero) |
| |
| NOTE: You should avoid to save this variable with non zero |
| value to Flash. Otherwise it would be allow any |
| update process at any time! |
| |
| 2. appl_entry_addr |
| |
| - Nios application area start address (usually in Flash) |
| - this is the startup address for autoboot |
| - each Nios application code we want to update will be copied |
| to this address |
| - default is CFG_ADNPESC1_NIOS_APPL_ENTRY |
| |
| 3. appl_end_addr |
| |
| - Nios application area end address (usually in Flash) |
| - will be used to unprotect/erase the Flash area while updating |
| - default is CFG_ADNPESC1_NIOS_APPL_END |
| |
| 4. appl_ident_addr |
| |
| - address of the Nios application identification string |
| - this is the address checked-up by autoboot |
| - default is CFG_ADNPESC1_NIOS_APPL_IDENT |
| |
| 5. appl_ident_str |
| |
| - the Nios application identification string itself |
| - default is CFG_ADNPESC1_NIOS_IDENTIFIER |
| |
| 6. appl_name |
| |
| - name of file we have to download/update |
| - default is ADNPESC1/base32/linux.bin |
| |
| 7. fs_base_addr |
| |
| - optionally file system area start address (usually in Flash) |
| - each file system we want to update will be copied to this address |
| - default is CFG_ADNPESC1_FILESYSTEM_BASE |
| |
| 8. fs_end_addr |
| |
| - optionally file system area end address (usually in Flash) |
| - will be used to unprotect/erase the Flash area while updating |
| - default is CFG_ADNPESC1_FILESYSTEM_END |
| |
| 9. fs_name |
| |
| - name of file we have to download/update |
| - default is ADNPESC1/base32/romfs.img |