[Editor’s note: Every once in a while I like to have these types of articles to remind us that even when you think a design might be pretty straightforward, always be prepared for the unforeseen gotchas.]
Starting a new project always requires prior evaluation of the complexity, new skills needed, literature, demonstrators, development tools, vendor support availability, and more. It is a time-consuming but essential task during project planning. Unfortunately, we cannot cover every possible project execution aspect during project planning. As a consequence, it does not warrant immunity against Murphy’s and Hofstadter’s Laws.
Murphy’s Law: “Everything that can go wrong will go wrong.”
Hofstadter’s Law: “It always takes longer than you expect, even when you take into account Hofstadter's Law.”
Some time ago I worked on a project involving fairly simple hardware. It was barely a 100 MHz SoC with USB device support connected to some LEDs and one 13.56 MHz NFC transceiver. All the complexity was expected to be in the firmware development tasks. We integrated one very new Cortex M4 SoC and one relatively mature NFC transceiver from two widely recognized chip vendors.
It seemed simple enough from our point of view but Murphy's Law came into play. On one side, we ordered some SoC samples that turned out to be silicon revision 1 and included some bugs. Those bugs were corrected on silicon revision 2, which was available a few weeks later. On the other side, the NFC transceiver card emulation (CE) operating mode was also hiding several unpleasant surprises. What was supposed to be a mostly software development task became a brain-killing RF hardware debugging process.
Weeks behind schedule, Hofstadter’s Law proved valid for hardware development tasks, too. At that point we decided to make a radical project change. We started designing our own analog front end (AFE) to replace the NFC transceiver. There was no alternative in the market implementing all the functionalities we needed. The AFE required some signal conditioning, AD conversion, hardcoded (FPGA) digital signal processing, and load modulation generation. Not all was negative as we exercised and developed further some “rusted” skills and took very valuable lessons. Once again we corroborated the big importance of a coordinated and fluent team work for achieving complex project goals.
Have you ever had to make a major redesign for a product? Have you tried to use any component in a mode not yet fully tested by its vendor? What was your worst components selection nightmare?