Home
If the link above doesn't work, you can try
reading comp.arch.embedded via Google.
Embedded systems defined
An embedded computer is one that is 'embedded' inside
another product. The end-user of the larger product may not even be
aware that it contains a computer (though, ironically, many people
have now heard of embedded systems from the Y2K hysteria).
Embedded systems are used in instruments and to control machinery.
Devices around the home that may contain embedded controllers include:
- Entertainment electronics: stereos, VCRs, televisions
- PC: keyboard, keyboard controller, mouse, CD-ROM drive, hard drive, modem
- Automatic setback thermostat
- Telephone: answering machines, phones, cellular phones
- Automobile: engine controller, stereo
Where are embedded systems tutorials/glossaries/FAQs?
Magazines:
- Electronic Engineering Times, a fascinating weekly:
http://www.eet.com. Free to
'qualified' subscribers.
- Circuit Cellar Ink:
http://www.circellar.com. I don't know if it's possible to get
this magazine for free.
- Embedded Systems Programming (ESP):
http://www.embedded.com
They seem to be very particular about who gets the free subscriptions...
Chips
Programmable logic (PALs, GALs, FPGAs, PLDs)
Ethernet chips for embedded systems
Modems for embedded systems
- Consider connecting an internal 8- or 16-bit ISA PC modem to your
embedded system. Such a modem is already FCC-approved and, as a
consumer device, is cheap.
- Silicon Labs SI3044 chipset (DAA only?)
- Motorola MC145442/MC145443 (300 baud single chip) is no longer
available
- SI2400 (replaces Motorola MC145442/MC145443; can also run at 2400 bps?)
- Texas Instruments 74HC942 and 74HC943 are no longer available.
IST makes a pin-compatible chip called the SC11002.
- RC224ATF single-chip 2400 bps modem:
http://www.ustr.net/modem/index.shtml
- SDK for Motorola DSP56800(E) contains assembly-language source code
for a modem
- V.23 modem implemented in software using MSP430 CPU:
http://www.gaw.ru/pdf/TI/app/msp430/slaa037.pdf
- 'We made a 2400 modem for under $30 using this':
http://www.zilog.com/products/partdetails.asp?id=Z02201
(V.22bis [2400 bps], full duplex)
On-screen displays (OSD)
Algorithms
Simple serial network protocols
Memory testing
- Beware the capacitance of a floating bus. Does your memory test pass
if there's no RAM chip in the socket?
- Beware of aliasing caused by unconnected high-order address lines.
- What exactly are you testing: the memory chips or the wiring from
the CPU to the memory chips?
- Software-Based Memory Testing by Michael Barr:
http://www.netrino.com/Articles/MemoryTesting/paper.html
Data validation:
- Parity detects single-bit errors.
- CRC detects multibit errors.
- Forward error correction (FEC) not only detects the errors, but
fixes them.
Data compression
Pseudo-random numbers
- Linear-feedback shift register (LFSR):
http://my.execpc.com/~geezer/embed/random.htm
- 'what's a Von Neuman compensator?'
Take a biased stream of 1's and 0's two at a time.
If the pair is 00, do nothing.
If the pair is 01, output a 0.
If the pair is 10, output a 1.
If the pair is 11, do nothing.
(some implementations switch the outputs so that 01 = 1 on odd
cycles and 01 = 0 on even cycles. The hardware random number
generator on Intel's latest motherboards uses this method.)
a Von Neuman compensator will remove the biases caused by switching
threshholds that are not exactly at 50%, and other biases common to
the analog to digital stages in typical hardware random number
generators, and will also remove the biases caused by asymmetrical
duty cycles and other biases common to typical counter/timer based
random number generators.
CORDIC
CORDIC (COrdinate Rotation DIgital Calculation) is an iterative way to
calculate trig functions. Unlike a Taylor series, only shifts and adds
are used. Typically, you iterate (pass through a software loop) once
for each bit of precision in the result.
Safety
In this context, 'safety' means safe operation of the system
run by an embedded controller. It does not refer to language features
(such as garbage collection, no pointers, or strong typing) that make
it easier to produce correct code.
Some organizations have created guidelines for improving the
reliability and/or safety of embedded system software:
Miscellaneous/other
File formats (including HEX and S19)
http://www.wotsit.org
Flash memory
Open-Source wear-levelling filesystem for flash memory?
http://www.linux-mtd.infradead.org/
flash memory:
can solder blank chip to board if:
- Motorola 6811 with boot-from-serial-port mode
- Motorola MPC8xx with BDM (background debug mode)
- other processors (which?) with JTAG port (JTAG is slow)
- non-Harvard CPU architecture (code and data in one address space;
so update code can run in RAM while Flash is being updated)
Small/free TCP/IP stacks
- Liquorice:
http://liquorice.sourceforge.net/ Scalable RTOS with networking,
written mostly in C. AVR and 386 CPUs. LGPL-ish license.
SLIP, PPP, ARP/Ethernet, ICMP, UDP and TCP.
- LWIP:
http://www.sics.se/~adam/lwip/ IP, ICMP, UDP, TCP. Socket API.
DJGPP, uC/OS, eCos, and Rabbit 2000 ports.
- UCIP:
http://ucip.sourceforge.net/ BSD license.
- Watt-32:
http://www.bgnett.no/~giva/
- OpenTCP:
http://www.opentcp.org/ Supposedly written in ANSI C. BSD-like license.
- Phil Karn's KA9Q TCP/IP code:
http://www.ka9q.net/code/ka9qnos/ Various copyrights, but the
PPP code is public domain.