| 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 |