Learn to Design your own OS booting ARM board by Robert Feranec Schematic & PCB Design Courses Check our website at: http://www.fedevel.com/academy/
About this presentation
Projects Year 2002 Year 2013
What is important when starting a new ARM design? ARM Designs are complex Reference schematics PCB files Documentation Software Community
Selecting components for a board running an operating system Software Compatibility
Tips for ARM Schematic design
PCB Stackup & Impedances
PCB Stackup & Impedances Standard single ended impedance: 50 or 55 Ohms +/-15% AMD Intel 1 Intel 2 Freescale PCIE /85 48/85 /95 /85 HDMI /85 48/85 /100 LVDS /85 48/85 /95 /100 SATA 50/90 /100 USB 48/85 45/90
PCB Stackup & Impedances
DDR3 layout and length matching
T-branch vs. Fly-by
DDR3 read / write leveling
Memory length matching spreadsheet
Memory layout example in Altium Download free imx6 DDR3 Layout example from our open source project called imx6 Rex Go to: http://www.imx6rex.com/
How to setup a machine for ARM code compilation Prepare your machine for SDK installation Install a Software Development Kit Install other things you may need Compile original source codes
How to compile bootloader Freescale make ARCH=arm CROSS_COMPILE=/opt/freescale/usr/lo cal/gcc-4.6.2-glibc-2.13-linaro-multilib- 2011.12/fsl-linaro-toolchain/bin/armnone-linux-gnueabi- distclean make ARCH=arm CROSS_COMPILE=/opt/freescale/usr/lo cal/gcc-4.6.2-glibc-2.13-linaro-multilib- 2011.12/fsl-linaro-toolchain/bin/armnone-linux-gnueabi- mx6q_rex_config make ARCH=arm CROSS_COMPILE=/opt/freescale/usr/lo cal/gcc-4.6.2-glibc-2.13-linaro-multilib- 2011.12/fsl-linaro-toolchain/bin/arm- none-linux-gnueabi- Texas Instruments $ make CROSS_COMPILE=arm-nonelinux-gnueabi- ARCH=arm distclean $ make CROSS_COMPILE=arm-nonelinux-gnueabi- ARCH=arm ti8168_evm_config_spi $ make CROSS_COMPILE=arm-nonelinux-gnueabi- ARCH=arm u-boot.ti
How to modify bootloader Make a copy of the board directory, as shown below. Rename and update files: $cp -R board/freescale/mx6_<reference board name> board/freescale/mx6_<custom board name> Make a copy of the config file. Update: $cp include/configs/mx6_<reference board name>.h include/configs/mx6_<custom board name>.h You should pay attention to the following e.g.: Memories, NAND, Ethernet, Update Makefile
How to modify bootloader
Bootloader compilation example
Bootloader commands Flashing Kernel to NAND dhcp setenv serverip 192.168.0.22 mw.b 0x81000000 0xFF 0x280000 tftp 0x81000000 uimage nand erase 0x00280000 0x00280000 nand write 0x81000000 0x00280000 0x280000 Flashing uboot to SPI via Serial Console mw.b 0x10800000 0xFF 0x80000 loadb sfprobe 3:2 sf erase 0x0 0x80000 sf write 0x10800000 0x0 0x80000 Bootargs setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs ip=dhcp nfsroot=192.168.0.86:/home/fedevel/ltib/root fs,v3,tcp'
How to build a Linux Kernel Freescale make ARCH=arm CROSS_COMPILE=/opt/freescale/usr/lo cal/gcc-4.6.2-glibc-2.13-linaro-multilib- 2011.12/fsl-linaro-toolchain/bin/armnone-linux-gnueabi- distclean make ARCH=arm CROSS_COMPILE=/opt/freescale/usr/lo cal/gcc-4.6.2-glibc-2.13-linaro-multilib- 2011.12/fsl-linaro-toolchain/bin/armnone-linux-gnueabi- imx6_defconfig make ARCH=arm CROSS_COMPILE=/opt/freescale/usr/lo cal/gcc-4.6.2-glibc-2.13-linaro-multilib- 2011.12/fsl-linaro-toolchain/bin/armnone-linux-gnueabi- uimage Texas Instruments $ make CROSS_COMPILE=arm-nonelinux-gnueabi- ARCH=arm distclean $ make CROSS_COMPILE=arm-nonelinux-gnueabi- ARCH=arm ti8168_evm_defconfig $ make CROSS_COMPILE=arm-nonelinux-gnueabi- ARCH=arm uimage
How to prepare a File system
How to prepare a File system wget http://voipac.com/downloads/imx/25/bin/rootfs-nfs-bb-1-17-vmx25-vmx25- vpac3.tar.gz sudo tar xvf rootfs-nfs-bb-1-17-vmx25-vmx25-vpac3.tar.gz sudo gedit rootfs-bb-1-17-final2/etc/inittab change from: ::respawn:/sbin/getty -L ttymxc0 115200 vt100 ::respawn:/sbin/getty -L tty1 115200 to #::respawn:/sbin/getty -L ttymxc0 115200 vt100 ::respawn:/sbin/getty -L ttyo2 115200 //use correct console number: for standard EZSDK board use: ttyo2 then Save and Close Make the image mkfs.jffs2 -lqn e 128 -r rootfs-bb-1-17-final2/ -o /tftpboot/rd-jffs2.bin
Steps to bring your board to life Tip: Mark each board with a sticker and a number Step 1: Visual inspection Step 2: Measure impedance on power rails Step 3: Connect power supply for the very first time Step 4: Check component temperature Step 5: Measure all the on board voltages Step 6: Measure crystals and oscillators Step 7: Upload firmware Step 8: Connect Console
Freescale DDR3 calibration Texas Instruments
Board testing and HW verification
Thank you. Any questions? Contact: robert.feranec@fedevel.com Check our Schematic & PCB Design Courses here: http://www.fedevel.com/academy/