Forum: Mikrocontroller und Digitale Elektronik Raspberry Pi Compute Module 3 (Carrier Board)


von D a v i d K. (oekel) Benutzerseite


Lesenswert?

Hi,

ist es wirklich so einfach wie es der Gumstick-Shop 
(https://geppetto.gumstix.com/) aussehen lässt, oder gibt es doch 
massive Probleme beim Designen eines eigenen Carrier Boards für das CM3?

Ich kenne das ferige Bsp. Projekt:
https://www.instructables.com/id/Design-Your-Own-Raspberry-Pi-Compute-Module-PCB/

Folgendes "muss" ich auf meinem Board haben und hätte gerne eure 
Meinung, wo ich aufpassen muss und mir Referenzschaltpläne hinlegen 
sollte anstatt nur "IOs mit Klemmen zu verbinden" ;)


- DSI-Connector for 5“ Touchdisplay
- 250V/10A Relay NC/COM/NO
- Digital Input (12V)
- 0-10V Analog Input/Output
- 10K Temperature Sensor Input
- RS485
- SD-Card (flashing eMMC)
- USB 2.0 Port
- Ethernet-Port RJ45

Grüße Oekel

: Bearbeitet durch User
von Frank K. (fchk)


Lesenswert?

D a v i d K. schrieb:

> ist es wirklich so einfach wie es der Gumstick-Shop
> (https://geppetto.gumstix.com/) aussehen lässt, oder gibt es doch
> massive Probleme beim Designen eines eigenen Carrier Boards für das CM3?

Du musst schon wissen, was Du da machst, wie differential pairs 
funktionieren und warum Du 4 Lagen mit einem definierten Lagenaufbau 
brauchst. Ich habe schon einige Boards für einen Kunden gebaut.

> Folgendes "muss" ich auf meinem Board haben und hätte gerne eure
> Meinung, wo ich aufpassen muss und mir Referenzschaltpläne hinlegen
> sollte anstatt nur "IOs mit Klemmen zu verbinden" ;)

> - DSI-Connector for 5“ Touchdisplay
Du weißt, dass nur die Originaldisplays gehen wegen Binärblobs? Der Pi 
ist halt keine wirkliche Open Source Plattform wie Beaglebone. Aufpassen 
mit differential pairs. Layoutrichtlinien beachten!

> - 250V/10A Relay NC/COM/NO
> - Digital Input (12V)
banal.
> - 0-10V Analog Input/Output
> - 10K Temperature Sensor Input
ADC und DAC an einem SPI. Banal.
> - RS485
machst Du am besten über USB und einen FT232H
> - SD-Card (flashing eMMC)
banal. GPIO-Ports verwenden, nicht die spezialpins, die nur beim CM3 
Lite verfügbar sind.
> - USB 2.0 Port
> - Ethernet-Port RJ45
Dafür nimmst Du den LAN9514, der auch auf den originalen PI3b drauf ist. 
Der ist allerdings schwierig zu löten, aber da musst Du durch. USB und 
Ethernet sind auch differential pairs, auch hier Layoutrichtlinien 
beachten.

fchk

von D a v i d K. (oekel) Benutzerseite


Angehängte Dateien:

Lesenswert?

Frank K. schrieb:
>> - SD-Card (flashing eMMC)
> banal. GPIO-Ports verwenden, nicht die spezialpins, die nur beim CM3
> Lite verfügbar sind.
Kannst du das etwas genauer erläutern, da ich dachte genau dafür wären 
diese Pins. 
https://www.raspberrypi.org/documentation/hardware/computemodule/schematics/rpi_SCH_CMIO_3p0.pdf

>> - RS485
> machst Du am besten über USB und einen FT232H
Wieso hier nicht einen UART (und wenn keiner frei ist I2C->UART) ?

> Dafür nimmst Du den LAN9514, der auch auf den originalen PI3b drauf ist.
> Der ist allerdings schwierig zu löten, aber da musst Du durch.
Kein Problem, schon oft gemacht (aber eben nicht gerne ;)

Ich habe das SO-Dimm mal für AltiumDesigner in 6 Module (A-F) aufgeteilt 
(siehe Anhang). Zumal ich HDMI und CAM sowie viele GPIOs nicht benötige.
Passt das so, oder würdet ihr anders gruppieren?

: Bearbeitet durch User
von Frank K. (fchk)


Lesenswert?

D a v i d K. schrieb:
> Frank K. schrieb:
>>> - SD-Card (flashing eMMC)
>> banal. GPIO-Ports verwenden, nicht die spezialpins, die nur beim CM3
>> Lite verfügbar sind.
> Kannst du das etwas genauer erläutern, da ich dachte genau dafür wären
> diese Pins.
> 
https://www.raspberrypi.org/documentation/hardware/computemodule/schematics/rpi_SCH_CMIO_3p0.pdf

Die SDI*-Pins 2-24 sind parallel zum onboard-EMMC und nur beim CM3 Lite 
frei, der eben kein EMMC hat. Du willst aber EMMC haben, weil das 
wesentlich zuverlässiger ist, und kaufst destwegen kein CM3 Lite.
Die externe SD-Karte muss daher am zweiten SD/SDIO-Controller SD1 
angeschlossen werden, der z.B. auf GPIO34-39 Alt Func 3 liegt.

>>> - RS485
>> machst Du am besten über USB und einen FT232H
> Wieso hier nicht einen UART (und wenn keiner frei ist I2C->UART) ?

Weil die FTDI-Chips das Umschalten der Datenrichtung (DE-Pin am 
RS485-Transceiver) automatisch machen und Du dich nicht drum kümmern 
musst. Außerdem hast Du eh nur zwei UARTs, von denen der zweite gewisse 
Macken hat.

> Ich habe das SO-Dimm mal für AltiumDesigner in 6 Module (A-F) aufgeteilt
> (siehe Anhang). Zumal ich HDMI und CAM sowie viele GPIOs nicht benötige.
> Passt das so, oder würdet ihr anders gruppieren?

Ich habe bei mir den SODIMM-Sockel so wie er ist als Symbol genommen und 
ihn entsprechend verdrahtet. Aber so kannst Du das auch machen.

fchk

von Marius W. (marwin)


Lesenswert?

Was soll man mit diesen Compute Modules anfangen? Sie haben etwa 1/1000 
Rechenleistung eines core i7 und kosten 1/10.

Ist es da nicht günstiger, einen Abakus im Formfaktor des Compute 
Modules zu konstruieren?

von AlexD (Gast)


Lesenswert?

Marius W. schrieb:
> Was soll man mit diesen Compute Modules anfangen? Sie haben etwa 1/1000
> Rechenleistung eines core i7 und kosten 1/10.

Dann zeig mir mal das Board mit Core i7 in der Bauform einen Compute 
Modules mit eMMC und RAM schon drauf, um das man einfach ein Carrier 
Board mit nur 4 Lagen designen kann, ohne all zu viele Probleme zu 
haben.

von D a v i d K. (oekel) Benutzerseite


Lesenswert?

Marius W. schrieb:
> Was soll man mit diesen Compute Modules anfangen? Sie haben etwa 1/1000
> Rechenleistung eines core i7 und kosten 1/10.

Wer sich einen Raspberry holt scheut halt die µC Programmierung.
Somit muss gerade so ein "normales" OS laufen und dennoch hat man X-IOs.
Nicht mehr und nicht weniger. Alles was man sich so für Bastelprojekte 
vorstellen kann braucht keine enorme Geschwindigkeit. Es muss nur 
reichen, um den Overhead des Betriebsystems dazwischen abzudecken.

von D a v i d K. (oekel) Benutzerseite


Lesenswert?

Frank K. schrieb:
> Die externe SD-Karte muss daher am zweiten SD/SDIO-Controller SD1
> angeschlossen werden, der z.B. auf GPIO34-39 Alt Func 3 liegt.

"If you wanted to add a secondary eMMC or SD card (note you cannot use 
this for booting only as a secondary storage) you can do this by 
connecting it to GPIOs 22-27 or 34-39 and add a device tree entry to 
enable this interface."

Also wenn ich davon booten will, muss ich doch den ersten nehmen ;)

Trotzdem kann es ja nicht schaden die anderen Pins ebenfalls raus zu 
führen und nur den SD-Kartenhalter nicht zu bestücken.

Das Bsp. von Oben verwendet ja SDX_Data0-3, wofür sind die SD1_Data4-7, 
welche ab GPIO40 vermerkt sind?

: Bearbeitet durch User
von Frank K. (fchk)


Lesenswert?

D a v i d K. schrieb:
> Frank K. schrieb:
>> Die externe SD-Karte muss daher am zweiten SD/SDIO-Controller SD1
>> angeschlossen werden, der z.B. auf GPIO34-39 Alt Func 3 liegt.
>
> "If you wanted to add a secondary eMMC or SD card (note you cannot use
> this for booting only as a secondary storage) you can do this by
> connecting it to GPIOs 22-27 or 34-39 and add a device tree entry to
> enable this interface."
>
> Also wenn ich davon booten will, muss ich doch den ersten nehmen ;)

Du willst aber nicht davon booten! Die Teile gibts nicht ohne Grund mit 
EMMC, und das ist schneller und stabiler und kann deutlich mehr 
Schreibzyklen ab. Das erspart Dir Ärger mit kaputt geschriebenen 
SD-Karten.

> Trotzdem kann es ja nicht schaden die anderen Pins ebenfalls raus zu
> führen und nur den SD-Kartenhalter nicht zu bestücken.

> Das Bsp. von Oben verwendet ja SDX_Data0-3, wofür sind die SD1_Data4-7,
> welche ab GPIO40 vermerkt sind?

z.B. für EMMCs, die üblicherweise 8 Datenleitungen haben und im 1-, 4- 
und 8-Bit Modus betrieben werden können.

fchk

von D a v i d K. (oekel) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hi,

ich habe die Schematik nun nach bestem Wissen und Gewissen fertig 
(Spannungsquellen fehlen noch).

Könnt ihr mir sagen, ob ihr Fehler entdeckt oder weitere Empfehlungen 
aussprechen könnt?

Im Speziellen hätte ich da noch einige Fragen:
- Reicht "U1_" um mein Rail mit 1.8 und 3.3 V zu versorgen?
- Besteht eine geringe Change, dass ich das ganze auf 2 statt 4 Lagen 
geroutet bekomme (Ich meine wegen den DIFF90 & DIFF100)
- "UB2_hib" möchte ich nicht bestücken (Keine Ahnung warum das PDF meine 
Variante hier nicht rendert) Ist dies möglich/ratsam?
- "U1_dacB" kann ich so beschalten?
- "Brauche ich "U1_usb" unbedingt?

- So recht verstanden habe ich die Zusammenhänge von
https://www.raspberrypi.org/documentation/hardware/computemodule/schematics/rpi_SCH_CMIO_3p0.pdf
leider noch nicht:
"
BCM2835 BootROM boot from eMMC:
 - Nothing plugged into micro USB socket J15 (VBUSB=0V)
 OR J4 set to disable USB Boot
 - EMMC_DISABLE_N therefore HIGH
 - On power up BCM2835 boots from eMMC
 - EMMC_EN_N_1V8 can be used as status LED

BCM2835 BootROM boot from USB:
 - J4 set to enable USB boot
 - Plug host into micro USB socket J15 (VBUSB=5V)
 - EMMC_EN_N_1V8 high at boot (input with 1.8k pullup)
 - EMMC_DISABLE_N therefore LOW
 - On power up BCM2835 can't access eMMC so boots from USB
 - Once booted, 2835 USB boot SW forces EMMC_EN_N_1V8 to enable access 
to eMMC"

- Passen "L*" oder sind es nicht überall simple Ferite?
- Kann ich HUB3V3 mit +3.3 zusammenlegen, oder übersehe ich etwas?
- Was hat es mit der "USB_OTG_ID" wirklich auf sich und erfüllt diese 
bei mir ihren Sinn?
- Die gewählte RTC braucht keinen Quarz richtig?
- Was würdet ihr mir an StepDown reglern empfehlen, um:
    - Modbus 36V (habe irgendwo gelesen, dass 20V auch schon gehen)
    - 12V AnalogOut
    - 5V IC Versorgung
abzudecken? An die USBs kommen max noch Tastatur und Maus ran.


Ich würde mich riesig freuen, wenn ihr mich auf so viele Dinge wie 
möglich hinweisen könntet. Habe alles erdenkliche im Pdf klickbar 
gemacht und vielleicht kann ich dann bald einen Prototypen fertigen 
lassen.

Schönen Sonntag.

: Bearbeitet durch User
von Frank K. (fchk)


Lesenswert?

U1_adc: VDD wird mit 5V versorgt, muss 3.3V sein
I2C-Pullups hängen auf 5V, was die Pins tötet. Die GPIO-Pins sind nicht 
5V-tolerant, alles über 3.3V tötet die Pintreiber.
Den Header 3x2 kannst Du Dir sparen, weil Du 3.3V-Devices an den GPIOs 
hast.
Ich würde einen Debug-UART an GPIO14-16 hängen, damit Du eine serielle 
Console hast.
U2_dac: VDD wird mit 5V versorgt, muss alles auf 3.3V
U1_485: 5V Transceiver, obwohl VIO von FTDI-CHip max 3.3V ist

Hub_3.3V kann mit den normalen 3.3V zusammengelegt werden

Du hast den USB-Multiplexer aus dem Devkit nicht implementiert. Damit 
kannst Du das EMMC auf dem CM3 nicht flashen.

Zum LM;358: beide Eingänge auf GND, dann passt das.

Nein, das wird vierlagig werden müssen.

fchk

von D a v i d K. (oekel) Benutzerseite


Lesenswert?

Frank K. schrieb:
> Du hast den USB-Multiplexer aus dem Devkit nicht implementiert. Damit
> kannst Du das EMMC auf dem CM3 nicht flashen.

Habe das alles korrigiert. Würde den Punkt PowerSupply gerne noch 
abhandeln und noch mal eine erneuerte PDF hochladen.

Wisst ihr, was das "StromPI" für einen PMIC verwendet?
Wegen M-Bus fände ich Wide-Range bis 36V schon sehr interessant.

Ich hoffe ich muss nicht bei etwas wie dem
https://www.raspberrypi.org/blog/pi-power-supply-chip/
landen, denn ich verwende ja weder HDMI noch Audio.

LG

von Frank K. (fchk)


Lesenswert?

D a v i d K. schrieb:

> Habe das alles korrigiert. Würde den Punkt PowerSupply gerne noch
> abhandeln und noch mal eine erneuerte PDF hochladen.
>
> Wisst ihr, was das "StromPI" für einen PMIC verwendet?
> Wegen M-Bus fände ich Wide-Range bis 36V schon sehr interessant.

Nimm doch so ein Netzteil, dann hast Du die 36V schon mal.

https://www.reichelt.de/schaltnetzteil-geschlossen-100-w-36-v-2-8-a-mw-lrs-100-36-p202977.html?&nbc=1

Die anderen Spannungen erzeugst Du dann z.B. mit je einem LM2596 oder 
wenn Du es Dir einfach machen willst, je einem LMZ14203H für die 5V und 
die 12V. Aus den 5V machst DU Dir dann die 3.3V und aus den 3.3V dann 
die 1.8V.

Zu deinem LM358: Ich hätte da eher einen MCP6H01 im SOT23-5 genommen.

fchk

von D a v i d K. (oekel) Benutzerseite


Lesenswert?

Frank K. schrieb:
> Die anderen Spannungen erzeugst Du dann z.B. mit je einem LM2596 oder
> wenn Du es Dir einfach machen willst, je einem LMZ14203H für die 5V und die > 
12V.

Genau so hatte ich es vor. Bin allerdings gerade beim
LMZ14202 (2A)
meinst du ich brauche wirklich
LMZ14203H (3A)


>  Aus den 5V machst DU Dir dann die 3.3V und aus den 3.3V dann
> die 1.8V.
Mittels PAM2306AYPKE erledigt?

von Frank K. (fchk)


Lesenswert?

D a v i d K. schrieb:

> Genau so hatte ich es vor. Bin allerdings gerade beim
> LMZ14202 (2A)
> meinst du ich brauche wirklich
> LMZ14203H (3A)

Weiß ich nicht. Wenn Du keine Serienfertigung planst, ist der 
Preisunterschied irrelevant. Wichtig: Die Versionen ohne H haben 
Ausgangsspannungen von 0.8 bis 6V, die H-Version von 5-30V. Wenn, dann 
brauchst Du den 14202H für die 12V-Version, der 14202 geht nicht dafür.

>>  Aus den 5V machst DU Dir dann die 3.3V und aus den 3.3V dann
>> die 1.8V.
> Mittels PAM2306AYPKE erledigt?

Kann man so machen. Für die 1.8V würde auch ein LDO reichen. Ich habe 
einen MCP1825 verwendet.

fchk

von D a v i d K. (oekel) Benutzerseite


Angehängte Dateien:

Lesenswert?

Frank K. schrieb:
> Wichtig: Die Versionen ohne H haben
> Ausgangsspannungen von 0.8 bis 6V, die H-Version von 5-30V. Wenn, dann
> brauchst Du den 14202H für die 12V-Version, der 14202 geht nicht dafür.
Und sie sind auch noch günstiger :P


Wofür soll ich denn "Debug-UART an GPIO14-16" den 16er brauchen?
Ich hätte vermutet dass ich hier eher einen Com-GND benötige?

Was mache ich in den USB_ENABLE Pins, die bei mir noch so lustig in der 
Luft baumeln? (Siehe Error-Report)

Und wenn ich den 1.8V via LDO kreiere, welche Alternative bietet sich 
mir für die 3.3V?

Vielen Dank für eure Review. Fange dann morgen langsam mit dem Routing 
an, sofern sich keine groben Schnitzer mehr eingeschlichen haben.
Ebenfalls stört mich der Tantal im 14202H-Design. Können dessen 
Eigenschaften auch anders abgebildet werden?

LG

: Bearbeitet durch User
von Frank K. (fchk)


Lesenswert?

Deine Abblockkondensatoren für ADC und DAC hängen noch auf 5V.

Und für die Tantals: nimm doch MLCCs. 22uF XR5 in 1206 existieren, da 
nimmst Du dann halt zwei bei 5V und drei bei 12V (wegen 
Kapazitätsabnahme mit steigender Spannung).

Auf den Debug-Uart würde ich die Konsole legen, dann kannst Du das Teil 
auch headless betreiben. Konsole auf einen der FTDI-Ports geht nicht, 
weil der zu spät eingebunden wird, dann siehst Du die ganzen 
Kernelmessages nicht mehr.
Zumindest als Stiftleiste für ein FTDI-Kabel TTL-232R-3V3 würde ich das.

fchk

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.