1131 lines
44 KiB
Plaintext
1131 lines
44 KiB
Plaintext
|
README
|
||
|
======
|
||
|
|
||
|
This README file describes the port of NuttX to the SAMA5D2 Xplained Ulta
|
||
|
development board. This board features the Atmel SAMA5D27 microprocessor.
|
||
|
See http://www.atmel.com for further information.
|
||
|
|
||
|
Contents
|
||
|
========
|
||
|
|
||
|
- Loading Code into SRAM with J-Link
|
||
|
- Creating and Using DRAMBOOT
|
||
|
- Creating and Using AT25BOOT
|
||
|
- Running NuttX from SDRAM
|
||
|
- Buttons and LEDs
|
||
|
- Serial Console
|
||
|
- SAMA5D2-XULT Configuration Options
|
||
|
- Configurations
|
||
|
|
||
|
Loading Code into SRAM with J-Link
|
||
|
==================================
|
||
|
|
||
|
Loading code with the Segger tools and GDB
|
||
|
------------------------------------------
|
||
|
|
||
|
1) Change directories into the directory where you built NuttX.
|
||
|
2) Start the GDB server and wait until it is ready to accept GDB
|
||
|
connections.
|
||
|
3) Then run GDB like this:
|
||
|
|
||
|
$ arm-none-eabi-gdb
|
||
|
(gdb) target remote localhost:2331
|
||
|
(gdb) mon reset
|
||
|
(gdb) load nuttx
|
||
|
(gdb) ... start debugging ...
|
||
|
|
||
|
Loading code using J-Link Commander
|
||
|
----------------------------------
|
||
|
|
||
|
J-Link> r
|
||
|
J-Link> loadbin <file> <address>
|
||
|
J-Link> setpc <address of __start>
|
||
|
J-Link> ... start debugging ...
|
||
|
|
||
|
Creating and Using DRAMBOOT
|
||
|
===========================
|
||
|
|
||
|
In order to have more control of debugging code that runs out of DARM,
|
||
|
I created the sama5d2-xult/dramboot configuration. That configuration is
|
||
|
described below under "Configurations."
|
||
|
|
||
|
Here are some general instructions on how to build an use dramboot:
|
||
|
|
||
|
Building:
|
||
|
1. Remove any old configurations (if applicable).
|
||
|
|
||
|
cd <nuttx>
|
||
|
make distclean
|
||
|
|
||
|
2. Install and build the dramboot configuration. This steps will establish
|
||
|
the dramboot configuration and setup the PATH variable in order to do
|
||
|
the build:
|
||
|
|
||
|
cd tools
|
||
|
./configure.sh sama5d2-xult/dramboot
|
||
|
cd -
|
||
|
. ./setenv.sh
|
||
|
|
||
|
Before sourcing the setenv.sh file above, you should examine it and
|
||
|
perform edits as necessary so that TOOLCHAIN_BIN is the correct path
|
||
|
to the directory than holds your toolchain binaries.
|
||
|
|
||
|
NOTE: Be aware that the default dramboot also disables the watchdog.
|
||
|
Since you will not be able to re-enable the watchdog later, you may
|
||
|
need to set CONFIG_SAMA5_WDT=y in the NuttX configuration file.
|
||
|
|
||
|
Then make dramboot:
|
||
|
|
||
|
make
|
||
|
|
||
|
This will result in an ELF binary called 'nuttx' and also HEX and
|
||
|
binary versions called 'nuttx.hex' and 'nuttx.bin'.
|
||
|
|
||
|
3. Rename the binaries. Since you will need two versions of NuttX: this
|
||
|
dramboot version that runs in internal SRAM and another under test in
|
||
|
NOR FLASH, I rename the resulting binary files so that they can be
|
||
|
distinguished:
|
||
|
|
||
|
mv nuttx dramboot
|
||
|
mv nuttx.hex dramboot.hex
|
||
|
mv nuttx.bin dramboot.bin
|
||
|
|
||
|
4. Build the "real" DRAM configuration. This will create the nuttx.hex
|
||
|
that you will load using dramboot. Note that you must select
|
||
|
CONFIG_SAMA5D2XULT_DRAM_BOOT=y. This controls the origin at which the
|
||
|
code is linked and positions it correctly for the DRAMBOOT program.
|
||
|
|
||
|
5. Restart the system holding DIS_BOOT. You should see the RomBOOT
|
||
|
prompt on the 115200 8N1 serial console (and nothing) more. Hit
|
||
|
the ENTER key with the focus on your terminal window a few time.
|
||
|
This will enable JTAG.
|
||
|
|
||
|
6. Then start the J-Link GDB server and GDB. In GDB, I do the following:
|
||
|
|
||
|
(gdb) mon heal # Halt the CPU
|
||
|
(gdb) load dramboot # Load dramboot into internal SRAM
|
||
|
(gdb) mon go # Start dramboot
|
||
|
|
||
|
You should see this message:
|
||
|
|
||
|
Send Intel HEX file now
|
||
|
|
||
|
Load your program by sending the nuttx.hex via the terminal program.
|
||
|
Then:
|
||
|
|
||
|
(gdb) mon halt # Break in
|
||
|
(gdb) mon reg pc = 0x20000040 # Set the PC to DRAM entry point
|
||
|
(gdb) mon go # And jump into DRAM
|
||
|
|
||
|
The dramboot program can also be configured to jump directly into
|
||
|
DRAM without requiring the final halt and go by setting
|
||
|
CONFIG_SAMA5D2XULT_DRAM_START=y in the NuttX configuration. However,
|
||
|
since I have been debugging the early boot sequence, the above
|
||
|
sequence has been most convenient for me since it allows me to
|
||
|
step into the program in SDRAM.
|
||
|
|
||
|
7. An option is to use the SAM-BA tool to write the DRAMBOOT image into
|
||
|
Serial FLASH. Then, the system will boot from Serial FLASH by
|
||
|
copying the DRAMBOOT image in SRAM which will run, download the nuttx.hex
|
||
|
file, and then start the image loaded into DRAM automatically. This is
|
||
|
a very convenient usage!
|
||
|
|
||
|
NOTES: (1) There is that must be closed to enable use of the AT25
|
||
|
Serial Flash. (2) If using SAM-BA, make sure that you load the DRAM
|
||
|
boot program into the boot area via the pull-down menu. (3) If
|
||
|
you don't have SAM-BA, an alternative is to use the AT25BOOT program
|
||
|
described in the next section.
|
||
|
|
||
|
STATUS: I don't have a working SAM-BA at the moment and there are issues
|
||
|
with my AT25BOOT (see below). I currently work around these issues by
|
||
|
putting DRAMBOOT on a microSD card (as boot.bin). The RomBOOT loader does
|
||
|
boot that image without issue.
|
||
|
|
||
|
Creating and Using AT25BOOT
|
||
|
===========================
|
||
|
|
||
|
To work around some SAM-BA availability issues that I had at one time,
|
||
|
I created the AT25BOOT program. AT25BOOT is a tiny program that runs in
|
||
|
ISRAM. AT25BOOT will enable SDRAM and configure the AT25 Serial FLASH.
|
||
|
It will prompt and then load an Intel HEX program into SDRAM over the
|
||
|
serial console. If the program is successfully loaded in SDRAM, AT25BOOT
|
||
|
will copy the program at the beginning of the AT26 Serial FLASH.
|
||
|
If the jumpering is set correctly, the SAMA5D2 RomBOOT loader will
|
||
|
then boot the program from the serial FLASH the next time that it
|
||
|
reset.
|
||
|
|
||
|
The AT25BOOT configuration is described below under "Configurations."
|
||
|
|
||
|
Here are some general instructions on how to build an use AT25BOOT:
|
||
|
|
||
|
Building:
|
||
|
1. Remove any old configurations (if applicable).
|
||
|
|
||
|
cd <nuttx>
|
||
|
make distclean
|
||
|
|
||
|
2. Install and build the AT25BOOT configuration. This steps will establish
|
||
|
the AT25BOOT configuration and setup the PATH variable in order to do
|
||
|
the build:
|
||
|
|
||
|
cd tools
|
||
|
./configure.sh sama5d2-xult/at25boot
|
||
|
cd -
|
||
|
. ./setenv.sh
|
||
|
|
||
|
Before sourcing the setenv.sh file above, you should examine it and
|
||
|
perform edits as necessary so that TOOLCHAIN_BIN is the correct path
|
||
|
to the directory than holds your toolchain binaries.
|
||
|
|
||
|
Then make AT25BOOT:
|
||
|
|
||
|
make
|
||
|
|
||
|
This will result in an ELF binary called 'nuttx' and also HEX and
|
||
|
binary versions called 'nuttx.hex' and 'nuttx.bin'.
|
||
|
|
||
|
3. Rename the binaries. If you want to save this version of AT25BOOT so
|
||
|
that it does not get clobbered later, you may want to rename the
|
||
|
binaries:
|
||
|
|
||
|
mv nuttx at25boot
|
||
|
mv nuttx.hex at25boot.hex
|
||
|
mv nuttx.bin at25boot.bin
|
||
|
|
||
|
4. Build the "real" DRAMBOOT configuration. This will create the
|
||
|
dramboot.hex that you will write to the AT25 FLASH using AT25BOOT. See
|
||
|
the section above entitled "Creating and Using AT25BOOT" for more
|
||
|
information.
|
||
|
|
||
|
5. Restart the system holding DIS_BOOT. You should see the RomBOOT
|
||
|
prompt on the 115200 8N1 serial console (and nothing) more. Hit
|
||
|
the ENTER key with the focus on your terminal window a few time.
|
||
|
This will enable JTAG.
|
||
|
|
||
|
6. Then start the J-Link GDB server and GDB. In GDB, I do the following:
|
||
|
|
||
|
(gdb) mon heal # Halt the CPU
|
||
|
(gdb) load at25boot # Load AT25BOOT into internal SRAM
|
||
|
(gdb) mon go # Start AT25BOOT
|
||
|
|
||
|
You should see this message:
|
||
|
|
||
|
Send Intel HEX file now
|
||
|
|
||
|
Load DRAMBOOT by sending the dramboot.hex via the terminal program.
|
||
|
At this point you will get messages indicated whether or not the write
|
||
|
to the AT25 FLASH was successful or not. When you reset the board,
|
||
|
it should then boot from the AT25 Serial FLASH and you should again
|
||
|
get the prompt:
|
||
|
|
||
|
Send Intel HEX file now
|
||
|
|
||
|
But now you are being prompted to load the DRAM program under test
|
||
|
(See the section above entitled "Creating and Using AT25BOOT").
|
||
|
|
||
|
7. An better option, if available, is to use the SAM-BA tool to write the
|
||
|
DRAMBOOT image into Serial FLASH.
|
||
|
|
||
|
NOTES: (1) There is that must be closed to enable use of the AT25
|
||
|
Serial Flash. (2) If using SAM-BA, make sure that you load the DRAM
|
||
|
boot program into the boot area via the pull-down menu.
|
||
|
|
||
|
STATUS: While this program works great and appears to correctly write
|
||
|
the binary image onto the AT25 Serial FLASH, the RomBOOT loader will
|
||
|
not boot it! I believe that is because the secure boot loader has some
|
||
|
undocumented requirements that I am unaware of. (2014-6-28)
|
||
|
|
||
|
Running NuttX from SDRAM
|
||
|
========================
|
||
|
|
||
|
NuttX may be executed from SDRAM. But this case means that the NuttX
|
||
|
binary must reside on some other media (typically NAND FLASH, Serial
|
||
|
FLASH) or transferred over some interface (perhaps a UARt or even a
|
||
|
TFTP server). In these cases, an intermediate bootloader such as U-Boot
|
||
|
or Barebox must be used to configure the SAMA5D2 clocks and SDRAM and
|
||
|
then to copy the NuttX binary into SDRAM.
|
||
|
|
||
|
The SRAMBOOT program is another option (see above). But this section
|
||
|
will focus on U-Boot.
|
||
|
|
||
|
- NuttX Configuration
|
||
|
- Boot sequence
|
||
|
- NAND FLASH Memory Map
|
||
|
- Programming the AT91Boostrap Binary
|
||
|
- Programming U-Boot
|
||
|
- Load NuttX with U-Boot on AT91 boards
|
||
|
|
||
|
TODO: Some drivers may require some adjustments to run from SDRAM. That
|
||
|
is because in this case macros like BOARD_MCK_FREQUENCY are not constants
|
||
|
but are instead function calls: The MCK clock frequency is not known in
|
||
|
advance but instead has to be calculated from the bootloader PLL configuration.
|
||
|
See the TODO list at the end of this file for further information.
|
||
|
|
||
|
NuttX Configuration
|
||
|
-------------------
|
||
|
|
||
|
In order to run from SDRAM, NuttX must be built at origin 0x20008000 in
|
||
|
SDRAM (skipping over SDRAM memory used by the bootloader). The following
|
||
|
configuration option is required:
|
||
|
|
||
|
CONFIG_SAMA5_BOOT_SDRAM=y
|
||
|
CONFIG_BOOT_RUNFROMSDRAM=y
|
||
|
|
||
|
These options tell the NuttX code that it will be booting and running from
|
||
|
SDRAM. In this case, the start-logic will do to things: (1) it will not
|
||
|
configure the SAMA5D2 clocking. Rather, it will use the clock configuration
|
||
|
as set up by the bootloader. And (2) it will not attempt to configure the
|
||
|
SDRAM. Since NuttX is already running from SDRAM, it must accept the SDRAM
|
||
|
configuration as set up by the bootloader.
|
||
|
|
||
|
Boot sequence
|
||
|
-------------
|
||
|
|
||
|
Reference: http://www.at91.com/linux4sam/bin/view/Linux4SAM/GettingStarted
|
||
|
|
||
|
Several pieces of software are involved to boot a Nutt5X into SDRAM. First
|
||
|
is the primary bootloader in ROM which is in charge to check if a valid
|
||
|
application is present on supported media (NOR FLASH, Serial DataFlash,
|
||
|
NAND FLASH, SD card).
|
||
|
|
||
|
The boot sequence of linux4SAM is done in several steps :
|
||
|
|
||
|
1. The ROM bootloader checks if a valid application is present in FLASH
|
||
|
and if it is the case downloads it into internal SRAM. This program
|
||
|
is usually a second level bootloader called AT91BootStrap.
|
||
|
|
||
|
2. AT91Bootstrap is the second level bootloader. It is in charge of the
|
||
|
hardware configuration. It downloads U-Boot / Barebox binary from
|
||
|
FLASH to SDRAM / DDRAM and starts the third level bootloader
|
||
|
(U-Boot / Barebox)
|
||
|
|
||
|
(see http://www.at91.com/linux4sam/bin/view/Linux4SAM/AT91Bootstrap).
|
||
|
|
||
|
3. The third level bootloader is either U-Boot or Barebox. The third
|
||
|
level bootloader is in charge of downloading NuttX binary from FLASH,
|
||
|
network, SD card, etc. It then starts NuttX.
|
||
|
|
||
|
4. Then NuttX runs from SDRAM
|
||
|
|
||
|
NAND FLASH Memory Map
|
||
|
---------------------
|
||
|
|
||
|
Reference: http://www.at91.com/linux4sam/bin/view/Linux4SAM/GettingStarted
|
||
|
|
||
|
0x0000:0000 - 0x0003:ffff: AT91BootStrap
|
||
|
0x0004:0000 - 0x000b:ffff: U-Boot
|
||
|
0x000c:0000 - 0x000f:ffff: U-Boot environment
|
||
|
0x0010:0000 - 0x0017:ffff: U-Boot environement redundant
|
||
|
0x0018:0000 - 0x001f:ffff: Device tree (DTB)
|
||
|
0x0020:0000 - 0x007f:ffff: NuttX
|
||
|
0x0080:0000 - end: Available for use as a NAND file system
|
||
|
|
||
|
Programming the AT91Boostrap Binary
|
||
|
-----------------------------------
|
||
|
|
||
|
Reference: http://www.at91.com/linux4sam/bin/view/Linux4SAM/AT91Bootstrap
|
||
|
|
||
|
This section describes how to program AT91Bootstrap binary into the boot
|
||
|
media with SAM-BA tool using NandFlash as boot media.
|
||
|
|
||
|
1. Get AT91BootStrap binaries. Build instructions are available here:
|
||
|
|
||
|
http://www.at91.com/linux4sam/bin/view/Linux4SAM/AT91Bootstrap#Build_AT91Bootstrap_from_sources
|
||
|
|
||
|
A pre-built AT91BootStrap binary is available here:
|
||
|
|
||
|
ftp://www.at91.com/pub/at91bootstrap/AT91Bootstrap3.6.1/sama5d3_xplained-nandflashboot-uboot-3.6.1.bin
|
||
|
|
||
|
2. Start the SAM-BA GUI Application:
|
||
|
|
||
|
- Connect the USB Device interface to your host machine using the USB
|
||
|
Device Cable.
|
||
|
- Make sure that the chip can execute the SAM-BA Monitor.
|
||
|
- Start SAM-BA GUI application.
|
||
|
- Select the board in the drop-down menu and choose the USB connection.
|
||
|
|
||
|
3. In the SAM-BA GUI Application:
|
||
|
|
||
|
- Choose the "NandFlash" tab in the SAM-BA GUI interface.
|
||
|
- Initialize the NandFlash by choosing the "Enable NandFlash" action in
|
||
|
the Scripts rolling menu, then press "Execute" button.
|
||
|
- Erase the NandFlash device by choosing the "Erase All" action, then
|
||
|
press "Execute" button.
|
||
|
- Enable the PMECC by choosing the "Enable OS PMECC parameters" action,
|
||
|
then press "Execute" button.
|
||
|
|
||
|
PMECC
|
||
|
Number of sectors per page: 4
|
||
|
Spare Size: 64
|
||
|
Number of ECC bits required: 4
|
||
|
Size of the ECC sector: 512
|
||
|
ECC offset: 36
|
||
|
|
||
|
- Choose "Send Boot File" action, then press Execute button to select the
|
||
|
at91bootstrap binary file and to program the binary to the NandFlash.
|
||
|
- Close SAM-BA, remove the USB Device cable.
|
||
|
|
||
|
Programming U-Boot
|
||
|
-------------------
|
||
|
|
||
|
Reference http://www.at91.com/linux4sam/bin/view/Linux4SAM/U-Boot
|
||
|
|
||
|
1. Get U-Boot Binaries. Build instructions are available here:
|
||
|
|
||
|
http://www.at91.com/linux4sam/bin/view/Linux4SAM/U-Boot#Build_U_Boot_from_sources
|
||
|
|
||
|
A pre-Built binay image is available here:
|
||
|
|
||
|
ftp://www.at91.com/pub/uboot/u-boot-v2013.07/u-boot-sama5d3_xplained-v2013.07-at91-r1.bin
|
||
|
|
||
|
2. Start the SAM-BA GUI Application:
|
||
|
|
||
|
- Connect the USB Device interface to your host machine using the USB
|
||
|
Device Cable.
|
||
|
- Make sure that the chip can execute the SAM-BA Monitor.
|
||
|
- Start SAM-BA GUI application.
|
||
|
- Select the board in the drop-down menu and choose the USB connection.
|
||
|
|
||
|
3. In the SAM-BA GUI Application:
|
||
|
|
||
|
- Choose the NandFlash tab in the SAM-BA GUI interface.
|
||
|
- Initialize the NandFlash by choosing the "Enable NandFlash" action in
|
||
|
the Scripts rolling menu, then press Execute button.
|
||
|
- Enable the PMECC by choosing the "Enable OS PMECC parameters" action,
|
||
|
then press Execute button.
|
||
|
|
||
|
PMECC
|
||
|
Number of sectors per page: 4
|
||
|
Spare Size: 64
|
||
|
Number of ECC bits required: 4
|
||
|
Size of the ECC sector: 512
|
||
|
ECC offset: 36
|
||
|
|
||
|
- Press the "Send File Name" Browse button
|
||
|
- Choose u-boot.bin binary file and press Open
|
||
|
- Enter the proper address on media in the Address text field:
|
||
|
0x00040000
|
||
|
- Press the "Send File" button
|
||
|
- Close SAM-BA, remove the USB Device cable.
|
||
|
|
||
|
You should now be able to interrupt with U-Boot vie the DBGU interface.
|
||
|
|
||
|
Load NuttX with U-Boot on AT91 boards
|
||
|
-------------------------------------
|
||
|
|
||
|
Reference http://www.at91.com/linux4sam/bin/view/Linux4SAM/U-Boot
|
||
|
|
||
|
Preparing NuttX image
|
||
|
|
||
|
U-Boot does not support normal binary images. Instead you have to
|
||
|
create an uImage file with the mkimage tool which encapsulates kernel
|
||
|
image with header information, CRC32 checksum, etc.
|
||
|
|
||
|
mkimage comes in source code with U-Boot distribution and it is built
|
||
|
during U-Boot compilation (u-boot-source-dir/tools/mkimage). There
|
||
|
are also sites where you can download pre-built mkimage binaries. For
|
||
|
example: http://www.trimslice.com/wiki/index.php/U-Boot_images
|
||
|
|
||
|
See the U-Boot README file for more information. More information is
|
||
|
also available in the mkimage man page (for example,
|
||
|
http://linux.die.net/man/1/mkimage).
|
||
|
|
||
|
Command to generate an uncompressed uImage file (4) :
|
||
|
|
||
|
mkimage -A arm -O linux -C none -T kernel -a 20008000 -e 20008000 \
|
||
|
-n nuttx -d nuttx.bin uImage
|
||
|
|
||
|
Where:
|
||
|
|
||
|
-A arm: Set architecture to ARM
|
||
|
-O linux: Select operating system. bootm command of u-boot changes
|
||
|
boot method by os type.
|
||
|
-T kernel: Set image type.
|
||
|
-C none: Set compression type.
|
||
|
-a 20008000: Set load address.
|
||
|
-e 20008000: Set entry point.
|
||
|
-n nuttx: Set image name.
|
||
|
-d nuttx.bin: Use image data from nuttx.bin.
|
||
|
|
||
|
This will generate a binary called uImage. If you have the path to
|
||
|
mkimage in your PATH variable, then you can automatically build the
|
||
|
uImage file by adding the following to your .config file:
|
||
|
|
||
|
CONFIG_RAW_BINARY=y
|
||
|
CONFIG_UBOOT_UIMAGE=y
|
||
|
CONFIG_UIMAGE_LOAD_ADDRESS=0x20008000
|
||
|
CONFIG_UIMAGE_ENTRY_POINT=0x20008040
|
||
|
|
||
|
The uImage file can them be loaded into memory from a variety of sources
|
||
|
(serial, SD card, JFFS2 on NAND, TFTP).
|
||
|
|
||
|
STATUS:
|
||
|
2014-4-1: So far, I am unable to get U-Boot to execute the uImage
|
||
|
file. I get the following error messages (in this case
|
||
|
trying to load from an SD card):
|
||
|
|
||
|
U-Boot> fatload mmc 0 0x22000000 uimage
|
||
|
reading uimage
|
||
|
97744 bytes read in 21 ms (4.4 MiB/s)
|
||
|
|
||
|
U-Boot> bootm 0x22000000
|
||
|
## Booting kernel from Legacy Image at 0x22000000 ...
|
||
|
Image Name: nuttx
|
||
|
Image Type: ARM Linux Kernel Image (uncompressed)
|
||
|
Data Size: 97680 Bytes = 95.4 KiB
|
||
|
Load Address: 20008000
|
||
|
Entry Point: 20008040
|
||
|
Verifying Checksum ... OK
|
||
|
XIP Kernel Image ... OK
|
||
|
FDT and ATAGS support not compiled in - hanging
|
||
|
### ERROR ### Please RESET the board ###
|
||
|
|
||
|
This, however, appears to be a usable workaround:
|
||
|
|
||
|
U-Boot> fatload mmc 0 0x20008000 nuttx.bin
|
||
|
mci: setting clock 257812 Hz, block size 512
|
||
|
mci: setting clock 257812 Hz, block size 512
|
||
|
mci: setting clock 257812 Hz, block size 512
|
||
|
gen_atmel_mci: CMDR 00001048 ( 8) ARGR 000001aa (SR: 0c100025) Command Time Out
|
||
|
mci: setting clock 257812 Hz, block size 512
|
||
|
mci: setting clock 22000000 Hz, block size 512
|
||
|
reading nuttx.bin
|
||
|
108076 bytes read in 23 ms (4.5 MiB/s)
|
||
|
|
||
|
U-Boot> go 0x20008040
|
||
|
## Starting application at 0x20008040 ...
|
||
|
|
||
|
NuttShell (NSH) NuttX-7.2
|
||
|
nsh>
|
||
|
|
||
|
Loading through network
|
||
|
|
||
|
On a development system, it is useful to get the kernel and root file
|
||
|
system through the network. U-Boot provides support for loading
|
||
|
binaries from a remote host on the network using the TFTP protocol.
|
||
|
|
||
|
To manage to use TFTP with U-Boot, you will have to configure a TFTP
|
||
|
server on your host machine. Check your distribution manual or Internet
|
||
|
resources to configure a Linux or Windows TFTP server on your host:
|
||
|
|
||
|
- U-Boot documentation on a Linux host:
|
||
|
http://www.denx.de/wiki/view/DULG/SystemSetup#Section_4.6.
|
||
|
|
||
|
- Another TFTP configuration reference:
|
||
|
http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch16_:_Telnet%2C_TFTP%2C_and_xinetd#TFTP
|
||
|
|
||
|
On the U-Boot side, you will have to setup the networking parameters:
|
||
|
|
||
|
1. Setup an Ethernet address (MAC address)
|
||
|
Check this U-Boot network BuildRootFAQ entry to choose a proper MAC
|
||
|
address: http://www.denx.de/wiki/DULG/EthernetDoesNotWork
|
||
|
|
||
|
setenv ethaddr 00:e0:de:ad:be:ef
|
||
|
|
||
|
2. Setup IP parameters:
|
||
|
The board ip address
|
||
|
|
||
|
setenv ipaddr 10.0.0.2
|
||
|
|
||
|
The server ip address where the TFTP server is running
|
||
|
|
||
|
setenv serverip 10.0.0.1
|
||
|
|
||
|
3. saving Environment to flash
|
||
|
|
||
|
saveenv
|
||
|
|
||
|
4. If Ethernet Phy has not been detected during former bootup, reset
|
||
|
the board to reload U-Boot : the Ethernet address and Phy
|
||
|
initialization shall be ok, now
|
||
|
|
||
|
5. Download the NuttX uImage and the root file system to a ram location
|
||
|
using the U-Boot tftp command (Cf. U-Boot script capability chapter).
|
||
|
|
||
|
6. Launch NuttX issuing a bootm or boot command.
|
||
|
|
||
|
If the board has both emac and gmac, you can use following to choose
|
||
|
which one to use:
|
||
|
|
||
|
setenv ethact macb0,gmacb0
|
||
|
setenv ethprime gmacb0
|
||
|
|
||
|
STATUS:
|
||
|
2014-3-30: These instructions were adapted from the Linux4SAM website
|
||
|
but have not yet been used.
|
||
|
|
||
|
Using JTAG
|
||
|
----------
|
||
|
|
||
|
This description assumes that you have a JTAG debugger such as Segger
|
||
|
J-Link connected to the SAMA5D3-Xplained.
|
||
|
|
||
|
1. Start the GDB server
|
||
|
2. Start GDB
|
||
|
3. Use the 'target remote localhost:xxxx' command to attach to the GDG
|
||
|
server
|
||
|
4. Do 'mon reset' then 'mon go' to start the internal boot loader (maybe
|
||
|
U-Boot).
|
||
|
5. Let the boot loader run until it completes SDRAM initialization, then
|
||
|
do 'mon halt'.
|
||
|
6. Now you have SDRAM initialized and you use 'load nuttx' to load the
|
||
|
ELF file into SDRAM.
|
||
|
7. Use 'file nuttx' to load symbols
|
||
|
8. Set the PC to the NuttX entry point 'mon pc 0x20008040' and start
|
||
|
nuttx using 'mon go'.
|
||
|
|
||
|
Buttons and LEDs
|
||
|
================
|
||
|
|
||
|
Buttons
|
||
|
-------
|
||
|
A single button, PB_USER1 (PB2), is available on the SAMA5D2-XULT
|
||
|
|
||
|
------------------------------ ------------------- -------------------------
|
||
|
SAMA5D2 PIO SIGNAL USAGE
|
||
|
------------------------------ ------------------- -------------------------
|
||
|
PE13/A13/TIOB1/PWML2 PB_USER1_PE13 PB_USER1
|
||
|
------------------------------ ------------------- -------------------------
|
||
|
|
||
|
Closing JP2 will bring PE13 to ground so 1) PE13 should have a weak pull-up,
|
||
|
and 2) when PB2 is pressed, a low value will be senses.
|
||
|
|
||
|
Support for pollable buttons is enabled with:
|
||
|
|
||
|
CONFIG_ARCH_BUTTONS=y
|
||
|
|
||
|
For interrupt driven buttons, add:
|
||
|
|
||
|
CONFIG_ARCH_IRQBUTTONS=y
|
||
|
|
||
|
Program interfaces for button access are described in nuttx/include/nuttx/arch.h
|
||
|
|
||
|
There is an example that can be enabled to test button interrupts. That
|
||
|
example is enabled like:
|
||
|
|
||
|
CONFIG_EXAMPLES_BUTTONS=y
|
||
|
CONFIG_EXAMPLES_BUTTONS_MAX=0
|
||
|
CONFIG_EXAMPLES_BUTTONS_MIN=0
|
||
|
CONFIG_EXAMPLES_BUTTONS_NAME0="PB_USER"
|
||
|
CONFIG_EXAMPLES_IRQBUTTONS_MAX=0
|
||
|
CONFIG_EXAMPLES_IRQBUTTONS_MIN=0
|
||
|
|
||
|
LEDs
|
||
|
----
|
||
|
|
||
|
There is an RGB LED on board the SAMA5D2-XULT. The RED component is driven by
|
||
|
the SDHC_CD pin (PA13) and so will not be used. The LEDs are provided VDD_LED
|
||
|
and so bringing the LED low will will illuminated the LED.
|
||
|
|
||
|
------------------------------ ------------------- -------------------------
|
||
|
SAMA5D2 PIO SIGNAL USAGE
|
||
|
------------------------------ ------------------- -------------------------
|
||
|
PA13 SDHC_CD_PA13 Red LED
|
||
|
PB5 LED_GREEN_PB5 Green LED
|
||
|
PB0 LED_BLUE_PB0 Blue LED
|
||
|
------------------------------ ------------------- -------------------------
|
||
|
|
||
|
When CONFIG_ARCH_LEDS is defined in the NuttX configuration, NuttX will
|
||
|
control the Green LED (only)as follows:
|
||
|
|
||
|
SYMBOL Meaning Green LED
|
||
|
------------------- ----------------------- ---------
|
||
|
LED_STARTED NuttX has been started OFF
|
||
|
LED_HEAPALLOCATE Heap has been allocated OFF
|
||
|
LED_IRQSENABLED Interrupts enabled OFF
|
||
|
LED_STACKCREATED Idle stack created ON
|
||
|
LED_INIRQ In an interrupt N/C
|
||
|
LED_SIGNAL In a signal handler N/C
|
||
|
LED_ASSERTION An assertion failed N/C
|
||
|
LED_PANIC The system has crashed FLASH
|
||
|
|
||
|
Thus if the Green LED is statically on, NuttX has successfully booted and
|
||
|
is, apparently, running normally. If LED is flashing at approximately
|
||
|
2Hz, then a fatal error has been detected and the system has halted.
|
||
|
|
||
|
Serial Console
|
||
|
==============
|
||
|
|
||
|
Two UART ports are available:
|
||
|
|
||
|
Virtual COM / DBGU Port (J24). Either may be driven by USART3, depending
|
||
|
upon the setting of JP19 and JP20:
|
||
|
|
||
|
------------------------------ ------------------- -------------------------
|
||
|
SAMA5D2 PIO SIGNAL USAGE
|
||
|
------------------------------ ------------------- -------------------------
|
||
|
PE16/A16/RXD3/TIOB0 DBGU_RXD3_PE16 DBGU_RXD3 (See JP19)
|
||
|
PE17/A17/TXD3/TCLK0 DBGU_TXD3_PE17 DBGU_TXD3 (See JP20)
|
||
|
------------------------------ ------------------- -------------------------
|
||
|
|
||
|
In one jumper position UART3 connects to the SAM3U which will, in turn,
|
||
|
provide the serial output over a USB virtual COM port. In other other
|
||
|
jumper position, UART3 will connect the RS-232 port labelled DBGU (J24).
|
||
|
|
||
|
I personally prefer the RS-232 port because my terminal software does not
|
||
|
lose the USB Virtual COM every time I reset or power-cycle the board.
|
||
|
|
||
|
USART4 TTL-Level
|
||
|
------------------------------ ------------------- -------------------------
|
||
|
SAMA5D2 PIO SIGNAL USAGE
|
||
|
------------------------------ ------------------- -------------------------
|
||
|
PE26/NCS2/RXD4/A18 RXD4_PE26 RXD4
|
||
|
PE27/NWR1/NBS1/TXD4 TXD4_PE27 TXD4
|
||
|
------------------------------ ------------------- -------------------------
|
||
|
|
||
|
A TTL-to-RS232 converter is required to use this USART for a serial console.
|
||
|
|
||
|
- RXD4/PE26 is available at Expansion Interface, J19C pin 59
|
||
|
- TXD4/PE27 is available at Expansion Interface, J19C pin 60
|
||
|
- VCC_3V3 is also available at Expansion Interface, J19B pins 21 and 22
|
||
|
- GND is available J19A pin 11, J19B pin 31, and J19C pin 51
|
||
|
|
||
|
By default the RS-232 DBGU port on USART3 is used as the NuttX serial
|
||
|
console in all configurations (unless otherwise noted). USART4, however,
|
||
|
is the also available.
|
||
|
|
||
|
SAMA5D2-XULT Configuration Options
|
||
|
=================================
|
||
|
|
||
|
CONFIG_ARCH - Identifies the arch/ subdirectory. This should
|
||
|
be set to:
|
||
|
|
||
|
CONFIG_ARCH="arm"
|
||
|
|
||
|
CONFIG_ARCH_family - For use in C code:
|
||
|
|
||
|
CONFIG_ARCH_ARM=y
|
||
|
|
||
|
CONFIG_ARCH_architecture - For use in C code:
|
||
|
|
||
|
CONFIG_ARCH_CORTEXA5=y
|
||
|
|
||
|
CONFIG_ARCH_CHIP - Identifies the arch/*/chip subdirectory
|
||
|
|
||
|
CONFIG_ARCH_CHIP="sama5"
|
||
|
|
||
|
CONFIG_ARCH_CHIP_name - For use in C code to identify the exact
|
||
|
chip:
|
||
|
|
||
|
CONFIG_ARCH_CHIP_SAMA5=y
|
||
|
CONFIG_ARCH_CHIP_ATSAMA5D27=y
|
||
|
|
||
|
CONFIG_ARCH_BOARD - Identifies the configs subdirectory and
|
||
|
hence, the board that supports the particular chip or SoC.
|
||
|
|
||
|
CONFIG_ARCH_BOARD="sama5d2-xult" (for the SAMA5D2-XULT development board)
|
||
|
|
||
|
CONFIG_ARCH_BOARD_name - For use in C code
|
||
|
|
||
|
CONFIG_ARCH_BOARD_SAMA5D2_XULT=y
|
||
|
|
||
|
CONFIG_ARCH_LOOPSPERMSEC - Must be calibrated for correct operation
|
||
|
of delay loops
|
||
|
|
||
|
CONFIG_ENDIAN_BIG - define if big endian (default is little
|
||
|
endian)
|
||
|
|
||
|
CONFIG_RAM_SIZE - Describes the installed DRAM (SRAM in this case):
|
||
|
|
||
|
CONFIG_RAM_SIZE=0x0002000 (128Kb)
|
||
|
|
||
|
CONFIG_RAM_START - The physical start address of installed DRAM
|
||
|
|
||
|
CONFIG_RAM_START=0x20000000
|
||
|
|
||
|
CONFIG_RAM_VSTART - The virtual start address of installed DRAM
|
||
|
|
||
|
CONFIG_RAM_VSTART=0x20000000
|
||
|
|
||
|
CONFIG_ARCH_LEDS - Use LEDs to show state. Unique to boards that
|
||
|
have LEDs
|
||
|
|
||
|
CONFIG_ARCH_INTERRUPTSTACK - This architecture supports an interrupt
|
||
|
stack. If defined, this symbol is the size of the interrupt
|
||
|
stack in bytes. If not defined, the user task stacks will be
|
||
|
used during interrupt handling.
|
||
|
|
||
|
CONFIG_ARCH_STACKDUMP - Do stack dumps after assertions
|
||
|
|
||
|
CONFIG_ARCH_LEDS - Use LEDs to show state. Unique to board architecture.
|
||
|
|
||
|
CONFIG_ARCH_CALIBRATION - Enables some build in instrumentation that
|
||
|
cause a 100 second delay during boot-up. This 100 second delay
|
||
|
serves no purpose other than it allows you to calibrate
|
||
|
CONFIG_ARCH_LOOPSPERMSEC. You simply use a stop watch to measure
|
||
|
the 100 second delay then adjust CONFIG_ARCH_LOOPSPERMSEC until
|
||
|
the delay actually is 100 seconds.
|
||
|
|
||
|
Individual subsystems can be enabled:
|
||
|
|
||
|
CONFIG_SAMA5_DBGU - Debug Unit
|
||
|
CONFIG_SAMA5_PIT - Periodic Interval Timer
|
||
|
CONFIG_SAMA5_WDT - Watchdog timer
|
||
|
CONFIG_SAMA5_HSMC - Multi-bit ECC
|
||
|
CONFIG_SAMA5_SMD - SMD Soft Modem
|
||
|
CONFIG_SAMA5_USART0 - USART 0
|
||
|
CONFIG_SAMA5_USART1 - USART 1
|
||
|
CONFIG_SAMA5_USART2 - USART 2
|
||
|
CONFIG_SAMA5_USART3 - USART 3
|
||
|
CONFIG_SAMA5_UART0 - UART 0
|
||
|
CONFIG_SAMA5_UART1 - UART 1
|
||
|
CONFIG_SAMA5_TWI0 - Two-Wire Interface 0
|
||
|
CONFIG_SAMA5_TWI1 - Two-Wire Interface 1
|
||
|
CONFIG_SAMA5_TWI2 - Two-Wire Interface 2
|
||
|
CONFIG_SAMA5_HSMCI0 - High Speed Multimedia Card Interface 0
|
||
|
CONFIG_SAMA5_HSMCI1 - High Speed Multimedia Card Interface 1
|
||
|
CONFIG_SAMA5_SPI0 - Serial Peripheral Interface 0
|
||
|
CONFIG_SAMA5_SPI1 - Serial Peripheral Interface 1
|
||
|
CONFIG_SAMA5_TC0 - Timer Counter 0 (ch. 0, 1, 2)
|
||
|
CONFIG_SAMA5_TC1 - Timer Counter 1 (ch. 3, 4, 5)
|
||
|
CONFIG_SAMA5_PWM - Pulse Width Modulation Controller
|
||
|
CONFIG_SAMA5_ADC - Touch Screen ADC Controller
|
||
|
CONFIG_SAMA5_XDMAC0 - XDMA Controller 0
|
||
|
CONFIG_SAMA5_XDMAC1 - XDMA Controller 1
|
||
|
CONFIG_SAMA5_UHPHS - USB Host High Speed
|
||
|
CONFIG_SAMA5_UDPHS - USB Device High Speed
|
||
|
CONFIG_SAMA5_EMAC0 - Ethernet MAC 0 (GMAC0)
|
||
|
CONFIG_SAMA5_EMAC1 - Ethernet MAC 1 (GMAC1)
|
||
|
CONFIG_SAMA5_LCDC - LCD Controller
|
||
|
CONFIG_SAMA5_ISI - Image Sensor Interface
|
||
|
CONFIG_SAMA5_SSC0 - Synchronous Serial Controller 0
|
||
|
CONFIG_SAMA5_SSC1 - Synchronous Serial Controller 1
|
||
|
CONFIG_SAMA5_SHA - Secure Hash Algorithm
|
||
|
CONFIG_SAMA5_AES - Advanced Encryption Standard
|
||
|
CONFIG_SAMA5_TDES - Triple Data Encryption Standard
|
||
|
CONFIG_SAMA5_TRNG - True Random Number Generator
|
||
|
CONFIG_SAMA5_ARM - Performance Monitor Unit
|
||
|
CONFIG_SAMA5_FUSE - Fuse Controller
|
||
|
CONFIG_SAMA5_MPDDRC - MPDDR controller
|
||
|
|
||
|
Some subsystems can be configured to operate in different ways. The drivers
|
||
|
need to know how to configure the subsystem.
|
||
|
|
||
|
CONFIG_SAMA5_PIOA_IRQ - Support PIOA interrupts
|
||
|
CONFIG_SAMA5_PIOB_IRQ - Support PIOB interrupts
|
||
|
CONFIG_SAMA5_PIOC_IRQ - Support PIOD interrupts
|
||
|
CONFIG_SAMA5_PIOD_IRQ - Support PIOD interrupts
|
||
|
CONFIG_SAMA5_PIOE_IRQ - Support PIOE interrupts
|
||
|
|
||
|
CONFIG_USART0_ISUART - USART0 is configured as a UART
|
||
|
CONFIG_USART1_ISUART - USART1 is configured as a UART
|
||
|
CONFIG_USART2_ISUART - USART2 is configured as a UART
|
||
|
CONFIG_USART3_ISUART - USART3 is configured as a UART
|
||
|
|
||
|
AT91SAMA5 specific device driver settings
|
||
|
|
||
|
CONFIG_SAMA5_DBGU_SERIAL_CONSOLE - selects the DBGU
|
||
|
for the console and ttyDBGU
|
||
|
CONFIG_SAMA5_DBGU_RXBUFSIZE - Characters are buffered as received.
|
||
|
This specific the size of the receive buffer
|
||
|
CONFIG_SAMA5_DBGU_TXBUFSIZE - Characters are buffered before
|
||
|
being sent. This specific the size of the transmit buffer
|
||
|
CONFIG_SAMA5_DBGU_BAUD - The configure BAUD of the DBGU.
|
||
|
CONFIG_SAMA5_DBGU_PARITY - 0=no parity, 1=odd parity, 2=even parity
|
||
|
|
||
|
CONFIG_U[S]ARTn_SERIAL_CONSOLE - selects the USARTn (n=0,1,2,3) or UART
|
||
|
m (m=4,5) for the console and ttys0 (default is the DBGU).
|
||
|
CONFIG_U[S]ARTn_RXBUFSIZE - Characters are buffered as received.
|
||
|
This specific the size of the receive buffer
|
||
|
CONFIG_U[S]ARTn_TXBUFSIZE - Characters are buffered before
|
||
|
being sent. This specific the size of the transmit buffer
|
||
|
CONFIG_U[S]ARTn_BAUD - The configure BAUD of the UART. Must be
|
||
|
CONFIG_U[S]ARTn_BITS - The number of bits. Must be either 7 or 8.
|
||
|
CONFIG_U[S]ARTn_PARITY - 0=no parity, 1=odd parity, 2=even parity
|
||
|
CONFIG_U[S]ARTn_2STOP - Two stop bits
|
||
|
|
||
|
AT91SAMA5 USB Host Configuration
|
||
|
Pre-requisites
|
||
|
|
||
|
CONFIG_USBDEV - Enable USB device support
|
||
|
CONFIG_USBHOST - Enable USB host support
|
||
|
CONFIG_SAMA5_UHPHS - Needed
|
||
|
CONFIG_SAMA5_OHCI - Enable the STM32 USB OTG FS block
|
||
|
CONFIG_SCHED_WORKQUEUE - Worker thread support is required
|
||
|
|
||
|
Options:
|
||
|
|
||
|
CONFIG_SAMA5_OHCI_NEDS
|
||
|
Number of endpoint descriptors
|
||
|
CONFIG_SAMA5_OHCI_NTDS
|
||
|
Number of transfer descriptors
|
||
|
CONFIG_SAMA5_OHCI_TDBUFFERS
|
||
|
Number of transfer descriptor buffers
|
||
|
CONFIG_SAMA5_OHCI_TDBUFSIZE
|
||
|
Size of one transfer descriptor buffer
|
||
|
CONFIG_USBHOST_INT_DISABLE
|
||
|
Disable interrupt endpoint support
|
||
|
CONFIG_USBHOST_ISOC_DISABLE
|
||
|
Disable isochronous endpoint support
|
||
|
CONFIG_USBHOST_BULK_DISABLE
|
||
|
Disable bulk endpoint support
|
||
|
|
||
|
config SAMA5_OHCI_REGDEBUG
|
||
|
|
||
|
Configurations
|
||
|
==============
|
||
|
|
||
|
Information Common to All Configurations
|
||
|
----------------------------------------
|
||
|
Each SAMA5D2-XULT configuration is maintained in a sub-directory and
|
||
|
can be selected as follow:
|
||
|
|
||
|
cd tools
|
||
|
./configure.sh sama5d2-xult/<subdir>
|
||
|
cd -
|
||
|
. ./setenv.sh
|
||
|
|
||
|
Before sourcing the setenv.sh file above, you should examine it and perform
|
||
|
edits as necessary so that TOOLCHAIN_BIN is the correct path to the directory
|
||
|
than holds your toolchain binaries.
|
||
|
|
||
|
And then build NuttX by simply typing the following. At the conclusion of
|
||
|
the make, the nuttx binary will reside in an ELF file called, simply, nuttx.
|
||
|
|
||
|
make
|
||
|
|
||
|
The <subdir> that is provided above as an argument to the tools/configure.sh
|
||
|
must be is one of the following.
|
||
|
|
||
|
NOTES:
|
||
|
|
||
|
1. These configurations use the mconf-based configuration tool. To
|
||
|
change any of these configurations using that tool, you should:
|
||
|
|
||
|
a. Build and install the kconfig-mconf tool. See nuttx/README.txt
|
||
|
see additional README.txt files in the NuttX tools repository.
|
||
|
|
||
|
b. Execute 'make menuconfig' in nuttx/ in order to start the
|
||
|
reconfiguration process.
|
||
|
|
||
|
2. Unless stated otherwise, all configurations generate console
|
||
|
output on the DBGU (J23).
|
||
|
|
||
|
3. All of these configurations use the Code Sourcery for Windows toolchain
|
||
|
(unless stated otherwise in the description of the configuration). That
|
||
|
toolchain selection can easily be reconfigured using 'make menuconfig'.
|
||
|
Here are the relevant current settings:
|
||
|
|
||
|
Build Setup:
|
||
|
CONFIG_HOST_WINDOWS=y : Microsoft Windows
|
||
|
CONFIG_WINDOWS_CYGWIN=y : Using Cygwin or other POSIX environment
|
||
|
|
||
|
System Type -> Toolchain:
|
||
|
CONFIG_ARMV7A_TOOLCHAIN_GNU_EABIW=y : GNU EABI toolchain for windows
|
||
|
|
||
|
That same configuration will work with Atmel GCC toolchain. The only
|
||
|
change required to use the Atmel GCC toolchain is to change the PATH
|
||
|
variable so that those tools are selected instead of the CodeSourcery
|
||
|
tools. Try 'which arm-none-eabi-gcc' to make sure that you are
|
||
|
selecting the right tool.
|
||
|
|
||
|
The setenv.sh file is available for you to use to set the PATH
|
||
|
variable. The path in the that file may not, however, be correct
|
||
|
for your installation.
|
||
|
|
||
|
See also the "NOTE about Windows native toolchains" in the section call
|
||
|
"GNU Toolchain Options" above.
|
||
|
|
||
|
!!!WARNING!!! The first time that you type 'make', the system will
|
||
|
configure itself based on the settings in the .config file. One of
|
||
|
these settings can cause a lot of confusion if you configure the build
|
||
|
in the wrong state: If you are running on Linux, make *certain* that
|
||
|
you have CONFIG_HOST_LINUX=y *before* the first make or you will
|
||
|
create a very corrupt configuration that may not be easy to recover
|
||
|
from.
|
||
|
|
||
|
4. The SAMA5Dx is running at 528MHz by default in these configurations.
|
||
|
|
||
|
Board Selection -> CPU Frequency
|
||
|
CONFIG_SAMA5D2XULT_528MHZ=y : Enable 528MHz operation
|
||
|
CONFIG_BOARD_LOOPSPERMSEC=65775 : Calibrated on SAMA5D3-Xplained at
|
||
|
: 528MHz running from SDRAM
|
||
|
|
||
|
Configuration Sub-directories
|
||
|
-----------------------------
|
||
|
Summary: Some of the descriptions below are long and wordy. Here is the
|
||
|
concise summary of the available SAMA5D2-XULT configurations:
|
||
|
|
||
|
nsh: This is a basic NuttShell (NSH) configuration.
|
||
|
|
||
|
There may be issues with some of these configurations. See the details
|
||
|
for status of individual configurations.
|
||
|
|
||
|
Now for the gory details:
|
||
|
|
||
|
nsh:
|
||
|
|
||
|
This configuration directory provide the NuttShell (NSH). This is a
|
||
|
very simple NSH configuration upon which you can build further
|
||
|
functionality.
|
||
|
|
||
|
NOTES:
|
||
|
|
||
|
1. This configuration uses the the USART3 for the serial console
|
||
|
which is available at the "DBGU" RS-232 connector (J24). That
|
||
|
is easily changed by reconfiguring to (1) enable a different
|
||
|
serial peripheral, and (2) selecting that serial peripheral as
|
||
|
the console device.
|
||
|
|
||
|
2. By default, this configuration is set up to build on Windows
|
||
|
under either a Cygwin or MSYS environment using a recent, Windows-
|
||
|
native, generic ARM EABI GCC toolchain (such as the CodeSourcery
|
||
|
toolchain). Both the build environment and the toolchain
|
||
|
selection can easily be changed by reconfiguring:
|
||
|
|
||
|
CONFIG_HOST_WINDOWS=y : Windows operating system
|
||
|
CONFIG_WINDOWS_CYGWIN=y : POSIX environment under windows
|
||
|
CONFIG_ARMV7A_TOOLCHAIN_CODESOURCERYW=y : CodeSourcery for Windows
|
||
|
|
||
|
If you are running on Linux, make *certain* that you have
|
||
|
CONFIG_HOST_LINUX=y *before* the first make or you will create a
|
||
|
corrupt configuration that may not be easy to recover from. See
|
||
|
the warning in the section "Information Common to All Configurations"
|
||
|
for further information.
|
||
|
|
||
|
4. This configuration supports logging of debug output to a circular
|
||
|
buffer in RAM. This feature is discussed fully in this Wiki page:
|
||
|
http://nuttx.org/doku.php?id=wiki:howtos:syslog . Relevant
|
||
|
configuration settings are summarized below:
|
||
|
|
||
|
File System:
|
||
|
CONFIG_SYSLOG=y : Enables the System Logging feature.
|
||
|
|
||
|
Device Drivers:
|
||
|
CONFIG_RAMLOG=y : Enable the RAM-based logging feature.
|
||
|
CONFIG_RAMLOG_CONSOLE=n : (We don't use the RAMLOG console)
|
||
|
CONFIG_RAMLOG_SYSLOG=y : This enables the RAM-based logger as the
|
||
|
system logger.
|
||
|
CONFIG_RAMLOG_NONBLOCKING=y : Needs to be non-blocking for dmesg
|
||
|
CONFIG_RAMLOG_BUFSIZE=16384 : Buffer size is 16KiB
|
||
|
|
||
|
NOTE: This RAMLOG feature is really only of value if debug output
|
||
|
is enabled. But, by default, no debug output is disabled in this
|
||
|
configuration. Therefore, there is no logic that will add anything
|
||
|
to the RAM buffer. This feature is configured and in place only
|
||
|
to support any future debugging needs that you may have.
|
||
|
|
||
|
If you don't plan on using the debug features, then by all means
|
||
|
disable this feature and save 16KiB of RAM!
|
||
|
|
||
|
NOTE: There is an issue with capturing data in the RAMLOG: If
|
||
|
the system crashes, all of the crash dump information will into
|
||
|
the RAMLOG and you will be unable to access it! You can tell that
|
||
|
the system has crashed because (a) it will be unresponsive and (b)
|
||
|
the RED LED will be blinking at about 2Hz.
|
||
|
|
||
|
That is another good reason to disable the RAMLOG!
|
||
|
|
||
|
5. This configuration executes out of SDRAM flash and is loaded into
|
||
|
SDRAM from NAND, Serial DataFlash, SD card or from a TFTPC sever via
|
||
|
U-Boot, BareBox, or the DRAMBOOT configuration described above. Data
|
||
|
also is positioned in SDRAM.
|
||
|
|
||
|
The load address is different for the DRAMBOOT program and the Linux
|
||
|
bootloaders. This can easily be reconfigured, however:
|
||
|
|
||
|
CONFIG_SAMA5D2XULT_DRAM_BOOT=y
|
||
|
|
||
|
See the section above entitled "Creating and Using DRAMBOOT" above
|
||
|
for more information. Here is a summary of the steps that I used
|
||
|
to boot the NSH configuration:
|
||
|
|
||
|
a. Create the DRAMBOOT program as described above. It should be
|
||
|
configured with CONFIG_SAMA5D2XULT_DRAM_START=y so that DRAMBOOT
|
||
|
will immediately start the program. You may not want to do
|
||
|
this is your prefer to break in with GDB.
|
||
|
|
||
|
b. Write the DRAMBOOT program binary (nuttx.bin) to a microSD
|
||
|
card as "boot.bin". Insert the microSD card into the boar;
|
||
|
The ROM Booloader should now boot DRAMBOOT on reset and you
|
||
|
should see this message:
|
||
|
|
||
|
Send Intel HEX file now
|
||
|
|
||
|
c. Build the NSH version of NuttX. Send the Intel HEX of NSH
|
||
|
at the prompt. After the file is received, NSH should start
|
||
|
automatically.
|
||
|
|
||
|
At times the past, have have tested with nuttx.bin on an SD card and
|
||
|
booting with U-Boot. These are the commands that I used to boot NuttX
|
||
|
from the SD card:
|
||
|
|
||
|
U-Boot> fatload mmc 0 0x20008000 nuttx.bin
|
||
|
U-Boot> go 0x20008040
|
||
|
|
||
|
6. Board LEDs and buttons are supported as described under "Buttons and
|
||
|
LEDs". The interrupt button test is also enabled as an NSH built-in
|
||
|
commands. To run this test, you simply inter the command:
|
||
|
|
||
|
nsh>buttons [npresses]
|
||
|
|
||
|
The interrupt button test will log button press information to the
|
||
|
syslog. Since the RAMLOG is enabled, the SYSLOG output will be
|
||
|
captured to a circular buffer in ram and may be examined using the
|
||
|
NSH dmesg command:
|
||
|
|
||
|
nsh> buttons 2
|
||
|
nsh> dmesg
|
||
|
maxbuttons: 2
|
||
|
Attached handler at 200106f0 to button 0 [PB_USER], oldhandler:0
|
||
|
IRQ:81 Button 0:PB_USER SET:01:
|
||
|
PB_USER depressed
|
||
|
IRQ:81 Button 0:PB_USER SET:00:
|
||
|
PB_USER released
|
||
|
IRQ:81 Button 0:PB_USER SET:01:
|
||
|
PB_USER depressed
|
||
|
IRQ:81 Button 0:PB_USER SET:00:
|
||
|
PB_USER released
|
||
|
|
||
|
7. This configuration supports /dev/null, /dev/zero, and /dev/random.
|
||
|
|
||
|
CONFIG_DEV_NULL=y : Enables /dev/null
|
||
|
CONFIG_DEV_ZERO=y : Enabled /dev/zero
|
||
|
|
||
|
Support for /dev/random is implemented using the SAMA5D2's True
|
||
|
Random Number Generator (TRNG). See the section above entitled
|
||
|
"TRNG and /dev/random" for information about configuring /dev/random.
|
||
|
|
||
|
CONFIG_SAMA5_TRNG=y : Enables the TRNG peripheral
|
||
|
CONFIG_DEV_RANDOM=y : Enables /dev/random
|
||
|
|
||
|
8. This configuration has support for NSH built-in applications enabled.
|
||
|
No built-in applications are enabled, however.
|
||
|
|
||
|
9. This configuration has support for the FAT, ROMFS, and PROCFS file
|
||
|
systems built in.
|
||
|
|
||
|
The FAT file system includes long file name support. Please be aware
|
||
|
that Microsoft claims patents against the long file name support (see
|
||
|
more discussion in the top-level COPYING file).
|
||
|
|
||
|
CONFIG_FS_FAT=y : Enables the FAT file system
|
||
|
CONFIG_FAT_LCNAMES=y : Enable lower case 8.3 file names
|
||
|
CONFIG_FAT_LFN=y : Enables long file name support
|
||
|
CONFIG_FAT_MAXFNAME=32 : Arbitrarily limits the size of a path
|
||
|
segment name to 32 bytes
|
||
|
|
||
|
The ROMFS file system is enabled simply with:
|
||
|
|
||
|
CONFIG_FS_ROMFS=y : Enable ROMFS file system
|
||
|
|
||
|
The ROMFS file system is enabled simply with:
|
||
|
|
||
|
CONFIG_FS_PROCFS=y : Enable PROCFS file system
|
||
|
|
||
|
10. The Real Time Clock/Calendar (RTC) is enabled in this configuration.
|
||
|
See the section entitled "RTC" above for detailed configuration
|
||
|
settings.
|
||
|
|
||
|
The RTC alarm is not enabled by default since there is nothing in
|
||
|
this configuration that uses it. The alarm can easily be enabled,
|
||
|
however, as described in the "RTC" section.
|
||
|
|
||
|
The time value from the RTC will be used as the NuttX system time
|
||
|
in all timestamp operations. You may use the NSH 'date' command
|
||
|
to set or view the RTC as described above in the "RTC" section.
|
||
|
|
||
|
NOTE: If you want the RTC to preserve time over power cycles, you
|
||
|
will need to install a battery in the battery holder (J12) and close
|
||
|
the jumper, JP13.
|