From 4e2798dcd080b61479fbe2382184d24dc505440e Mon Sep 17 00:00:00 2001 From: Andrew Scheller Date: Fri, 3 Mar 2017 11:47:04 +0000 Subject: [PATCH 1/8] Add Compute Module 3 details (on top of v1.3.1.post1) --- gpiozero/pins/data.py | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/gpiozero/pins/data.py b/gpiozero/pins/data.py index 2d39fe1..2eaa85c 100644 --- a/gpiozero/pins/data.py +++ b/gpiozero/pins/data.py @@ -235,6 +235,23 @@ CM_SODIMM = { 199: ('VBAT', False), 200: ('VBAT', False), } +CM3_SODIMM = CM_SODIMM.copy() +CM3_SODIMM.update({ + 4: ('NC / SDX VREF', False), + 6: ('NC / SDX VREF', False), + 8: (GND, False), + 10: ('NC / SDX CLK', False), + 12: ('NC / SDX CMD', False), + 14: (GND, False), + 16: ('NC / SDX D0', False), + 18: ('NC / SDX D1', False), + 20: (GND, False), + 22: ('NC / SDX D2', False), + 24: ('NC / SDX D3', False), + 88: ('HDMI HPD N 1V8', False), + 90: ('EMMC EN N 1V8', False), + }) + # The following data is sourced from a combination of the following locations: # # http://elinux.org/RPi_HardwareHistory @@ -266,6 +283,7 @@ PI_REVISIONS = { 0xa02082: ('3B', '1.2', '2016Q1', 'BCM2837', 'Sony', 1024, 'MicroSD', 4, 1, True, True, 1, 1, {'P1': PLUS_P1}, ), 0xa22082: ('3B', '1.2', '2016Q1', 'BCM2837', 'Embest', 1024, 'MicroSD', 4, 1, True, True, 1, 1, {'P1': PLUS_P1}, ), 0x900093: ('Zero', '1.3', '2016Q2', 'BCM2835', 'Sony', 512, 'MicroSD', 1, 0, False, False, 1, 0, {'P1': PLUS_P1}, ), + 0xa020a0: ('CM3', '1.0', '2017Q1', 'BCM2837', 'Sony', 1024, 'eMMC / off-board', 1, 0, False, False, 2, 2, {'SODIMM': CM3_SODIMM},), } @@ -500,7 +518,7 @@ def _parse_pi_revision(revision): # MMM - Memory size (0=256, 1=512, 2=1024) # CCCC - Manufacturer (0=Sony, 1=Egoman, 2=Embest) # PPPP - Processor (0=2835, 1=2836, 2=2837) - # TTTTTTTT - Type (0=A, 1=B, 2=A+, 3=B+, 4=2B, 5=Alpha (??), 6=CM, 8=3B, 9=Zero) + # TTTTTTTT - Type (0=A, 1=B, 2=A+, 3=B+, 4=2B, 5=Alpha (??), 6=CM, 8=3B, 9=Zero, 10=CM3) # RRRR - Revision (0, 1, or 2) if not (revision & 0x800000): raise PinUnknownPi('cannot parse "%x"; this is not a new-style revision' % revision) @@ -514,6 +532,7 @@ def _parse_pi_revision(revision): 6: 'CM', 8: '3B', 9: 'Zero', + 10: 'CM3', }[(revision & 0xff0) >> 4] if model in ('A', 'B'): pcb_revision = { @@ -532,6 +551,7 @@ def _parse_pi_revision(revision): 'CM': '2014Q2', '3B': '2016Q1', 'Zero': '2015Q4' if pcb_revision == '1.0' else '2016Q2', + 'CM3': '2017Q1', }[model] soc = { 0: 'BCM2835', @@ -552,6 +572,7 @@ def _parse_pi_revision(revision): 'A': 'SD', 'B': 'SD', 'CM': 'eMMC', + 'CM3': 'eMMC / off-board', }.get(model, 'MicroSD') usb = { 'A': 1, @@ -559,12 +580,14 @@ def _parse_pi_revision(revision): 'Zero': 1, 'B': 2, 'CM': 0, + 'CM3': 1, }.get(model, 4) ethernet = { 'A': 0, 'A+': 0, 'Zero': 0, 'CM': 0, + 'CM3': 0, }.get(model, 1) wifi = { '3B': True, @@ -575,6 +598,7 @@ def _parse_pi_revision(revision): csi = { 'Zero': 0 if pcb_revision == '1.0' else 1, 'CM': 2, + 'CM3': 2, }.get(model, 1) dsi = { 'Zero': 0, @@ -583,6 +607,7 @@ def _parse_pi_revision(revision): 'A': {'P1': REV2_P1, 'P5': REV2_P5}, 'B': {'P1': REV2_P1, 'P5': REV2_P5} if pcb_revision == '2.0' else {'P1': REV1_P1}, 'CM': {'SODIMM': CM_SODIMM}, + 'CM3': {'SODIMM': CM3_SODIMM}, }.get(model, {'P1': PLUS_P1}) except KeyError: raise PinUnknownPi('unable to parse new-style revision "%x"' % revision) From dc0c119cbbd1c3e6bff75d308dc74f433257a86d Mon Sep 17 00:00:00 2001 From: Andrew Scheller Date: Fri, 3 Mar 2017 12:00:40 +0000 Subject: [PATCH 2/8] Add Sony Japan manufactured Pi 3B details (on top of v1.3.1.post1) --- gpiozero/pins/data.py | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/gpiozero/pins/data.py b/gpiozero/pins/data.py index 2eaa85c..8310d42 100644 --- a/gpiozero/pins/data.py +++ b/gpiozero/pins/data.py @@ -284,6 +284,7 @@ PI_REVISIONS = { 0xa22082: ('3B', '1.2', '2016Q1', 'BCM2837', 'Embest', 1024, 'MicroSD', 4, 1, True, True, 1, 1, {'P1': PLUS_P1}, ), 0x900093: ('Zero', '1.3', '2016Q2', 'BCM2835', 'Sony', 512, 'MicroSD', 1, 0, False, False, 1, 0, {'P1': PLUS_P1}, ), 0xa020a0: ('CM3', '1.0', '2017Q1', 'BCM2837', 'Sony', 1024, 'eMMC / off-board', 1, 0, False, False, 2, 2, {'SODIMM': CM3_SODIMM},), + 0xa32082: ('3B', '1.2', '2016Q4', 'BCM2837', 'Sony Japan', 1024, 'MicroSD', 4, 1, True, True, 1, 1, {'P1': PLUS_P1}, ), } @@ -516,7 +517,7 @@ def _parse_pi_revision(revision): # uuuuuuuu - Unused # F - New flag (1=valid new-style revision, 0=old-style) # MMM - Memory size (0=256, 1=512, 2=1024) - # CCCC - Manufacturer (0=Sony, 1=Egoman, 2=Embest) + # CCCC - Manufacturer (0=Sony, 1=Egoman, 2=Embest, 3=Sony Japan) # PPPP - Processor (0=2835, 1=2836, 2=2837) # TTTTTTTT - Type (0=A, 1=B, 2=A+, 3=B+, 4=2B, 5=Alpha (??), 6=CM, 8=3B, 9=Zero, 10=CM3) # RRRR - Revision (0, 1, or 2) @@ -542,17 +543,6 @@ def _parse_pi_revision(revision): }[revision & 0x0f] else: pcb_revision = '1.%d' % (revision & 0x0f) - released = { - 'A': '2013Q1', - 'B': '2012Q1' if pcb_revision == '1.0' else '2012Q4', - 'A+': '2014Q4', - 'B+': '2014Q3', - '2B': '2015Q1', - 'CM': '2014Q2', - '3B': '2016Q1', - 'Zero': '2015Q4' if pcb_revision == '1.0' else '2016Q2', - 'CM3': '2017Q1', - }[model] soc = { 0: 'BCM2835', 1: 'BCM2836', @@ -562,12 +552,24 @@ def _parse_pi_revision(revision): 0: 'Sony', 1: 'Egoman', 2: 'Embest', + 3: 'Sony Japan', }[(revision & 0xf0000) >> 16] memory = { 0: 256, 1: 512, 2: 1024, }[(revision & 0x700000) >> 20] + released = { + 'A': '2013Q1', + 'B': '2012Q1' if pcb_revision == '1.0' else '2012Q4', + 'A+': '2014Q4', + 'B+': '2014Q3', + '2B': '2015Q1', + 'CM': '2014Q2', + '3B': '2016Q1' if manufacturer == 'Sony' or manufacturer == 'Embest' else '2016Q4', + 'Zero': '2015Q4' if pcb_revision == '1.0' else '2016Q2', + 'CM3': '2017Q1', + }[model] storage = { 'A': 'SD', 'B': 'SD', From 8c7bd5f51f5987398d478a16438b765600d9d1eb Mon Sep 17 00:00:00 2001 From: Andrew Scheller Date: Fri, 3 Mar 2017 12:19:33 +0000 Subject: [PATCH 3/8] Add Pi Zero W details (on top of v1.3.1.post1) --- gpiozero/pins/data.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/gpiozero/pins/data.py b/gpiozero/pins/data.py index 8310d42..2b76d4e 100644 --- a/gpiozero/pins/data.py +++ b/gpiozero/pins/data.py @@ -285,6 +285,7 @@ PI_REVISIONS = { 0x900093: ('Zero', '1.3', '2016Q2', 'BCM2835', 'Sony', 512, 'MicroSD', 1, 0, False, False, 1, 0, {'P1': PLUS_P1}, ), 0xa020a0: ('CM3', '1.0', '2017Q1', 'BCM2837', 'Sony', 1024, 'eMMC / off-board', 1, 0, False, False, 2, 2, {'SODIMM': CM3_SODIMM},), 0xa32082: ('3B', '1.2', '2016Q4', 'BCM2837', 'Sony Japan', 1024, 'MicroSD', 4, 1, True, True, 1, 1, {'P1': PLUS_P1}, ), + 0x9000c1: ('Zero W', '1.1', '2017Q1', 'BCM2835', 'Sony', 512, 'MicroSD', 1, 0, True, True, 1, 0, {'P1': PLUS_P1}, ), } @@ -519,7 +520,7 @@ def _parse_pi_revision(revision): # MMM - Memory size (0=256, 1=512, 2=1024) # CCCC - Manufacturer (0=Sony, 1=Egoman, 2=Embest, 3=Sony Japan) # PPPP - Processor (0=2835, 1=2836, 2=2837) - # TTTTTTTT - Type (0=A, 1=B, 2=A+, 3=B+, 4=2B, 5=Alpha (??), 6=CM, 8=3B, 9=Zero, 10=CM3) + # TTTTTTTT - Type (0=A, 1=B, 2=A+, 3=B+, 4=2B, 5=Alpha (??), 6=CM, 8=3B, 9=Zero, 10=CM3, 12=Zero W) # RRRR - Revision (0, 1, or 2) if not (revision & 0x800000): raise PinUnknownPi('cannot parse "%x"; this is not a new-style revision' % revision) @@ -534,6 +535,7 @@ def _parse_pi_revision(revision): 8: '3B', 9: 'Zero', 10: 'CM3', + 12: 'Zero W, }[(revision & 0xff0) >> 4] if model in ('A', 'B'): pcb_revision = { @@ -569,6 +571,7 @@ def _parse_pi_revision(revision): '3B': '2016Q1' if manufacturer == 'Sony' or manufacturer == 'Embest' else '2016Q4', 'Zero': '2015Q4' if pcb_revision == '1.0' else '2016Q2', 'CM3': '2017Q1', + 'Zero W': '2017Q1', }[model] storage = { 'A': 'SD', @@ -580,6 +583,7 @@ def _parse_pi_revision(revision): 'A': 1, 'A+': 1, 'Zero': 1, + 'Zero W': 1, 'B': 2, 'CM': 0, 'CM3': 1, @@ -588,22 +592,27 @@ def _parse_pi_revision(revision): 'A': 0, 'A+': 0, 'Zero': 0, + 'Zero W': 0, 'CM': 0, 'CM3': 0, }.get(model, 1) wifi = { '3B': True, + 'Zero W': True, }.get(model, False) bluetooth = { '3B': True, + 'Zero W': True, }.get(model, False) csi = { 'Zero': 0 if pcb_revision == '1.0' else 1, + 'Zero W': 1, 'CM': 2, 'CM3': 2, }.get(model, 1) dsi = { 'Zero': 0, + 'Zero W': 0, }.get(model, csi) headers = { 'A': {'P1': REV2_P1, 'P5': REV2_P5}, From 71fed0e851f3d404646dbb0a950f61283761b597 Mon Sep 17 00:00:00 2001 From: Andrew Scheller Date: Fri, 3 Mar 2017 12:34:58 +0000 Subject: [PATCH 4/8] Add BCM2837-based Pi2B details (on top of v1.3.1.post1) --- gpiozero/pins/data.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gpiozero/pins/data.py b/gpiozero/pins/data.py index 2b76d4e..0780482 100644 --- a/gpiozero/pins/data.py +++ b/gpiozero/pins/data.py @@ -286,6 +286,7 @@ PI_REVISIONS = { 0xa020a0: ('CM3', '1.0', '2017Q1', 'BCM2837', 'Sony', 1024, 'eMMC / off-board', 1, 0, False, False, 2, 2, {'SODIMM': CM3_SODIMM},), 0xa32082: ('3B', '1.2', '2016Q4', 'BCM2837', 'Sony Japan', 1024, 'MicroSD', 4, 1, True, True, 1, 1, {'P1': PLUS_P1}, ), 0x9000c1: ('Zero W', '1.1', '2017Q1', 'BCM2835', 'Sony', 512, 'MicroSD', 1, 0, True, True, 1, 0, {'P1': PLUS_P1}, ), + 0xa22042: ('2B', '1.2', '2016Q3', 'BCM2837', 'Embest', 1024, 'MicroSD', 4, 1, False, False, 1, 1, {'P1': PLUS_P1}, ), } @@ -566,7 +567,7 @@ def _parse_pi_revision(revision): 'B': '2012Q1' if pcb_revision == '1.0' else '2012Q4', 'A+': '2014Q4', 'B+': '2014Q3', - '2B': '2015Q1', + '2B': '2015Q1' if pcb_revision == '1.1' else '2016Q3', 'CM': '2014Q2', '3B': '2016Q1' if manufacturer == 'Sony' or manufacturer == 'Embest' else '2016Q4', 'Zero': '2015Q4' if pcb_revision == '1.0' else '2016Q2', From 82050d3d5a79bba3dfc3888399c5269d1a806aca Mon Sep 17 00:00:00 2001 From: Andrew Scheller Date: Fri, 3 Mar 2017 12:40:35 +0000 Subject: [PATCH 5/8] Add details for 512MB Pi A+ (on top of v1.3.1.post1) --- gpiozero/pins/data.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gpiozero/pins/data.py b/gpiozero/pins/data.py index 0780482..4ab152a 100644 --- a/gpiozero/pins/data.py +++ b/gpiozero/pins/data.py @@ -287,6 +287,7 @@ PI_REVISIONS = { 0xa32082: ('3B', '1.2', '2016Q4', 'BCM2837', 'Sony Japan', 1024, 'MicroSD', 4, 1, True, True, 1, 1, {'P1': PLUS_P1}, ), 0x9000c1: ('Zero W', '1.1', '2017Q1', 'BCM2835', 'Sony', 512, 'MicroSD', 1, 0, True, True, 1, 0, {'P1': PLUS_P1}, ), 0xa22042: ('2B', '1.2', '2016Q3', 'BCM2837', 'Embest', 1024, 'MicroSD', 4, 1, False, False, 1, 1, {'P1': PLUS_P1}, ), + 0x900021: ('A+', '1.1', '2016Q3', 'BCM2835', 'Sony', 512, 'MicroSD', 1, 0, False, False, 1, 1, {'P1': PLUS_P1}, ), } @@ -565,7 +566,7 @@ def _parse_pi_revision(revision): released = { 'A': '2013Q1', 'B': '2012Q1' if pcb_revision == '1.0' else '2012Q4', - 'A+': '2014Q4', + 'A+': '2014Q4' if memory == 512 else '2016Q3', 'B+': '2014Q3', '2B': '2015Q1' if pcb_revision == '1.1' else '2016Q3', 'CM': '2014Q2', From 5b91e55e96fbf5a187ac9bad5e4a52f4debcbc57 Mon Sep 17 00:00:00 2001 From: Andrew Scheller Date: Fri, 3 Mar 2017 12:43:03 +0000 Subject: [PATCH 6/8] Add details for Chinese Pi Zero (on top of v1.3.1.post1) --- gpiozero/pins/data.py | 1 + 1 file changed, 1 insertion(+) diff --git a/gpiozero/pins/data.py b/gpiozero/pins/data.py index 4ab152a..343f001 100644 --- a/gpiozero/pins/data.py +++ b/gpiozero/pins/data.py @@ -288,6 +288,7 @@ PI_REVISIONS = { 0x9000c1: ('Zero W', '1.1', '2017Q1', 'BCM2835', 'Sony', 512, 'MicroSD', 1, 0, True, True, 1, 0, {'P1': PLUS_P1}, ), 0xa22042: ('2B', '1.2', '2016Q3', 'BCM2837', 'Embest', 1024, 'MicroSD', 4, 1, False, False, 1, 1, {'P1': PLUS_P1}, ), 0x900021: ('A+', '1.1', '2016Q3', 'BCM2835', 'Sony', 512, 'MicroSD', 1, 0, False, False, 1, 1, {'P1': PLUS_P1}, ), + 0x920093: ('Zero', '1.3', '2016Q2', 'BCM2835', 'Embest', 512, 'MicroSD', 1, 0, False, False, 1, 0, {'P1': PLUS_P1}, ), } From f5f827c0ece2e6f441e460a6144d0ea830464232 Mon Sep 17 00:00:00 2001 From: Ben Nuttall Date: Fri, 3 Mar 2017 13:11:49 +0000 Subject: [PATCH 7/8] Add missing quote --- gpiozero/pins/data.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gpiozero/pins/data.py b/gpiozero/pins/data.py index 343f001..af933ea 100644 --- a/gpiozero/pins/data.py +++ b/gpiozero/pins/data.py @@ -538,7 +538,7 @@ def _parse_pi_revision(revision): 8: '3B', 9: 'Zero', 10: 'CM3', - 12: 'Zero W, + 12: 'Zero W', }[(revision & 0xff0) >> 4] if model in ('A', 'B'): pcb_revision = { From 2e7543d3151ee048facb79c666ba5ea5053b33c4 Mon Sep 17 00:00:00 2001 From: Ben Nuttall Date: Fri, 3 Mar 2017 13:18:36 +0000 Subject: [PATCH 8/8] Release v1.3.2 --- docs/changelog.rst | 5 +++++ setup.py | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/docs/changelog.rst b/docs/changelog.rst index e360b9d..185c8e8 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -5,6 +5,11 @@ Changelog .. currentmodule:: gpiozero +Release 1.3.2 (2017-03-03) +========================== + +* Fix issue with :func:`pi_info` breaking on unknown Pi models + Release 1.3.1 (2016-08-31 ... later) ==================================== diff --git a/setup.py b/setup.py index 6cc8f26..e615e7f 100644 --- a/setup.py +++ b/setup.py @@ -22,7 +22,7 @@ except ImportError: pass __project__ = 'gpiozero' -__version__ = '1.3.1.post1' +__version__ = '1.3.2' __author__ = 'Ben Nuttall' __author_email__ = 'ben@raspberrypi.org' __url__ = 'https://github.com/RPi-Distro/python-gpiozero'