The CFA-910 SD Card Boot Process

Not open for further replies.

CF Support

The boot process to load Linux for a CFA-910 is 4 steps. Showing these steps will help explain how the CFA-910 loads Linux and how the pieces fit together.

Step 1: ROM Boot Loader

The processor of the CFA-910 is an AT91SAM9G45. This processor has an internal ROM boot loader that can boot from several sources. For this product we use its SD card booting capability. The CFA-910 boots from a FAT filesystem on the provided microSD card. It looks for a file named BOOT.BIN and loads that into the AT91SAM9G45's internal RAM to start our boot process.

Step 2: BOOT.BIN

We provide this small binary boot loader in order to load U-Boot and its configuration environment. BOOT.BIN initializes the system's 128MB of DDR2 SDRAM and then loads UBOOT.BIN and UBOOT.ENV from the FAT filesystem on the microSD card into the SDRAM. Then it runs the Das U-Boot code contained in UBOOT.BIN.

Step 3: Das U-Boot

Das U-Boot is a very powerful boot loader capable of booting from many sources including but not limited to SD cards or over Ethernet via DHCP/BOOTP/TFTP. SD Card booting is compiled into our version of U-Boot and it is our default boot method. UBOOT.ENV is a text file of key-value pairs that configure Das U-Boot to load the Linux kernel from an Ext2 filesystem on the microSD card. UBOOT.ENV also contains parameters that are passed to the Linux Kernel.

Step 4: Linux Kernel

After Das U-Boot loads the kernel and parameters it executes the kernel code. The Linux kernel is now running.
Looking for additional LCD resources? Check out our LCD blog for the latest developments in LCD technology.

CF Support

Supported microSD Cards

Known limitations:

Booting from 2 GB microSD cards does not function is many cases. There is a support issue with the AT91SAM9G45 processor's ROM code reading the BOOT.BIN file on a 2 GB SD cards properly.

You are advised not to use 2 GB microSD cards to boot the system.

There are no known issues with other sizes of microSD cards. We have tested 1 GB, 4 GB, 8 GB, and 32 GB successfully.

CF Support

Enabling Additional Ports on the Expansion Connector (Serial, I2C, SPI)

In order to facilitate removal of debug board and leaving the exposed processor pins in a safe state, some of the expansion ports are disabled by default. The disabled ports are not enabled in the software and their pins are left as PIO controlled and internally pulled-up. Those ports can be enabled at boot; see below for details. Additionally modifications to the board source file can be made to the kernel. See "arch/arm/mach-at91/board-cfa10022.c" for implementation of the options.

The serial ports known as "SERIAL TTY1" and "SERIAL TTY2" on the debug board (also known as AT91SAM9G45 serial ports 1 and 2) ship disabled. The SPI port with its 4 chip selects ships disabled.

Since the I2C specification requires pull-ups on its lines, that port and its pins are alway enabled.

The serial port "CONSOLE TTY0" on the debug board (AT91SAM9G45 debug serial port) ships enabled as most users want that and Linux requires a default console. If you are using the CFA910 without a debug board and nothing hooked to pins 31 and 32 of the expansion connector, it is recommended that you use the BOOT.BIN from the attached "quiet_boot.tar.gz" to leave the AT91SAM9G45 pins for DRXD and DTXD connected to the PIO controller and pulled-up. The port will still be enabled to meet Linux's needs but it will not be exposed to its pins.

To enabled the additional serial ports or the SPI port a parameter can be passed to the kernel with a mask for which ports to enable. The kernel arguments are in the "UBOOT.ENV" text file on the FAT partition of the microSD card; they are in the "bootargs" variable.

Append the string "board_cfa10022.exp_mask=0xZ" to the "bootargs" line and replace Z with the mask of peripherals you wish to enable.
Bit 0: Debug board SERIAL TTY1, AT91SAM9G45 Serial 1
Bit 1: Debug board SERIAL TTY2, AT91SAM9G45 Serial 2
Bit 2: SPI port and pins, AT91SAM9G45 SPI0

Example to enable both serial ports and the SPI port:
bootargs=mem=128M root=/dev/mmcblk0p2 rootdelay=3 tps65180.vcom_neg_mv=1360 ltc3576.regulator_settings=0xcee0 board_cfa10022.exp_mask=0x7
Note: if you only enable one serial port, no matter which serial port you enable it will show up as "/dev/ttyS1" under Linux as it is the next serial port.


Not open for further replies.