Multi-purpose Embedded System

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

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

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  | +--+-+-+-+-+-+--+
 * See here for description

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   | +--+
 * See here for description

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