12 Oct 2013: 2nd revision, Camera Status Report

Status update at the PCB page). After spotting and correcting mistakes in the camera sensor power-up circuit, attempts to provide a valid clock via MCO proved frustrating but ultimately successful. It was then possible to examine linux kernel device driver sources and replicate the I2C commands needed to set the camera sensor up.

However... closer examination of adamgreig's "followingrobot" code shows up some problems. Firstly, Adam set the sparkfun-supplied part to a 6mhz clock rate. Attempts to set a 6mhz clock rate on the GC0309 $3 part were not successful (12mhz however was). At 12mhz, the pixel clock rate is also going to be 12mhz. At 72mhz this leaves only six instructions in which to read the camera data on an extremely tight CPU-intensive loop which must not be interrupted, even if audio data is to be serviced.

Others who have used a chain of External GPIO - EINT - Timer - DMA - Port Read have found that this maxes out at 6mhz for an STM32F103, which is not enough. Basically we're going to have to go for an STM32F207VCT6.

The STM32F207VCT6 is a 120mhz part instead of 72mhz, it has full 480mb/sec USB-OTG instead of 11mb/sec USB Client, it has 4-bit SD/MMC, as well as I2S (which can be used to connect a high-quality MAXIM or Wolfson Micro Audio IC), and, most importantly, it has DCMI. The combination of 48mhz 14-bit DCMI plus 480mb/sec USB2 Audio would mean that it would theoretically be possible to do a camera on the Flying Squirrel with a 1280x720 resolution @ 25fps! A mere 640x480 @ 30fps would not even push things hard.

Luckily, the STM32F207VCT6 is pin-compatible with the 103 equivalent, and the Revision 2 schematics have already planned ahead for the possible upgrade. Connecting the camera sensor to the DCMI interface is a simple matter of changing which pins are used: there are no extra circuits required. So - bad news that turns out to be good news, with no real significant schematics changes, reduced development risk and a better product anyway. All for what is likely to turn out to be about another $0.60 on the BOM.