Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Emedded platform choices

Emedded platform choices

Tavish Naruka

November 21, 2013
Tweet

More Decks by Tavish Naruka

Other Decks in Technology

Transcript

  1. System which uses only microcontrollers to function System which has

    a linux cpu (may have microcontrollers too)
  2. 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
  3. 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
  4. 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
  5. • 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. cont.. • Consumer devices A Router running linux Belkin Wemo

    switch Smartphones Smart tv And lots of industrial Systems Kindle
  14. • 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
  15. 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
  16. 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
  17. • 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
  18. 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