MCP-USB-Bridge

Aus Hobbyelektronik.org
Wechseln zu: Navigation, Suche

"Mal kurz etwas mit I²C/SPI testen". Was einfach klingt artet gerne in vielen Programmierläufen eines Mikrocontrollers aus.

Mittlerweile haben die meisten Bastler einen Single Board Computer wie den Raspberry Pi herumliegen, in manchen Situationen wäre eine direkte Anbindung an den PC dann doch angenehmer.

Selbst hierfür gibt es Lösungen wie den Aardvark von Total Phase oder den Bus Pirate von Dangerous Prototypes, diese sind entweder vergleichsweise teuer oder umständlich in der Bedienung/Automatisierung.

Microchip hat den MCP2221 (I²C) und MCP2210 (SPI) im Angebot. Dabei handelt es sich mutmaßlich um vorprogrammierte Mikrocontroller, was ansich nicht verwerflich ist. Allerdings gibt es ein paar Ecken und Kanten, wie Zak bereits geschrieben und ich bestätigt habe.

Auch beim MCP2210 hat die im Datenblatt angegebene Datenrate nicht sehr viel mit dem tatsächlichen Durchsatz zu tun.

Um etwas zu testen sind jedoch beide Chips ok.

Vom Microchip gibt es zwar jeweils auch ein Breakout-Board, beide sind für normalsterbliche jedoch relativ schlecht verfügbar. Deshalb: EAGLE an und los geht's:

USB-I²C-Bridge

Im Prinzip ist die Beschaltung einfach: USB rein, I²C (sowie UART, ein paar GPIOs, ADC und DAC) raus.

Da viele I²C-Bausteine mittlerweile nicht mehr mit den früher üblichen 5 Volt funktionieren, gibt es zusätzlich einen Spannungsregler und Levelshifter die, wie im Artikel über den APDS-9300, der AN10441 von NXP folgen.

Der ADC an GP3 kann zugleich für die Spannungsmessung des Reglers verwendet werden, um bei Änderungen der IO-Spannung nicht unbedingt ein Messgerät anschließen muss. Damit die interne Messung funktioniert, müssen beide Jumper gesteckt und damit die Versorgung der "VIO"-Pins aktiviert werden. Mit bisschen Gewalt bekommt man einen Jumper vertikal gesteckt und kann ohne aktivertem VIO messen... Auch ein Punkt für Revision 2.

Der verwendete LM317 hat leider einen Nachteil: da seine Feedback-Spannung gegen Vout referenziert wird, kommt er nicht sehr nahe an die Eingangsspannung heran. Praktisch kommen maximal knapp 3,3 V am Ausgang an. Reicht für die meisten Anwendungen, für manche Bauelemente ist es allerdings zu wenig. Beim nächsten Mal kommt ein anderer Regler, versprochen.

Die BOM ist überschaubar:

Menge Referenz Wert Package Reichelt Bestellcode
2 JP1, JP2 JP1
2 LED1, LED2 CHIP-LED0603 LED EL 0603 GR1
5 SV1, SV3, SV4, SV5, SV8 MA04-2
1 R2 0 R0603 RND 0603 0
1 R10 100 R0603 RND 0603 1 100
3 C3, C4, C5 100n C0603 KEM X7R0603 100N
1 R1 10k R0603 RND 0603 1 10K
1 C2 10n C0603 KEM X7R0603 10N
1 C6 1u C0805 X7R-G0805 1,0/16
1 R7 22k R0603 RND 0603 1 22k
1 R18 23B-500 POT-23B 23B-500
1 R9 240 R0603 RND 0603 1 240
1 R15 2k2 R0603 RND 0603 1 2,2k
9 R3, R4, R5, R6, R8, R11, R12, R13, R14 3k3 R0603 RND 0603 1 3,3k
1 C1 470n C0603 NPO 0603 CD 470N
1 R16 680 R0603 RND 0603 1 680
4 Q1, Q2, Q3, Q4 BSS138 SOT23 BSS 138 SMD
1 IC2 LM317LD SO08 LM 317 LD
1 IC1 MCP2221-I/SL SO-14 MCP2221-I/SL
1 X1 ZX62-B-5PAHS ZX62-B-5PA_HANDSOLDER MIC USB BBU


Um kurz etwas zu testen bietet sich die Software "MCP2221 I2C SMBus Terminal", die man auf der Produktseite von Mikrochip herunterladen kann.

Die C#-Implementierung von Microchip ist leider nicht die schönste, eine echte Alternative habe ich leider noch nicht gefunden (vielleicht kommt hier etwas), für Python gibt es eine Lib mit Unterstützung der Basisfunktionen.

USB-SPI-Bridge

Der MCP2210 unterstützt von sich aus 2 IO-Spannungen: 5 V und 3,3 V. Ausreichend für die meisten SPI-Bausteine. Einen Levelshifter für weitere Spannungen wollte ich auf dem Board aus Platzgründen nicht integrieren.

Der 3,3 V-Regler kann lt. Datenblatt mit 250 mA vergleichsweise viel Strom. Bedenkt man, dass bei einer Versorgungsspannung von 5 V (tendenziell mehr) und dieser Stromstärke 425 mW verbraten werden müssen - eher nein. Dauerhaft 100 mA sollten allerdings kein größeres Problem sein.

Da mein Hauptverwendungszweck das Ansteuern von Funkmodulen sein wird, sind Buchsenleisten für die weit verbreiteten nRF24L01+- und CC1101-Module vorhanden. Ferner sind alle IOs herausgeführt, beschriftet und mit 100 Ohm im Strom begrenzt:

Auch hier ist die BOM überschaubar:

Menge Parts Wert Package Reichelt Bestellcode
1 JP1 JP3Q
1 LED1 SML0603 LED EL 0603 GR1
2 SV1, SV2 MA08-1
1 R1 0 R0603 RND 0603 0
12 R4, R5, R6, R7, R8, R10, R11, R12, R13, R14, R15, R16 100 R0603 RND 0603 1 100
2 C4, C5 100n C0603 KEM X7R0603 100N
1 R3 10k R0603 RND 0603 1 10k
2 C1, C2 10p C0603 NPO-G0603 10P
1 Q1 12M MJ 12,000000-MJ
1 R2 1k R0603 RND 0603 1 1k
2 C6, C7 1u C0805 KEM X5R0805 1,0U
1 C3 330n C0603 KEM X7R0603 330N
2 X2, X3 FE04-2 FE04-2
1 IC2 MCP1700T-3302E/TT SOT23 MCP 1700-3302
1 IC1 MCP2210/SO SO20L MCP 2210I-SO
1 X1 ZX62-B-5PAHS ZX62-B-5PA MIC USB BBU

Auch hier gilt: die Implementierung von Microchip ist nicht die Beste. Eine richtige Alternative für C# und Python habe ich hier auch noch nicht gefunden.

Anmerkungen

  • Der zusätzliche "Bestückungsdruck" für die Pinbezeichnungen befindet sich im Layer tSilk in Lage 100. Wenn Produktionsdaten ausgegeben werden, diese bitte nicht vergessen. Ist mir bei der SPI-Bridge passiert, weshalb dort ein Stück Papier als Ersatz Designdaten

Leiterkarten

Es gibt noch unbestückte Leiterkarten. Wer eine will, kann sich gerne bei mir melden.

Download

Datei:MCP-USB-Bridge.zip enthält:

  • Designdaten im EAGLE-Format