atmel-samd: Update README and add pinout tables that map MCU names
to names in the board module and explain pin capabilities. Fixes #149
This commit is contained in:
parent
b69507fc64
commit
3660023046
8 changed files with 478 additions and 141 deletions
|
|
@ -1,18 +1,131 @@
|
||||||
SAMD21x18
|
SAMD21x18
|
||||||
=========
|
=========
|
||||||
|
|
||||||
This port brings MicroPython to SAMD21x18 based development boards including the
|
This port brings MicroPython to SAMD21x18 based development boards under the name
|
||||||
Arduino Zero, Adafruit Feather M0 Basic and Adafruit M0 Bluefruit LE.
|
CircuitPython. Supported boards include the Adafruit CircuitPlayground Express,
|
||||||
|
Adafruit Feather M0 Express, Adafruit Metro M0 Express, Arduino Zero, Adafruit
|
||||||
|
Feather M0 Basic and Adafruit M0 Bluefruit LE.
|
||||||
|
|
||||||
|
Pinout
|
||||||
|
------
|
||||||
|
|
||||||
|
All of the boards share the same core pin functionality but call pins by
|
||||||
|
different names. The table below matches the pin order in
|
||||||
|
`the datasheet <http://ww1.microchip.com/downloads/en/DeviceDoc/40001882A.pdf>`_
|
||||||
|
and omits the pins only available on the largest package because all supported
|
||||||
|
boards use smaller version.
|
||||||
|
|
||||||
|
===================== =============== =========================== ==================== ================ ================== ========================= ================ ================
|
||||||
|
`microcontroller.pin` `board`
|
||||||
|
--------------------- -----------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
Datasheet arduino_zero circuitplayground_express feather_m0_adalogger feather_m0_basic feather_m0_express gemma_m0 metro_m0_express trinket_m0
|
||||||
|
===================== =============== =========================== ==================== ================ ================== ========================= ================ ================
|
||||||
|
PA00 ``ACCELEROMETER_SDA`` ``APA102_MOSI`` ``APA102_MOSI``
|
||||||
|
PA01 ``ACCELEROMETER_SCL`` ``APA102_SCK`` ``APA102_SCK``
|
||||||
|
PA02 ``A0`` ``A0`` / ``SPEAKER`` ``A0`` ``A0`` ``A0`` ``A0`` / ``D1`` ``A0`` ``D1`` / ``A0``
|
||||||
|
PA03
|
||||||
|
PB08 ``A1`` ``A7`` / ``TX`` ``A1`` ``A1`` ``A1`` ``A1``
|
||||||
|
PB09 ``A2`` ``A6`` / ``RX`` ``A2`` ``A2`` ``A2`` ``A2``
|
||||||
|
PA04 ``A3`` ``IR_PROXIMITY`` ``A3`` ``A3`` ``A3`` ``D0`` / ``TX`` / ``SDA`` ``A3``
|
||||||
|
PA05 ``A4`` ``A1`` ``A4`` ``A4`` ``A4`` ``D2`` / ``RX`` / ``SCL`` ``A4``
|
||||||
|
PA06 ``D8`` ``A2`` ``NEOPIXEL`` ``D8`` ``D4`` / ``TX``
|
||||||
|
PA07 ``D9`` ``A3`` ``D9`` ``D9`` ``D9`` ``D9`` ``D3`` / ``RX``
|
||||||
|
PA08 ``D4`` ``MICROPHONE_DO`` ``SD_CS`` ``D4`` ``D0`` / ``SDA``
|
||||||
|
PA09 ``D3`` ``TEMPERATURE`` / ``A9`` ``D3`` ``D2`` / ``SCL``
|
||||||
|
PA10 ``D1`` / ``TX`` ``MICROPHONE_SCK`` ``D1`` / ``TX`` ``D1`` / ``TX`` ``D1`` / ``TX`` ``D1`` / ``TX`` ``D13``
|
||||||
|
PA11 ``D0`` / ``RX`` ``LIGHT`` / ``A8`` ``D0`` / ``RX`` ``D0`` / ``RX`` ``D0`` / ``RX`` ``D0`` / ``RX``
|
||||||
|
PB10 ``MOSI`` ``MOSI`` ``MOSI`` ``MOSI`` ``MOSI``
|
||||||
|
PB11 ``SCK`` ``SCK`` ``SCK`` ``SCK`` ``SCK``
|
||||||
|
PA12 ``MISO`` ``REMOTEIN`` / ``IR_RX`` ``MISO`` ``MISO`` ``MISO`` ``MISO``
|
||||||
|
PA13 ``ACCELEROMETER_INTERRUPT`` ``FLASH_CS``
|
||||||
|
PA14 ``D2`` ``BUTTON_B`` / ``D5`` ``D2``
|
||||||
|
PA15 ``D5`` ``SLIDE_SWITCH`` / ``D7`` ``D5`` ``D5`` ``D5`` ``D5``
|
||||||
|
PA16 ``D11`` ``MISO`` ``D11`` ``D11`` ``D11`` ``D11``
|
||||||
|
PA17 ``D13`` ``D13`` ``D13`` ``D13`` ``D13`` ``D13``
|
||||||
|
PA18 ``D10`` ``D10`` ``D10`` ``D10`` ``D10``
|
||||||
|
PA19 ``D12`` ``D12`` ``D12`` ``D12`` ``D12``
|
||||||
|
PA20 ``D6`` ``MOSI`` ``D6`` ``D6`` ``D6`` ``D6``
|
||||||
|
PA21 ``D7`` ``SCK`` ``D7``
|
||||||
|
PA22 ``SDA`` ``SDA`` ``SDA`` ``SDA`` ``SDA``
|
||||||
|
PA23 ``SCL`` ``REMOTEOUT`` / ``IR_TX`` ``SCL`` ``SCL`` ``SCL`` ``L`` / ``D13`` ``SCL``
|
||||||
|
PA24
|
||||||
|
PA25
|
||||||
|
PB22 ``FLASH_CS``
|
||||||
|
PB23 ``NEOPIXEL`` / ``D8``
|
||||||
|
PA27
|
||||||
|
PA28 ``BUTTON_A`` / ``D4``
|
||||||
|
PA29
|
||||||
|
PA30 ``SPEAKER_ENABLE`` ``NEOPIXEL``
|
||||||
|
PA31
|
||||||
|
PB02 ``A5`` ``A5`` / ``SDA`` ``A5`` ``A5`` ``A5`` ``A5``
|
||||||
|
PB03 ``A4`` / ``SCL``
|
||||||
|
===================== =============== =========================== ==================== ================ ================== ========================= ================ ================
|
||||||
|
|
||||||
|
Here is a table about which pins can do what in CircuitPython terms. However,
|
||||||
|
just because something is listed, doesn't mean it will always work. Existing use
|
||||||
|
of other pins and functionality will impact your ability to use a pin for your
|
||||||
|
desired purpose. For example, only certain combinations of SPI pins will work
|
||||||
|
because they use shared hardware internally.
|
||||||
|
|
||||||
|
===================== ======== ========= ========= ======= ======= ======= ========= ========= ======= ========== ========== ========= ========= ========= ============ ======= ======= =========
|
||||||
|
`microcontroller.pin` `analogio` `audioio` `bitbangio` `busio` `digitalio` `pulseio` `touchio`
|
||||||
|
--------------------- ------------------- --------- ------------------------- -------------------------------------------------------------------------------------- ------------ ---------------- ---------
|
||||||
|
Datasheet AnalogIn AnalogOut AudioOut I2C OneWire SPI I2C - SDA I2C - SCL OneWire SPI - MISO SPI - MOSI SPI - SCK UART - RX UART - TX DigitalInOut PulseIn PWMOut TouchIn
|
||||||
|
===================== ======== ========= ========= ======= ======= ======= ========= ========= ======= ========== ========== ========= ========= ========= ============ ======= ======= =========
|
||||||
|
PA00 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PA01 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PA02 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PA03 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PB08 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PB09 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PA04 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PA05 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PA06 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PA07 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PA08 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PA09 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PA10 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PA11 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PB10 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PB11 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PA12 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PA13 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PA14 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PA15 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PA16 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PA17 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PA18 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PA19 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PA20 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PA21 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PA22 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PA23 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PA24
|
||||||
|
PA25
|
||||||
|
PB22 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PB23 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PA27 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PA28 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PA29 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PA30 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PA31 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PB02 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
PB03 **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes** **Yes**
|
||||||
|
===================== ======== ========= ========= ======= ======= ======= ========= ========= ======= ========== ========== ========= ========= ========= ============ ======= ======= =========
|
||||||
|
|
||||||
Building
|
Building
|
||||||
--------
|
--------
|
||||||
|
|
||||||
To build for the Arduino Zero:
|
To build for the Arduino Zero:
|
||||||
|
|
||||||
|
.. code-block:: shell
|
||||||
|
|
||||||
make
|
make
|
||||||
|
|
||||||
To build for other boards you must change it by setting ``BOARD``. For example:
|
To build for other boards you must change it by setting ``BOARD``. For example:
|
||||||
|
|
||||||
|
.. code-block:: shell
|
||||||
|
|
||||||
make BOARD=feather_m0_basic
|
make BOARD=feather_m0_basic
|
||||||
|
|
||||||
Board names are the directory names in the `boards <https://github.com/adafruit/circuitpython/tree/master/atmel-samd/boards>`_ folder.
|
Board names are the directory names in the `boards <https://github.com/adafruit/circuitpython/tree/master/atmel-samd/boards>`_ folder.
|
||||||
|
|
@ -41,7 +154,7 @@ platforms.
|
||||||
|
|
||||||
openocd -f ~/Library/Arduino15/packages/arduino/hardware/samd/1.6.6/variants/arduino_zero/openocd_scripts/arduino_zero.cfg
|
openocd -f ~/Library/Arduino15/packages/arduino/hardware/samd/1.6.6/variants/arduino_zero/openocd_scripts/arduino_zero.cfg
|
||||||
|
|
||||||
In another terminal from `micropython/atmel-samd`:
|
In another terminal from ``micropython/atmel-samd``:
|
||||||
|
|
||||||
arm-none-eabi-gdb build-arduino_zero/firmware.elf
|
arm-none-eabi-gdb build-arduino_zero/firmware.elf
|
||||||
(gdb) tar ext :3333
|
(gdb) tar ext :3333
|
||||||
|
|
@ -70,7 +183,7 @@ Mass storage
|
||||||
^^^^^^^^^^^^
|
^^^^^^^^^^^^
|
||||||
|
|
||||||
All boards will also show up as a mass storage device. Make sure to eject it
|
All boards will also show up as a mass storage device. Make sure to eject it
|
||||||
before referring to any files.
|
before resetting or disconnecting the board.
|
||||||
|
|
||||||
Port Specific modules
|
Port Specific modules
|
||||||
---------------------
|
---------------------
|
||||||
|
|
|
||||||
224
atmel-samd/tools/gen_pin_name_table.py
Normal file
224
atmel-samd/tools/gen_pin_name_table.py
Normal file
|
|
@ -0,0 +1,224 @@
|
||||||
|
# This file is part of the Micro Python project, http://micropython.org/
|
||||||
|
#
|
||||||
|
# The MIT License (MIT)
|
||||||
|
#
|
||||||
|
# Copyright (c) 2017 Scott Shawcroft for Adafruit Industries
|
||||||
|
#
|
||||||
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
# of this software and associated documentation files (the "Software"), to deal
|
||||||
|
# in the Software without restriction, including without limitation the rights
|
||||||
|
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
# copies of the Software, and to permit persons to whom the Software is
|
||||||
|
# furnished to do so, subject to the following conditions:
|
||||||
|
#
|
||||||
|
# The above copyright notice and this permission notice shall be included in
|
||||||
|
# all copies or substantial portions of the Software.
|
||||||
|
#
|
||||||
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
|
# THE SOFTWARE.
|
||||||
|
|
||||||
|
# This helper generates the pinout tables in ../README.rst.
|
||||||
|
|
||||||
|
import os
|
||||||
|
import os.path
|
||||||
|
|
||||||
|
pins = ["PA00", "PA01", "PA02", "PA03", "PB08", "PB09", "PA04", "PA05", "PA06",
|
||||||
|
"PA07", "PA08", "PA09", "PA10", "PA11", "PB10", "PB11", "PA12", "PA13",
|
||||||
|
"PA14", "PA15", "PA16", "PA17", "PA18", "PA19", "PA20", "PA21", "PA22",
|
||||||
|
"PA23", "PA24", "PA25", "PB22", "PB23", "PA27", "PA28", "PA29", "PA30",
|
||||||
|
"PA31", "PB02", "PB03"]
|
||||||
|
|
||||||
|
# Dictionary keys: [board][pin] = list of pin names
|
||||||
|
mapping = {}
|
||||||
|
|
||||||
|
QSTR = " { MP_OBJ_NEW_QSTR(MP_QSTR_"
|
||||||
|
|
||||||
|
for board in os.listdir("boards"):
|
||||||
|
if not os.path.isdir("boards/" + board):
|
||||||
|
continue
|
||||||
|
mapping[board] = {}
|
||||||
|
with open("boards/" + board + "/pins.c", "r") as f:
|
||||||
|
for line in f:
|
||||||
|
if line.startswith(QSTR):
|
||||||
|
board_name, _, pin = line.split(")")
|
||||||
|
board_name = board_name[len(QSTR):]
|
||||||
|
pin = pin[-8:-4]
|
||||||
|
if pin not in mapping[board]:
|
||||||
|
mapping[board][pin] = []
|
||||||
|
mapping[board][pin].append(board_name)
|
||||||
|
|
||||||
|
column_width = {}
|
||||||
|
for board in mapping:
|
||||||
|
column_width[board] = len(board)
|
||||||
|
for pin in mapping[board]:
|
||||||
|
l = len(" / ".join("``" + x + "``" for x in mapping[board][pin]))
|
||||||
|
column_width[board] = max(l, column_width[board])
|
||||||
|
|
||||||
|
first_column_width = len("`microcontroller.pin`")
|
||||||
|
print("=" * first_column_width, end="")
|
||||||
|
total_board_width = -2
|
||||||
|
for board in column_width:
|
||||||
|
column = " " + "=" * column_width[board]
|
||||||
|
total_board_width += len(column)
|
||||||
|
print(column, end="")
|
||||||
|
|
||||||
|
print()
|
||||||
|
print("`microcontroller.pin` `board`")
|
||||||
|
print("-" * first_column_width + " " + "-" * total_board_width)
|
||||||
|
|
||||||
|
print("Datasheet".ljust(first_column_width), end="")
|
||||||
|
for board in column_width:
|
||||||
|
print(" " + board.ljust(column_width[board]), end="")
|
||||||
|
print()
|
||||||
|
|
||||||
|
print("=" * first_column_width, end="")
|
||||||
|
for board in column_width:
|
||||||
|
column = " " + "=" * column_width[board]
|
||||||
|
print(column, end="")
|
||||||
|
print()
|
||||||
|
|
||||||
|
for pin in pins:
|
||||||
|
print(pin.ljust(first_column_width), end="")
|
||||||
|
for board in column_width:
|
||||||
|
if pin in mapping[board]:
|
||||||
|
names = " / ".join("``" + x + "``" for x in mapping[board][pin])
|
||||||
|
print(" " + names.ljust(column_width[board]), end="")
|
||||||
|
else:
|
||||||
|
print(" " * (column_width[board] + 2), end="")
|
||||||
|
print()
|
||||||
|
|
||||||
|
print("=" * first_column_width, end="")
|
||||||
|
for board in column_width:
|
||||||
|
column = " " + "=" * column_width[board]
|
||||||
|
print(column, end="")
|
||||||
|
print()
|
||||||
|
|
||||||
|
print()
|
||||||
|
print()
|
||||||
|
# Generate pin capabilities too.
|
||||||
|
|
||||||
|
ALL_BUT_USB = list(pins)
|
||||||
|
ALL_BUT_USB.remove("PA24")
|
||||||
|
ALL_BUT_USB.remove("PA25")
|
||||||
|
|
||||||
|
# dictionary is [module][class] = [pins]
|
||||||
|
capabilities = {
|
||||||
|
"analogio" : {
|
||||||
|
"AnalogIn" : ["PA02", "PA03", "PB08", "PB09", "PA04", "PA05", "PA06",
|
||||||
|
"PA07", "PA08", "PA09", "PA10", "PA11", "PB02", "PB03"],
|
||||||
|
"AnalogOut": ["PA02"]
|
||||||
|
},
|
||||||
|
"audioio" : {
|
||||||
|
"AudioOut": ["PA02"]
|
||||||
|
},
|
||||||
|
"bitbangio": {
|
||||||
|
"I2C": ALL_BUT_USB,
|
||||||
|
"OneWire": ALL_BUT_USB,
|
||||||
|
"SPI": ALL_BUT_USB
|
||||||
|
},
|
||||||
|
"busio": {
|
||||||
|
"I2C - SDA": ["PA00", "PB08", "PA08", "PA12", "PA16", "PA22", "PB02"], # SERCOM pad 0
|
||||||
|
"I2C - SCL": ["PA01", "PB09", "PA09", "PA13", "PA17", "PA23", "PB03"], # SERCOM pad 1
|
||||||
|
"OneWire": ALL_BUT_USB,
|
||||||
|
"SPI - MISO": ["PA00", "PA01", "PB08", "PB09", "PA04", "PA05", "PA06",
|
||||||
|
"PA07", "PA08", "PA09", "PA10", "PA11", "PB10", "PB11",
|
||||||
|
"PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PA18",
|
||||||
|
"PA19", "PA20", "PA21", "PA22", "PA23", "PB22", "PB23",
|
||||||
|
"PA30", "PA31", "PB02", "PB03"], # any SERCOM pad
|
||||||
|
"SPI - MOSI": ["PA00", "PB08", "PA04", "PA06", "PA08", "PA10", "PA11",
|
||||||
|
"PB10", "PB11", "PA14", "PA15", "PA16", "PA18", "PA19",
|
||||||
|
"PA20", "PA21", "PA22", "PB22", "PB23", "PA30", "PA31",
|
||||||
|
"PB02"], # any pad but 1
|
||||||
|
"SPI - SCK": ["PA01", "PB09", "PA05", "PA07", "PA09", "PA11", "PB11",
|
||||||
|
"PA13", "PA15", "PA17", "PA19", "PA21", "PA23", "PB23",
|
||||||
|
"PA31", "PB03"], # 1 or 3
|
||||||
|
"UART - RX": ["PA00", "PA01", "PB08", "PB09", "PA04", "PA05", "PA06",
|
||||||
|
"PA07", "PA08", "PA09", "PA10", "PA11", "PB10", "PB11",
|
||||||
|
"PA12", "PA13", "PA14", "PA15", "PA16", "PA17", "PA18",
|
||||||
|
"PA19", "PA20", "PA21", "PA22", "PA23", "PB22", "PB23",
|
||||||
|
"PA30", "PA31", "PB02", "PB03"], # any pad
|
||||||
|
"UART - TX": ["PA00", "PB08", "PA04", "PA06", "PA08", "PA10", "PB10",
|
||||||
|
"PA12", "PA14", "PA16", "PA18", "PA20", "PA22", "PB22",
|
||||||
|
"PA30", "PB02"] # pad 0 or 2
|
||||||
|
},
|
||||||
|
"digitalio": {
|
||||||
|
"DigitalInOut": ALL_BUT_USB
|
||||||
|
},
|
||||||
|
"pulseio": {
|
||||||
|
"PulseIn": ALL_BUT_USB,
|
||||||
|
"PWMOut": ["PA01", "PB09", "PA04", "PA05", "PA06", "PA07", "PA08",
|
||||||
|
"PA09", "PA10", "PA11", "PB10", "PB11", "PA12", "PA13",
|
||||||
|
"PA14", "PA15", "PA16", "PA17", "PA18", "PA19", "PA20",
|
||||||
|
"PA21", "PA22", "PA23", "PA30", "PA31"]
|
||||||
|
},
|
||||||
|
"touchio": {
|
||||||
|
"TouchIn": ["PA02", "PA03", "PB08", "PB09", "PA04", "PA05", "PA06",
|
||||||
|
"PA07", "PB02", "PB03"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
column_width = {}
|
||||||
|
for module in capabilities:
|
||||||
|
for c in capabilities[module]:
|
||||||
|
column_width[module + c] = max(len("**Yes**"), len(c))
|
||||||
|
|
||||||
|
module_width = {}
|
||||||
|
for module in capabilities:
|
||||||
|
module_width[module] = 0
|
||||||
|
for c in capabilities[module]:
|
||||||
|
module_width[module] += column_width[module + c] + 2
|
||||||
|
module_width[module] -= 2
|
||||||
|
|
||||||
|
if module_width[module] < (len(module) + 2):
|
||||||
|
column_width[module + c] += (len(module) + 2 - module_width[module])
|
||||||
|
module_width[module] = len(module) + 2
|
||||||
|
|
||||||
|
first_column_width = len("`microcontroller.pin`")
|
||||||
|
print("=" * first_column_width, end="")
|
||||||
|
for module in capabilities:
|
||||||
|
for c in capabilities[module]:
|
||||||
|
print(" " + "=" * column_width[module + c], end="")
|
||||||
|
print()
|
||||||
|
|
||||||
|
print("`microcontroller.pin`", end="")
|
||||||
|
for module in capabilities:
|
||||||
|
print(" " + ("`" + module + "`").ljust(module_width[module]), end="")
|
||||||
|
print()
|
||||||
|
|
||||||
|
print("-" * first_column_width, end="")
|
||||||
|
for module in capabilities:
|
||||||
|
print(" " + "-" * module_width[module], end="")
|
||||||
|
print()
|
||||||
|
|
||||||
|
print("Datasheet".ljust(first_column_width), end="")
|
||||||
|
for module in capabilities:
|
||||||
|
for c in capabilities[module]:
|
||||||
|
print(" " + c.ljust(column_width[module + c]), end="")
|
||||||
|
print()
|
||||||
|
|
||||||
|
print("=" * first_column_width, end="")
|
||||||
|
for module in capabilities:
|
||||||
|
for c in capabilities[module]:
|
||||||
|
print(" " + "=" * column_width[module + c], end="")
|
||||||
|
print()
|
||||||
|
|
||||||
|
for pin in pins:
|
||||||
|
print(pin.ljust(first_column_width), end="")
|
||||||
|
for module in capabilities:
|
||||||
|
for c in capabilities[module]:
|
||||||
|
if pin in capabilities[module][c]:
|
||||||
|
print(" " + "**Yes**".ljust(column_width[module + c]), end="")
|
||||||
|
else:
|
||||||
|
print(" " * (column_width[module + c] + 2), end="")
|
||||||
|
print()
|
||||||
|
|
||||||
|
print("=" * first_column_width, end="")
|
||||||
|
for module in capabilities:
|
||||||
|
for c in capabilities[module]:
|
||||||
|
print(" " + "=" * column_width[module + c], end="")
|
||||||
|
print()
|
||||||
Loading…
Reference in a new issue