Embedded platform choices
-
Upload
tavish-naruka -
Category
Technology
-
view
179 -
download
2
description
Transcript of Embedded platform choices
Embedded platform choices
Tavish NarukaBaseApp Systems
Microcontroller or linux platform?Or both?
When prototyping
OR
System which uses only microcontrollers to function
System which has a linux cpu (may have microcontrollers too)
Working with microcontrollers
● First step is component selection○ Does the controller have all the interfaces required○ Voltage range, cost, memory sizes(flash and ram)○ Familiarity with the architecture, supported software,
documentation, even community○ debugger/programmer, toolchain○ Is some development kit available? If not, then can
you make a pcb for prototyping yourself? Maybe someone has published a design using this online
Some popular choices
● AVR is probably most popular due to arduino.
● PIC family of microcontrollers is also popular● ST microelectronics
● has a few not too expensive dev kits● TI MSP
Some dev kits
STM32F4 discovery Olimex PIC32-T79
MSP launchpad
Pinguino PIC32
Parallax propeller 8 core
Firmware
● Most code is in C, or assembly. sometimes C++
● compilers and chip makers often provides driver libraries and example code for things like USB, TCP/IP stack, and other peripherals
● The reference manual is usually a reference for a family of similar chips, and the datasheet is the ultimate reference
ARM Cortex M3 memory map
Peripherals and clocks on an STM ARM cortex m3 chip
● Input voltages● Memory layout● How does it boot● How do interrupts work in this chip● System clocks● Details about any peripherals you want to
use like USB, SPI, serial, DMA, timers etc.
Things to read in the manuals
Difference between bare metal and hosted programs
● Userspace programs running inside an operating system are hosted
● Code running on a microcontroller, (and linux kernel) are compiled for a freestanding environment. You (or mostly the compiler) provides C ‘runtime’
● C startup =○ Initialize stack, cannot use variables without it
(mostly), or call functions○ copy values to Initialized variables’ locations in RAM○ initialize globals to 0○ Copy read only data like strings to RAM
Why memory layout is important
● There is a well defined way how a chip boots, might start executing from a particular location
● Peripherals are memory mapped● Interrupt handlers, are locations reserved for function
pointers in some● If you want a bootloader, then the application code must
not have any portion located in flash occupied by bootloader
● This is done using linker scripts● The C startup code used locations exported by the
linker script to know where from/to copy or paste code
Why microcontrollers
● Small codebase, everything can be controlled● Instant on● Real-time behavior● Low power● Less supporting hardware● cheap● Low level things are easier to tweak than on linux
Why not microcontrollers
● limited choice of languages, toolchain● debugging can be difficult● File Systems, networking, graphics etc.
These things may be done on some microcontrollers, but with a lot more effort than if using linux
● application portability to a different system
Embedded linux platform
● Embedded, because its not general purpose, unlike a desktop
● Platform, because it can carry payload of your application, and become whatever specific purpose system you design it to be
Hardware
● Linux supports many architectures x86, x86_64, ARM, MIPS, powerpc, AVR32 etc.
● Not designed for small microcontrollers● RAM requirement depends on application,
but on a minimum is around 8MB
Where to get
● Evaluation board from chip manufacturer
AM335x starter kit from TI
cont..
● System on module
AM3352 SOM from olimex Carambola SOM placed on board
cont..
● Or designs/products by open hardware community● Could be from chip makers(like beaglebone from TI),
companies releasing usable boards(like A13 olinuxino from olimex)
● custom design
Allwinner A13 olinuxino iMX233 Locux BaseApp BeagleBone Black
cont..
● Consumer devices
A Router running linux
Belkin W
emo sw
itch
Smartphones
Smart tv
And lots of industrial Systems
Kindle
● Some ways to create a linux system(root filesystem) are ○ [Yocto project, openembedded, angstrom] ○ [Buildroot, Openwrt]○ debian debootstrap○ Can use full featured distros too, like debian(without
desktop environment)● Sometimes need to optimize for space/speed
○ provide common tools using busybox○ simpler init, only necessary programs run on boot○ only required drivers in kernel○ compressed fs like squashfs
Making a linux system for an embedded platform
Linux system boot process● (not x86)● first instructions execute a bootloader from
ROM which loads another bootloader, or sometimes linux kernel itself
● The bootloader loads the kernel, passes it kernel command line(can be hard coded in kernel image too)
● after loading, it jumps to the kernel’s entry point
● kernel command line option ‘rootfs’ is mounted
cont..
● After mounting rootfs, kernel looks for init program, which becomes the first process, and all other processes spawn from it.
● kernel loads modules as required● Usually init would be a standard program, like
○ systemV init○ systemd(debian uses this)○ upstart(ubuntu)○ busybox provided sysV init(common in embedded
systems to conserve space)● Init parses its init scripts to launch programs as required
● Suppose you need character LCD, keypad, CD ROM, SD card, network, USB hard disk
● Choose linux platform which is most suitable○ Needs USB, ethernet, fast enough
● Decide to use serial port to connect to a microcontroller, which connects to LCD and keypad
● If only one USB port, put usb hub● Linux has drivers for serial(for this particular
cpu), usb-storage(both hard disk and SD card), and usb CD ROM
Example application
cont..
● Program microcontroller so that it accepts commands for LCD on serial RX, sends keypad presses on serial TX
● Choose python to write application● Can mount/unmount hard disk/SD card(usb
mass storage) and cd-rom with mount/umount
● can use eject to open tray● can write to serial port with say pyserial● can access network easily