ISD-COB1700 Hack
I've used Winbond single-chip voice recorders
to good effect in the past, for example in
this project. I recently had a need to incorporate pre-recorded audio
in a project so I revisited this chip line. There were some changes.
First, Winbond has spun out its speech recorded chip business as a company called
Nuvoton. Second, the sweet spot seems to be a new line of chips, the ISD1700
series, where SS is the number of seconds that can be recorded - ranging up to ISD17240.
Third, to promote these chips they've released a line of development kits with the
chips mounted on a small circuit board (ISD-COB1700) and with all the fidgety analog
stuff already wired up - at a cost only slightly more than the chips themselves.
You can program these chips fromusing play/record/stop switches, or via SPI.
They can drive a speaker directly, and receive input either from an electret microphone
(built into the ISD-COB1700), or from line input - e.g. from a laptop, an mp3 player,
and so on. Below is an ISD-COB17240 wired up to get some record from my netbook.
In spite of developing and selling at low cost such a convenient development kit,
Nuvoton seems to want to discourage any experimention. For one, the set of
SPI commands is not part of the ISD1700 documentation. Instead, one gets referred
to the "ISD1700 Series Design Guide" - which is not available on the Nuvoton web
site. Fortunately some web search brings it up, e.g.
here. For another, one cannot record from the built-in microphone
when controlling the ISD chip using SPI. I had intended to integrate programmatic
voice recording as part of my project and spent a day of frustration trying to make
it work only to be greeted by silence. I could make the line-in recording
work, so I started to devise plans to bypass or replace the microphone-in circuit,
when I bothered to examine that part of the ISD-COB1700 schematic. A part
of the microphone circuit which should be connected to ground is instead connected
to the not-REC input of the ISD1700, and is grounded only when the REC button is
pressed (this schematic is repeated several times in the various ISD1700 documents).
The solution is simple - bypass this part of the circuit as illustrated in the figure
below, cutting the connection to not-REC and adding a connection to ground.
I was dumbfounded when I figured this one out - its like finding a bug in the compiler.
The documentation is surprisingly well written in light of stupid problems I encountered
in using this chip. However there are a couple of tricky issues which aren't
well documented:
- You need to erase a recorded region before reusing it - even if its not part of
their "circular memory" system.
- You can determine when a recorded region has ended by waiting for the EOM bit to
get set (detectable via the status command). Then, issue a stop command.
You will need to wait for a period of time between detecting the EOM and issuing
the STOP. I found 100ms to work, but haven't experimented to see if it can
be made lower.