Input/Output Processor

Linux brings a great deal of capability to the party, especially with regards to networking and USB support. But one thing Linux systems, including the Raspberry Pi, lack: microsecond I /O (input/output) signal timing resolution. The multiuser, multitasking, virtual memory foundation of Linux simply prevents it from responding to or timing external events with predictable microsecond resolution.
Some interesting projects that would require microsecond timing resolution include:
• IR (Infrared) remote control protocols;
• DCC (Digital Command Control) for model railroads;
• Ultrasonic ranging .
The other capabilities of Linux are so compelling that attempts have been made from time to time to graft in real time support. None of these have been particularly successful, at least in terms of “mind share”. But fortunately there is another way: the I /O processor.



I/O Processor
An I /O Processor is simply a separate computer dedicated to I /O operations, usually acting as a slave to the “main” or “real” processor. The I /O processor runs its own software, separate from the main processor. Depending on the implementation, the I /O processor software may or may not be alterable from the main processor.

The I /O processor idea is not new. The IBM 7094 mainframe computer of 1 962 could use a 7044 computer for all I /O. Processing was performed on the 7094 and I /O done on the 7044. Even the original IBM PC, released in 1 981 , had an 8048 8-bit microcontroller in the keyboard to handle key press timing. Today, the I /O processor idea has been pushed all the way down to single chip systems: The NXP LPC4300, itself a single chip ARM Cortex-M4 microcontroller, includes a separate ARM Cortex-M0 microcontroller, for real time processing, on the same chip.