ELF Hosted at SourceForge


  • sdfirm forum
  • sdfirm code
  • sdfirm bugs
  • sdfirm files
  • Documentations

  • sdfirm blog
  • sdfirm wiki
  • Specifications
  • Datasheets
  • Distributions

  • Source codes
  • Binary releases
  • Appliances
  • Mailing Lists

  • sdfirm developers
  • sdfirm users
  • Latest updates

    A simple initial codes (a MCS51 keyboard and an AVR led samples) has been published here:

    The latest source codes release has been published here:

    The first source codes release has been published here:

    This is the first stable release (v1.0.0) of sdfirm.

  • 1. USB: Including full USB device protocol stack.
  • 2. SCS: Including full ISO7816 protocol stack.
  • 3. SCSI: Including full USB/MSD protocol stack.
  • 4. HID: Including full USB/HID protocol stack and a keyboard report protocl stack.
  • 5. Time: Including tickless and hard-realtime-tick support.
  • 6. DFU: Windows DFU driver is well completed. As bootloader facilities are not implemented in the firmware, DFU mode is not functioning in the firmware for this release.
  • 6. MCS51: MCS51 is compiled using SDCC. The loader code is linked from SDCC which might not be adequate for some boards.
  • 7. AVR: AVR is compiled using GCC, with a full link script support.
  • 8. ARM: ARM is compiled using GCC, with a full link script support.
  • 9. toolchains: There are simple toolchain generation scripts attached in the arch specific script folder.
  • 10.external packages: There are tow external projects' source code embedded in this release: libusb-win32, libnfc. You can find them in the scripts/libusb, scripts/libnfc, scripts/usbstub folders.
  • Welcome to sdfirm by ELF!

    The ELF (Embedded Linux Force) aims to bring embedded developers embedded innovations. sdfirm is one of its projects.

    The project sdfirm is abbrieviated for Small Device Firmware.
    It was started to build a firmware for a MCS51 chip (AT89C5122). Compiled with sdcc, we call it sdfirm. In the next step, sdfirm was ported to AVR chips (AT90USB1287 & AT90SCR100) with the gcc compiler support. Recently, sdfirm has been ported to ARM Cortex-M3 chips (LM3S9B92) with EABI gcc compilation support.
    Unlike other small device firmware architecture (sdcc or avr-libc), sdfirm does not require a libc to be linked. There is no complete multi-tasking support in the firmware (though you could find one in the AVR architecture support), but timing facilities are carefully implemented. Note that, sdfirm is also designed to be high idle residency firmware, thus is a very good demonstration as a low power consumption implementation. In its task context (foreground), only idle is executed, while every functionality is executed in its IRQ context (background).

    Our mission is to add following features for this firmware, others are left for you to extend:

  • 1. supported architectures
  • 1.1. MCS51 support with SDCC compiler
  • 1.2. AVR support with GCC compiler
  • 1.3. ARM support with GCC EABI compiler
  • 2. supported simulators
  • 2.1. OpenOCD configuration for some boards
  • 3. timing facilities (delay, timer, jiffies)
  • There are tow kinds of timing devices supported:
  • 3.1. TSC (like linux's clock source device)
  • 3.2. GPT (like linux's clock event device)
  • 3.3. IRQ/BH context timeout event
  • Following timing features are not yet implemented:
  • 3.4. realtime time axis (not supported due to lack of RTC and usable TSC)
  • 4. background scheduler BH (like linux's soft IRQ)
  • 5. USB device protocol stack
  • Following USB features are implemented:
  • 5.1. control endpoint
  • 5.2. bulk/interrupt endpoints
  • 5.3. pipe halting (reset recovery, unhalt recovery)
  • 5.4. synchronous/asynchronous pipe IO
  • Following USB features are not yet implemented:
  • 5.5. buffering (global single buffering, local single buffering, local double buffering)
  • 5.6. isochronous endpoints
  • 5.7. bi-directional endpoints
  • 6. Smart card interface devices protocol stack
  • Following IFD features are implemented:
  • 6.1. ISO7816-3 support
  • 6.1.1. protocols: T=0, T=1
  • 6.1.2. exchanges: TPDU level, short APUD level
  • 6.1.3. auto sequences
  • 6.2. USB CCID and ICCD support
  • Following IFD features are not yet implemented:
  • 6.3. ISO7816-4 support
  • 6.4. ISO14443 support
  • 6.5. ISO18092 support
  • 7. SCSI device protocol stack
  • Following SCSI features are implemented:
  • 7.1. SAM and SPC support
  • 7.2. SBC support
  • 7.3. USB MSD support
  • There are still needs for performance tuning on MTD devices.
  • 8. Networking
  • This has been in the plan for months, but not yet implemented.

    This project is released under GPLv2. Sponsors and developers are welcome to contribute.

    Copyright © 2012, The Embedded Linux Force (ELF)