A few months ago (ok, almost a year) I decided to disassemble an ELM327 to see how the generic OBD reader works.  To my surprise the component selection and layout was very similar to what I would have hacked together.  They are based around a Microchip PIC with integrated CAN...