0f0a94186f
migrate the toolchain define to arch/arm/Kconfig to simplify new toolchain registration Signed-off-by: chao an <anchao@xiaomi.com>
964 lines
36 KiB
Plaintext
964 lines
36 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
|
|
========
|
|
|
|
- STATUS
|
|
- Loading Code into SRAM with J-Link
|
|
- DRAMBOOT, AT25BOOT, SRAMBOOT
|
|
- Running NuttX from SDRAM
|
|
- Buttons and LEDs
|
|
- Serial Console
|
|
- SAMA5D2-XULT Configuration Options
|
|
- Configurations
|
|
|
|
STATUS
|
|
======
|
|
|
|
1. Most of this document is a partially corrected clone of the SAMA5D4-EK
|
|
README.txt and still contains errors and inconsistencies.
|
|
|
|
2. Coding is complete for the basic SAMA5D2-XULT NSH configuration, but
|
|
is completely untested as of this writing (2015-09-15). The primary
|
|
issue is that I have not yet determine how to load and test code.
|
|
|
|
Loading Code into SRAM with J-Link
|
|
==================================
|
|
REVISIT: Unverified, cloned text from the SAMA5D4-EK README.txt
|
|
|
|
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 ...
|
|
|
|
DRAMBOOT, AT25BOOT, SRAMBOOT
|
|
----------------------------
|
|
|
|
See also boards/arm/sama5/sama5d4-xult/README.txt for a description of the DRAMBOOT
|
|
program. This is a tiny version of NuttX that can run out of internal
|
|
SRAM. If you put this program on the HSMCI1 microSD card as boot.bin, then
|
|
it will boot on power up and you can download NuttX directly into DRAM by
|
|
sending the nuttx.hex file over the serial connection.
|
|
|
|
The boards/arm/sama5/sama5d4-xult/README.txt also describes variants AT25BOOT and
|
|
SRAMBOOT. This have not yet been ported to the SAMA5D2-XULT, but are
|
|
available if they are useful too you.
|
|
|
|
Running NuttX from SDRAM
|
|
========================
|
|
REVISIT: Unverified, cloned text from the SAMA5D4-EK README.txt
|
|
|
|
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.
|
|
|
|
- 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 environment 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 binary 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 via 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 (PB6), is available on the SAMA5D2-XULT
|
|
|
|
------------------------------ ------------------- -------------------------
|
|
SAMA5D2 PIO SIGNAL USAGE
|
|
------------------------------ ------------------- -------------------------
|
|
PB6 USER_PB_PB6 PB_USER push button
|
|
------------------------------ ------------------- -------------------------
|
|
|
|
Closing PB_USER will bring PB6 to ground so 1) PB6 should have a weak pull-up,
|
|
and 2) when PB_USER 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
|
|
==============
|
|
|
|
DEBUG / DBGU Port (J1). There is a TTL serial connection available on
|
|
pins 2 and 3 of the DEBUG connector. This may be driven by UART1,
|
|
depending upon the setting of JP2 (DBGU_PE on the schematic, DEBUG_DIS
|
|
on the board):
|
|
|
|
---- ------------------------ -------------
|
|
J1 SCHEMATIC SAMA5D2
|
|
PIN NAME(s) PIO FUNCTION
|
|
---- ------------------------ -------------
|
|
2 DBGU_TXD DBGU_UTXD1_PD3 PD3 UTXD1
|
|
3 DBGU_RXD DBGU_URXD1_PD2 PD2 URXD1
|
|
---- ------------------------ -------------
|
|
|
|
Standard UART on Arduino connector (J21) is FLEXCOM4.
|
|
Terminology: FLEXCOM is the same as USART in previous SAMA5D versions.
|
|
|
|
---- ------- -------------
|
|
J21 BOARD SAMA5D2
|
|
PIN NAME PIO FUNCTION
|
|
---- ------- -------------
|
|
7 F4_TXD PD12 FLEXCOM4
|
|
8 F4_RXD PD13 FLEXCOM4
|
|
---- ------- -------------
|
|
|
|
Other USARTs are available on J22:
|
|
|
|
---- ------- -------------
|
|
J22 BOARD SAMA5D2
|
|
PIN NAME PIO FUNCTION
|
|
---- ------- -------------
|
|
3 F0_TXD PB28 FLEXCOM0
|
|
4 F0_RXD PB29 FLEXCOM0
|
|
5 F3_TXD PB23 FLEXCOM3
|
|
6 F3_RXD PB22 FLEXCOM3
|
|
---- ------- -------------
|
|
|
|
UARTs available of EXT1
|
|
|
|
---- ------- -------------
|
|
EXT1 BOARD SAMA5D2
|
|
PIN NAME PIO FUNCTION
|
|
---- ------- -------------
|
|
13 UART_RX PA23 FLEXCOM1
|
|
14 UART_TX PA24 FLEXCOM1
|
|
---- ------- ---- --------
|
|
|
|
UARTs available of EXT2
|
|
|
|
---- ------- -------------
|
|
EXT2 BOARD SAMA5D2
|
|
PIN NAME PIO FUNCTION
|
|
---- ------- -------------
|
|
13 UART_RX PB29 FLEXCOM0
|
|
14 UART_TX PB28 FLEXCOM0
|
|
---- ------- ---- --------
|
|
|
|
By default, the standard UART on Arduino connector (J21, FLEXCOM4) is
|
|
enabled in all of these configurations unless otherwise noted.
|
|
|
|
REVISIT: UART1 on the DBGU connect might be a better choice for the
|
|
default serial console
|
|
|
|
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 boards/ 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.
|
|
|
|
Individual subsystems can be enabled:
|
|
REVISIT: Unverified, cloned text from the SAMA5D4-EK README.txt
|
|
|
|
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_FLEXCOM0 - Flexcom 0
|
|
CONFIG_SAMA5_FLEXCOM1 - Flexcom 0
|
|
CONFIG_SAMA5_FLEXCOM2 - Flexcom 0
|
|
CONFIG_SAMA5_FLEXCOM3 - Flexcom 0
|
|
CONFIG_SAMA5_FLEXCOM4 - Flexcom 0
|
|
CONFIG_SAMA5_UART0 - UART 0
|
|
CONFIG_SAMA5_UART1 - UART 1
|
|
CONFIG_SAMA5_UART2 - UART 2
|
|
CONFIG_SAMA5_UART3 - UART 3
|
|
CONFIG_SAMA5_UART4 - UART 4
|
|
CONFIG_SAMA5_TWI0 - Two-Wire Interface 0
|
|
CONFIG_SAMA5_TWI1 - Two-Wire Interface 1
|
|
CONFIG_SAMA5_SDMMC0 - SD MMC card interface 0
|
|
CONFIG_SAMA5_SDMMC1 - SD MMC 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_USART0_SERIALDRIVER - Flexcom0 is configured as a UART
|
|
CONFIG_USART1_SERIALDRIVER - Flexcom1 is configured as a UART
|
|
CONFIG_USART2_SERIALDRIVER - Flexcom2 is configured as a UART
|
|
CONFIG_USART3_SERIALDRIVER - Flexcom3 is configured as a UART
|
|
CONFIG_USART4_SERIALDRIVER - Flexcom4 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:
|
|
|
|
tools/configure.sh sama5d2-xult:<subdir>
|
|
|
|
Before building, make sure the PATH environment variable includes 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_ARM_TOOLCHAIN_GNU_EABI=y : GNU EABI toolchain
|
|
|
|
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:
|
|
|
|
netnsh:
|
|
|
|
This is a network enabled configuration based on the NuttShell (NSH).
|
|
The CDC-ECM driver is enabled, so you can plug a USB cable into the
|
|
USB-Micro port (USB-A) and the board will appear as an CDC-ECM
|
|
ethernet adapter.
|
|
|
|
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 UART1 (PD2 and PD3) for the serial
|
|
console. USART1 is available at the "DBGU" RS-232 connector (J24).
|
|
This 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 ARM supported
|
|
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_EABIW=y : Generic GCC EABI toolchain 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:
|
|
https://cwiki.apache.org/confluence/display/NUTTX/SYSLOG . Relevant
|
|
configuration settings are summarized below:
|
|
|
|
File System:
|
|
|
|
Device Drivers:
|
|
CONFIG_RAMLOG=y : Enable the RAM-based logging feature.
|
|
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 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 NOTICE 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 PROCFS 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.
|
|
|
|
sdmmcnsh:
|
|
|
|
This is a configuration based on the NuttShell (NSH). The SDMMC
|
|
peripheral is enabled, and can read and write to a VFAT filesystem
|
|
on the SD Card.
|
|
|