Over the past couple of weeks, I had been busy playing with Microchip‘s MCP2210 USB to SPI converter. I was planning to create a Linux based API since Microchip only provided the Windows version. What I quickly found out though was that the oscillator circuit for MCP2210 was quite finicky, and it took me a while to find an alternative solution.

The 12Mhz oscillator circuitry for MCP2210 is fairly standard, it uses either a crystal oscillator with two load capacitors or a ceramic oscillator. In theory, it should just work. In fact, I had never had any issue with this type of oscillator circuit in the past when building various MCU projects. But after I built the test circuit based on the 5V Vcc reference design in the datasheet using a HC-49 12MHz crystal, I realized that the oscillator did not work. Even though I knew that the capacitors and the crystal I used were not the issue (I had verified that the oscillator worked beforehand), I swapped in a few different ones just in case but still could not get the 12MHz signal on the oscilloscope. One weird thing is that, by holding the circuit in the reset state (e.g. tie the RST pin to ground level) I could see the output waveform from the oscillator. So there is definitely something strange about MCP2210’s internal oscillator circuit.

After some research, I found out that the issue I ran into is apparently a rather common one. I suspect that MCP2210 has some very stringent requirement on the oscillator components and the board layout. It may work on a carefully designed product PCB, but might have issues with the stray capacitance introduced when using a protoboard. Since I am building the circuit on a prototyping board I had to find an alternative way to get the oscillator working.

The Solution

So my solution is to use an external oscillator and inject the clock signal into the OSC1 pin and leaving OSC2 float. This is actually a quite standard design practice as most on-chip oscillators can also be driven externally. You can refer to this design guide to find the proper values for the oscillator components. The following schematic shows the working circuit.

MCP2210 using external OSC
MCP2210 using external OSC
Be Sociable, Share!

4 Thoughts on “Finicky MCP2210 Oscillator”

  • I found this to be the case as well – my first batch of boards using the MCP2210 worked fine but on the second or third one, I had to swap out the resonators for different ones since I was getting yield issues. Thanks for the write-up.

  • Same problem here. The MCP2210 ought to be referred to as “discontinued.” If only I’d read about this problem before ordering 10 PCBs without making a prototype because the circuit is so simple even idiots can’t do it wrong… unless the chip is flawed.

  • WARNING: According to our trouble ticket interactions with Microchip technical support, the MCP2210 is “throttled” internally with a mininum SPI inter-byte spacing of about 45uS REGARDLESS of SPI clock frequency (we got 12 MHz working on our board.) That limits the byte data rate to about 23KBytes/second max. However, the performance is still limited further by the fact that it is an HID device with a HID-limit 64KByte/second interface. Two USB 128 byte transactions of 3mS each with a wait in between are required for a transfer, so the effective data rate using full 60 byte packets works out to slightly less than 8KBytes/second (Verified with ‘scope.) THIS IS NOT A HIGH THROUGHPUT PART!

Leave a Reply

Your email address will not be published. Required fields are marked *