Multi-purpose Embedded System

From OpenCircuits
Revision as of 01:41, 12 August 2009 by Tcwden (talk | contribs) (update ic links)
Jump to navigation Jump to search

This project intends to provide ideas and technical information to create a multi-purpose embedded system.

  • Information contained in this wiki should be as generic as possible (unless otherwise stated) so that the ideas and information can be portable to different hardware (e.g. 8-bit/16-bit/32-bit MCU).
  • The peripheral devices should be expandable

Hardware Architecture

Mpes hw archi.png

MCU

  • MCU can be 8-bit/16-bit/32-bit
  • MCU should have sufficient RAM (i.e. no external RAM required)
  • MCU should have program Flash (i.e. no external program flash required)


Data Memory

  • Use serial bus (I2C/SPI) to expand data memory to save I/O pins
  • Need a file system to access the data
  • EEPROM for small block of re-writable data
  • Flash for large block of re-writable data


Communication

  • RS232 for short distance communication with PC
  • RS485 for longer distance communication (upto 1200m) over a set of devices
  • USB for USB communication with PC
  • Ethernet for Internet connectivity
    • Use of Ethernet controller (e.g. DM9000A (requiring software TCP/IP stack)
    • User of TCP/IP chip (e.g. W5300)
  • GPIB for automated test equipment


User Interface

  • Graphical displays (LCD, VFD, etc.)
  • Keypad for input


Sensory Control

  • ADC for analog feedback signals
    • Requires anti-aliasing analog filters and op-amp circuits
      • Use desktop software (e.g. FilterLab) to design circuits
    • May incorporate digital filter to improve reduce noise
  • DAC for analog control signals
    • Refer to here if modulation is needed.
  • GPIO for digital feedback and control signals
    • Option 1: directly controlled by MCU
    • Option 2: indirectly through D-type flip-flops (e.g. 74LV574) for low pin counts MCU
    • Option 3: indirectly through shift register flip-flops (e.g. 74LV165 for input, TPIC6595 or 74LV595 for output ) for extremely low pin count MCU


Software Architecture

RTOS

               +-----------+-----------+----------------------------------------------+
 Application   |  Task 1   |  Task 2   |    ...                                       |
               +-----------+-----------+------------+----------------------+----------+
 Standard API  |          POSIX System Call         |     POSIX Thread     |  C-Lib   |
               +------------------+-----------------+----------------------+----------+
   Kernel      | Power Management |                 |    Task Scheduler    |
               +------------------+                 +----------+-----------+ 
               |               Drivers              | FreeRTOS | Coroutine |
               +------+-----+-----+-----+-----+-----+----------+-----------+
   Hardware    | UART | ADC | DAC | NVM | PWM | ... |  TIMERS  | 
               +------+-----+-----+-----+-----+-----+----------+
  • The task scheduler is based on FreeRTOS incorporating coroutine developed by Simon Tatham. The scheduler API is wrapped by the POSIX Thread API.
    • e.g. pthread_create(), usleep(), etc.
  • Software drivers are developed to allow users at Application Level to use the hardware (e.g. ADC, DAC, UART, NVM etc) through the POSIX System call API.
    • e.g. open(), write(), read(), ioctl(), lseek(), etc.
  • The most up-to-date development can be found at repository freertos_posix


GUI

                      +---------------+----------------+
 User Applications    | Application 1 | Application 2  |
                      |               +----------------+------------------+
   Middlewares        |               |    Toolkits    |  Window Manager  |
                      +---------------+----------------+------------------+
   GUI Library        |            Graphics Engine (inc Font)             |
                      +-----------+----------------------+----------------+
   POSIX API          |           |  POSIX System Calls  | POSIX Threads  |
                      |           +-----------+----------+----------------+
 Drivers & Scheduler  |  Display  |  Pointer  |  Keypad  | Task Scheduler |
                      +-----------+-----------+----------+----------------+


TCP/IP Stack

                  +---------------------------------------------+--------------------+-------+
 Applications     |            Ethernet Application             |  GUI Application   |  ...  |
                  +--------+------+------+----------+------+----+                    |       |
 Web Libraries    |  Web   | DHCP | SNMP |   DNS    | SMTP |... |                    |       |
                  | Server |      |      | Resolver |      |    |                    |       |
                  +--------+------+------+----------+------+----+                    |       |
 Socket API       |            Linux Socket Wrapper             |                    |       |
                  |          +----------------------------------+                    |       |
 TCP/IP Stack     |          |               uip                |                    |       |
                  |          +----------------------------------+                    |       |
                  |          |       Ethernet Thread            |                    |       |
                  |          +---------------------------+------+--------------------+-------+
 POSIX API        |          |    POSIX System Calls     |            POSIX Threads          |
                  +----------+---------------------------+-----------------------------------+
                  |               Drivers                |            Task Scheduler         |
                  +----------+---------------------------+-----------------------------------+
                  |   H/W    |
                  |  TCP/IP  |
                  |  Stack   |
                  +----------+


File System

                 +------------+------------+------------+------------+------------+------------+
Application      |   App 1    |   App 2    |   App 3    |   App 4    |   App 5    |   App 6    |
                 +------------+------+-----+------------+------------+------------+------------+
POSIX API        |          POSIX System Calls          |            POSIX Threads             |
                 +--------------------+                 |                                      |
                 |   FatFs Wrapper    |                 |                                      |
                 +--------------------+                 |                                      |
File System      |       FatFs        |                 |                                      |
                 +--------+-----+-----+-----------------+--------------------------------------+
                 | EEPROM | MMC | USB |    Drivers      |            Task Scheduler            |
                 +--------+-----+-----+-----------------+--------------------------------------+
  • See here for description
  • Example:
 +--------------------------------------------+
 | POSIX              fopen()                 |
 |                       |                    |
 |                      \|/                   |
 |                      open()                |
 |                       |                    |
 |                      \|/                   |
 +--------------------------------------------+
 | FatFs Wrapper    fatfs_open()              |
 |                       |                    |
 |                      \|/                   |
 +--------------------------------------------+
 | FatFs              f_open()                |
 |                       |                    |
 |                      \|/                   |
 |                disk_initialize()           |
 |                       |                    |
 |                      \|/                   |
 +--------------------------------------------+
 | EEPROM         i2c_eeprom_open()           |
 +--------------------------------------------+