Skip to content

Commit 84c133f

Browse files
committed
Add Compute Module 3 details
1 parent ed12ac1 commit 84c133f

File tree

1 file changed

+32
-6
lines changed

1 file changed

+32
-6
lines changed

gpiozero/pins/data.py

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -166,9 +166,10 @@
166166
{style:black on white}---+|hdmi|{style:white on green} {style:on black}+----+{style:on green} {style:black on white}usb{style:on green} {style:on white}pwr{style:white on green} |{style:reset}
167167
{style:white on green}`---{style:black on white}| |{style:white on green}--------{style:black on white}| |{style:white on green}-{style:black on white}| |{style:white on green}-'{style:reset}"""
168168

169+
169170
CM_BOARD = """\
170171
{style:white on green}+-----------------------------------------------------------------------------------------------------------------------+{style:reset}
171-
{style:white on green}| Raspberry Pi Compute Module |{style:reset}
172+
{style:white on green}| Raspberry Pi Compute Module %d |{style:reset}
172173
{style:white on green}| |{style:reset}
173174
{style:white on green}| You were expecting more detail? Sorry, the Compute Module's a bit hard to do right now! |{style:reset}
174175
{style:white on green}| |{style:reset}
@@ -344,6 +345,23 @@
344345
199: ('VBAT', False), 200: ('VBAT', False),
345346
}
346347

348+
CM3_SODIMM = CM_SODIMM.copy()
349+
CM3_SODIMM.update({
350+
4: ('NC / SDX VREF', False),
351+
6: ('NC / SDX VREF', False),
352+
8: (GND, False),
353+
10: ('NC / SDX CLK', False),
354+
12: ('NC / SDX CMD', False),
355+
14: (GND, False),
356+
16: ('NC / SDX D0', False),
357+
18: ('NC / SDX D1', False),
358+
20: (GND, False),
359+
22: ('NC / SDX D2', False),
360+
24: ('NC / SDX D3', False),
361+
88: ('HDMI HPD N 1V8', False),
362+
90: ('EMMC EN N 1V8', False),
363+
})
364+
347365
# The following data is sourced from a combination of the following locations:
348366
#
349367
# http://elinux.org/RPi_HardwareHistory
@@ -364,10 +382,10 @@
364382
0xe: ('B', '2.0', '2012Q4', 'BCM2835', 'Sony', 512, 'SD', 2, 1, False, False, 1, 1, {'P1': REV2_P1, 'P5': REV2_P5}, REV2_BOARD, ),
365383
0xf: ('B', '2.0', '2012Q4', 'BCM2835', 'Qisda', 512, 'SD', 2, 1, False, False, 1, 1, {'P1': REV2_P1, 'P5': REV2_P5}, REV2_BOARD, ),
366384
0x10: ('B+', '1.2', '2014Q3', 'BCM2835', 'Sony', 512, 'MicroSD', 4, 1, False, False, 1, 1, {'P1': PLUS_P1}, BPLUS_BOARD, ),
367-
0x11: ('CM', '1.1', '2014Q2', 'BCM2835', 'Sony', 512, 'eMMC', 1, 0, False, False, 2, 2, {'SODIMM': CM_SODIMM}, CM_BOARD, ),
385+
0x11: ('CM', '1.1', '2014Q2', 'BCM2835', 'Sony', 512, 'eMMC', 1, 0, False, False, 2, 2, {'SODIMM': CM_SODIMM}, CM_BOARD % 1, ),
368386
0x12: ('A+', '1.1', '2014Q4', 'BCM2835', 'Sony', 256, 'MicroSD', 1, 0, False, False, 1, 1, {'P1': PLUS_P1}, APLUS_BOARD, ),
369387
0x13: ('B+', '1.2', '2015Q1', 'BCM2835', 'Egoman', 512, 'MicroSD', 4, 1, False, False, 1, 1, {'P1': PLUS_P1}, BPLUS_BOARD, ),
370-
0x14: ('CM', '1.1', '2014Q2', 'BCM2835', 'Embest', 512, 'eMMC', 1, 0, False, False, 2, 2, {'SODIMM': CM_SODIMM}, CM_BOARD, ),
388+
0x14: ('CM', '1.1', '2014Q2', 'BCM2835', 'Embest', 512, 'eMMC', 1, 0, False, False, 2, 2, {'SODIMM': CM_SODIMM}, CM_BOARD % 1 ),
371389
0x15: ('A+', '1.1', '2014Q4', 'BCM2835', 'Embest', 256, 'MicroSD', 1, 0, False, False, 1, 1, {'P1': PLUS_P1}, APLUS_BOARD, ),
372390
}
373391

@@ -703,7 +721,7 @@ class PiBoardInfo(namedtuple('PiBoardInfo', (
703721
.. attribute:: model
704722
705723
A string containing the model of the Pi (for example, "B", "B+", "A+",
706-
"2B", "CM" (for the Compute Module), or "Zero").
724+
"2B", "CM" (for the Compute Module), "CM3", or "Zero").
707725
708726
.. attribute:: pcb_revision
709727
@@ -823,7 +841,7 @@ def from_revision(cls, revision):
823841
# MMM - Memory size (0=256, 1=512, 2=1024)
824842
# CCCC - Manufacturer (0=Sony, 1=Egoman, 2=Embest)
825843
# PPPP - Processor (0=2835, 1=2836, 2=2837)
826-
# TTTTTTTT - Type (0=A, 1=B, 2=A+, 3=B+, 4=2B, 5=Alpha (??), 6=CM, 8=3B, 9=Zero)
844+
# TTTTTTTT - Type (0=A, 1=B, 2=A+, 3=B+, 4=2B, 5=Alpha (??), 6=CM, 8=3B, 9=Zero, 10=CM3)
827845
# RRRR - Revision (0, 1, 2, etc.)
828846
try:
829847
model = {
@@ -835,6 +853,7 @@ def from_revision(cls, revision):
835853
6: 'CM',
836854
8: '3B',
837855
9: 'Zero',
856+
10: 'CM3',
838857
}[(revision & 0xff0) >> 4]
839858
if model in ('A', 'B'):
840859
pcb_revision = {
@@ -853,6 +872,7 @@ def from_revision(cls, revision):
853872
'CM': '2014Q2',
854873
'3B': '2016Q1',
855874
'Zero': '2015Q4' if pcb_revision == '1.2' else '2016Q2',
875+
'CM3': '2017Q1',
856876
}[model]
857877
soc = {
858878
0: 'BCM2835',
@@ -873,19 +893,22 @@ def from_revision(cls, revision):
873893
'A': 'SD',
874894
'B': 'SD',
875895
'CM': 'eMMC',
896+
'CM3': 'eMMC / off-board',
876897
}.get(model, 'MicroSD')
877898
usb = {
878899
'A': 1,
879900
'A+': 1,
880901
'Zero': 1,
881902
'B': 2,
882903
'CM': 1,
904+
'CM3': 1,
883905
}.get(model, 4)
884906
ethernet = {
885907
'A': 0,
886908
'A+': 0,
887909
'Zero': 0,
888910
'CM': 0,
911+
'CM3': 0,
889912
}.get(model, 1)
890913
wifi = {
891914
'3B': True,
@@ -896,6 +919,7 @@ def from_revision(cls, revision):
896919
csi = {
897920
'Zero': 0 if pcb_revision == '1.2' else 1,
898921
'CM': 2,
922+
'CM3': 2,
899923
}.get(model, 1)
900924
dsi = {
901925
'Zero': 0,
@@ -904,12 +928,14 @@ def from_revision(cls, revision):
904928
'A': {'P1': REV2_P1, 'P5': REV2_P5},
905929
'B': {'P1': REV1_P1} if pcb_revision == '1.0' else {'P1': REV2_P1, 'P5': REV2_P5},
906930
'CM': {'SODIMM': CM_SODIMM},
931+
'CM3': {'SODIMM': CM3_SODIMM},
907932
}.get(model, {'P1': PLUS_P1})
908933
board = {
909934
'A': A_BOARD,
910935
'B': REV1_BOARD if pcb_revision == '1.0' else REV2_BOARD,
911936
'A+': APLUS_BOARD,
912-
'CM': CM_BOARD,
937+
'CM': CM_BOARD % 1,
938+
'CM3': CM_BOARD % 3,
913939
'Zero': ZERO12_BOARD if pcb_revision == '1.2' else ZERO13_BOARD,
914940
}.get(model, BPLUS_BOARD)
915941
except KeyError:

0 commit comments

Comments
 (0)