Compare commits
No commits in common. "main" and "esp32s2" have entirely different histories.
22 changed files with 9070 additions and 7278 deletions
5
.gitignore
vendored
5
.gitignore
vendored
|
|
@ -1,6 +1 @@
|
||||||
/workdir
|
/workdir
|
||||||
/*.fzpz
|
|
||||||
output.svg
|
|
||||||
pinlabels.svg
|
|
||||||
.DS_Store
|
|
||||||
.idea
|
|
||||||
BIN
Adafruit Feather RP2040.fzpz
Normal file
BIN
Adafruit Feather RP2040.fzpz
Normal file
Binary file not shown.
109
README.md
109
README.md
|
|
@ -1,104 +1,17 @@
|
||||||
# PrettyPins
|
# PrettyPins
|
||||||
|
|
||||||
PrettyPins is designed to create lovely pinout diagrams.
|
examples:
|
||||||
|
|
||||||

|
```
|
||||||
|
python3 parser.py "Adafruit Feather RP2040.fzpz" C:\Users\ladyada\Dropbox\micropython\circuitpython\ports\raspberrypi\boards\adafruit_feather_rp2040\pins.c rp2040pins.csv
|
||||||
|
```
|
||||||
|
|
||||||
## Requirements
|
```
|
||||||
The following is a list of required software and files necessary to run PrettyPins:
|
python3 parser.py "Adafruit ItsyBitsy RP2040.fzpz" C:\Users\ladyada\Dropbox\micropython\circuitpython\ports\raspberrypi\boards\adafruit_feather_rp2040\pins.c rp2040pins.csv
|
||||||
* A local clone of the PrettyPins repository
|
```
|
||||||
* The Fritzing object file for the board for which you are generating a diagram (available [here](https://github.com/adafruit/Fritzing-Library/tree/master/parts))
|
|
||||||
* An SVG editor, such as InkScape (free and available for all major OS's) or Illustrator (not free, and not available for all major OS's)
|
|
||||||
* Python 3 installed on your machine
|
|
||||||
* A local clone of the CircuitPython repository (for boards that support CircuitPython)
|
|
||||||
* The latest Arduino core for the board-type you're working with installed on your machine (for boards that support Arduino)
|
|
||||||
* `pip install` the following libraries (in a virtual environment or otherwise):
|
|
||||||
* `click`
|
|
||||||
* `lxml`
|
|
||||||
* `svgutils`
|
|
||||||
* `svgwrite`
|
|
||||||
* `xmltodict`
|
|
||||||
|
|
||||||
## Running PrettyPins
|
```
|
||||||
1. Place the Fritzing object file in the PrettyPins directory.
|
python3 parser.py "Adafruit QT Py RP2040.fzpz" C:\Users\ladyada\Dropbox\micropython\circuitpython\ports\raspberrypi\boards\adafruit_qtpy_rp2040\pins.c rp2040pins.csv
|
||||||
2. Run the PrettyPins command as shown below.
|
```
|
||||||
3. In the case of Arduino support, you must run the command TWICE for the Arduino pins to show up.
|
|
||||||
4. Open the `output.svg` and `pinlabels.svg` files into your SVG editor.
|
|
||||||
5. Save the `output.svg` file as something else, such as the name of the board you're diagramming.
|
|
||||||
* In Illustrator, when you "Save as", click "Ok", (and "Yes" to replacing the file if it already exists), then, under "Advanced Options", change "CSS Properties" to "Presentation Attributes". and "Decimal Places" to "4". Then, click Ok.
|
|
||||||
6. Copy the different seconds of labels out of `pinlabels.svg` into your working board file, and arrange them properly.
|
|
||||||
* For pins that are not easily accessible (such as NeoPixels or displays), either draw extra lines to the pin location, or create an icon for the pin next to the board and attach the labels to that.
|
|
||||||
* If you are replacing an old diagram (as with many of the ATtiny boards), include any notes from the original diagram in the new one.
|
|
||||||
7. Verify the pin label layout with Kattni by providing a screenshot of your working board file.
|
|
||||||
8. Finalise the diagram with the pin legend, any text blocks and the title/URL.
|
|
||||||
9. Save the SVG as follows:
|
|
||||||
* In Illustrator, do "Save as", click "Ok", (and "Yes" to replacing the file if it already exists), then, under "Advanced Options", change "CSS Properties" to "Presentation Attributes". and "Decimal Places" to "4". Then, click Ok.
|
|
||||||
* In Inkscape, save the file.
|
|
||||||
10. Finally, save the file as both a PDF and a PNG as well.
|
|
||||||
|
|
||||||
## Upload Files
|
```python3 parser.py "Adafruit Metro ESP32-S2.fzpz" C:\Users\ladyada\Dropbox\micropython\circuitpython\ports\esp32s2\boards\adafruit_metro_esp32s2\pins.c esp32s2pins.csv -s "^D([0-9])" "IO\1"```
|
||||||
Once you have an SVG, PDF and PNG, you need to upload them to the following locations, and link to them where indicated.
|
|
||||||
#### The PNG
|
|
||||||
1. The PNG gets added to the Pinouts page of the guide, rendered, immediately below the board image at the top of the page.
|
|
||||||
|
|
||||||
#### The PDF
|
|
||||||
1. Upload to the board-specific EagleCAD PCB file repository on GitHub.
|
|
||||||
2. Link under "Files:" on the Downloads page in the applicable board guide.
|
|
||||||
3. Link on the Pinouts page in the applicable board guide (under the rendered PNG of the diagram).
|
|
||||||
|
|
||||||
#### The SVG
|
|
||||||
1. Upload the SVG to Learn as a file using Media > Upload, under the "Files" section on the Downloads page. Title the file "PrettyPins SVG for Board Name".
|
|
||||||
|
|
||||||
## Example PrettyPins Command Structure by Board Type
|
|
||||||
These are some examples of what the PrettyPins commandline command looks like, based on board chip type. More to be added soon!
|
|
||||||
|
|
||||||
#### ATMega328:
|
|
||||||
ATMega328 does not support CircuitPython.
|
|
||||||
|
|
||||||
```python3 parser.py "Adafruit Metro Mini.fzpz" None atmega328pins.csv -s "^IO([0-9])" "D\1"```
|
|
||||||
|
|
||||||
#### ATtiny8x
|
|
||||||
ATtiny8x does not support CircuitPython.
|
|
||||||
|
|
||||||
```python parser.py "Adafruit Trinket 3V.fzpz" None attiny8xpins.csv```
|
|
||||||
|
|
||||||
#### RP2040:
|
|
||||||
RP2040 does not have official Arduino support (yet).
|
|
||||||
|
|
||||||
```python3 parser.py "Adafruit Feather RP2040.fzpz" path/to/circuitpython/ports/raspberrypi/boards/adafruit_feather_rp2040/pins.c rp2040pins.csv```
|
|
||||||
|
|
||||||
```python3 parser.py "Adafruit ItsyBitsy RP2040.fzpz" path/to/circuitpython/ports/raspberrypi/boards/adafruit_itsybitsy_rp2040/pins.c rp2040pins.csv```
|
|
||||||
|
|
||||||
```python3 parser.py "Adafruit QT Py RP2040.fzpz" path/to/circuitpython/ports/raspberrypi/boards/adafruit_qtpy_rp2040/pins.c rp2040pins.csv```
|
|
||||||
|
|
||||||
#### ESP32-S2:
|
|
||||||
|
|
||||||
```python3 parser.py "Adafruit Feather ESP32-S2.fzpz" path/to/circuitpython/ports/espressif/boards/adafruit_feather_esp32s2/pins.c esp32s2pins.csv```
|
|
||||||
|
|
||||||
```python3 parser.py "Adafruit Metro ESP32-S2.fzpz" path/to/circuitpython/ports/espressif/boards/adafruit_metro_esp32s2/pins.c esp32s2pins.csv -s "^D([0-9])" "IO\1"```
|
|
||||||
|
|
||||||
```python3 parser.py "Adafruit MagTag 2.9in.fzpz" path/to/circuitpython/ports/espressif/boards/adafruit_magtag_2.9_grayscale/pins.c esp32s2pins.csv -s "^D([0-9])" "IO\1"```
|
|
||||||
|
|
||||||
```python3 parser.py "Adafruit FunHouse.fzpz" path/to/circuitpython/ports/espressif/boards/adafruit_funhouse/pins.c esp32s2pins.csv -s "^D([0-9])" "IO\1"```
|
|
||||||
|
|
||||||
|
|
||||||
#### ESP32:
|
|
||||||
|
|
||||||
```python3 parser.py "Adafruit QT Py ESP32 Pico.fzpz" None -a ../../ArduinoSketches/hardware/espressif/esp32/variants/adafruit_qtpy_esp32 esp32pins.csv```
|
|
||||||
|
|
||||||
```python3 parser.py "Adafruit ESP32 Feather V2.fzpz" None -a ../../ArduinoSketches/hardware/espressif/esp32/variants/adafruit_feather_esp32_v2 esp32pins.csv```
|
|
||||||
|
|
||||||
```python3 parser.py "Adafruit HUZZAH32 ESP32 Feather.fzpz" None -a ../../ArduinoSketches/hardware/espressif/esp32/variants/feather_esp32 esp32pins.csv```
|
|
||||||
|
|
||||||
|
|
||||||
#### nRF52:
|
|
||||||
|
|
||||||
```python3 parser.py "Adafruit Feather nRF52840.fzpz" path/to/circuitpython/ports/nrf/boards/feather_nrf52840_express/pins.c nrf52840pins.csv -a ~/Library/Arduino15/packages/adafruit/hardware/nrf52/0.20.5/variants/feather_nrf52840_express```
|
|
||||||
|
|
||||||
```python3 parser.py "Adafruit ItsyBitsy nRF52840.fzpz" path/to/circuitpython/ports/nrf/boards/itsybitsy_nrf52840_express/pins.c nrf52840pins.csv -a ~/Library/Arduino15/packages/adafruit/hardware/nrf52/0.20.5/variants/itsybitsy_nrf52840_express```
|
|
||||||
|
|
||||||
```python3 parser.py "Adafruit nRF52840 CLUE.fzpz" path/to/circuitpython/ports/nrf/boards/clue_nrf52840_express/pins.c nrf52840pins.csv -a ~/Library/Arduino15/packages/adafruit/hardware/nrf52/0.20.5/variants/clue_nrf52840```
|
|
||||||
|
|
||||||
#### SAMD21:
|
|
||||||
|
|
||||||
```python3 parser.py "Adafruit Feather M0 Express.fzpz" path/to/circuitpython/ports/atmel-samd/boards/feather_m0_express/pins.c samd21pins.csv -a ~/Library/Arduino15/packages/adafruit/hardware/samd/variants/feather_m0```
|
|
||||||
|
|
@ -1,26 +0,0 @@
|
||||||
GPIO,ADC,Other,PWM
|
|
||||||
PD0,,RX,
|
|
||||||
PD1,,TX,
|
|
||||||
PD2,,INT0,
|
|
||||||
PD3,,INT1,OC2B
|
|
||||||
PD4,,,
|
|
||||||
PD5,,,OC0B
|
|
||||||
PD6,,,OC0A
|
|
||||||
PD7,,,
|
|
||||||
PB0,,,
|
|
||||||
PB1,,,OC1A
|
|
||||||
PB2,,SS,OC1B
|
|
||||||
PB3,,MOSI,OC2A
|
|
||||||
PB4,,MISO,
|
|
||||||
PB5,,SCK,
|
|
||||||
PC0,A0,,
|
|
||||||
PC1,A1,,
|
|
||||||
PC2,A2,,
|
|
||||||
PC3,A3,,
|
|
||||||
PC4,A4,SDA,
|
|
||||||
PC5,A5,SCL,
|
|
||||||
A6,A6,,
|
|
||||||
A7,A7,,
|
|
||||||
,,,
|
|
||||||
,,,
|
|
||||||
DESCRIPTION,,,
|
|
||||||
|
|
|
@ -1,26 +0,0 @@
|
||||||
GPIO,ADC,Arduino ADC,Other,INT,PWM
|
|
||||||
PD2,,,RX,INT2,
|
|
||||||
PD3,,,TX,INT3,
|
|
||||||
PD1,,,SDA,INT1,
|
|
||||||
PD0,,,SCL,INT0,OC0B
|
|
||||||
PD4,ADC8,A6,,,
|
|
||||||
PC6,,,,,OC3A/OC4A
|
|
||||||
PD7,ADC10,A7,,,OC4D
|
|
||||||
PE6,,,,INT6,
|
|
||||||
PB4,ADC11,A8,,PCINT4,
|
|
||||||
PB5,ADC12,A9,,PCINT5,OC1A/!OC4B
|
|
||||||
PB6,ADC13,A10,,PCINT6,OC1B/OC4B
|
|
||||||
PB7,,,,PCINT7,OC0A/OC1C
|
|
||||||
PD6,ADC9,A11,,,!OC4D
|
|
||||||
PC7,,,,,OC4A
|
|
||||||
PB3,,,MISO,PCINT3,
|
|
||||||
PB2,,,MOSI,PCINT2,
|
|
||||||
PB1,,,SCK,PCINT1,
|
|
||||||
PF7,ADC7,A0,,,
|
|
||||||
PF6,ADC6,A1,,,
|
|
||||||
PF5,ADC5,A2,,,
|
|
||||||
PF4,ADC4,A3,,,
|
|
||||||
PF1,ADC1,A4,,,
|
|
||||||
PF0,ADC0,A5,,,
|
|
||||||
,,,,,
|
|
||||||
DESCRIPTION,,,,,
|
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
GPIO,INT,PWM,,SPI,ADC,Special
|
|
||||||
PB0,PCINT0,OC0A/!OC1A,SDA,MOSI,,
|
|
||||||
PB1,PCINT1,OC0B/OC1A,,MISO,,
|
|
||||||
PB2,INT0/PCINT2,,SCL,SCK,A1,
|
|
||||||
PB3,PCINT3,!OC1B,,,A3,USB
|
|
||||||
PB4,PCINT4,OC1B,,,A2,USB
|
|
||||||
,,,,,,
|
|
||||||
,,,,,,
|
|
||||||
DESCRIPTION,,,,,,
|
|
||||||
|
|
|
@ -1,26 +0,0 @@
|
||||||
GPIO,ADC,HS/QSPI,Other
|
|
||||||
0,ADC1_CH0,,32K_XP
|
|
||||||
1,ADC1_CH1,,32K_XN
|
|
||||||
2,ADC1_CH2,FSPIQ,
|
|
||||||
3,ADC1_CH3,,
|
|
||||||
4,ADC1_CH4,,MTMS
|
|
||||||
5,ADC2_CH0,FSPIHD,MTDI
|
|
||||||
6,,FSPICLK,MTCK
|
|
||||||
7,,FSPID,MTDO
|
|
||||||
8,,,
|
|
||||||
9,,,
|
|
||||||
10,,FSPICS0,
|
|
||||||
11,,,VDD_SPI
|
|
||||||
12,,SPIHD,
|
|
||||||
13,,SPIWP,
|
|
||||||
14,,SPICS0,MTMS
|
|
||||||
15,,SPICLK,
|
|
||||||
16,,SPID,
|
|
||||||
17,,SPIQ,
|
|
||||||
18,,,USB D+AC0-
|
|
||||||
19,,,USB D+-
|
|
||||||
20,,,U0RXD
|
|
||||||
21,,,U0TXD
|
|
||||||
,,,
|
|
||||||
,,,
|
|
||||||
DESCRIPTION,,,
|
|
||||||
|
|
|
@ -1,34 +0,0 @@
|
||||||
GPIO,Power Domain,ADC,SPI,Debug,Other
|
|
||||||
IO0,LP_UART_DTRN,ADC1_CH0,,,XTAL_32K_P
|
|
||||||
IO1,LP_UART_DSRN,ADC1_CH1,,,XTAL_32K_N
|
|
||||||
IO2,LP_UART_RTSN,ADC1_CH2,FSPIQ,,
|
|
||||||
IO3,LP_UART_CTSN,ADC1_CH3,,,
|
|
||||||
IO4,LP_UART_RXD,ADC1_CH4,FSPIHD,MTMS,
|
|
||||||
IO5,LP_UART_TXD,ADC1_CH5,FSPIWP,MTDI,
|
|
||||||
IO6,LP_I2C_SDA,ADC1_CH6,FSPICLK,MTCK,
|
|
||||||
IO7,LP_I2C_SCL,,FSPID,MTDO,
|
|
||||||
IO8,,,,,
|
|
||||||
IO9,,,,,
|
|
||||||
IO10,,,,,
|
|
||||||
IO11,,,,,
|
|
||||||
IO12,,,,,USB_D-
|
|
||||||
IO13,,,,,USB_D+
|
|
||||||
IO14,,,,,
|
|
||||||
IO15,,,,,
|
|
||||||
IO16,,,,,
|
|
||||||
IO17,,,,,
|
|
||||||
IO18,,,SDIO_CMD,,
|
|
||||||
IO19,,,SDIO_CLK,,
|
|
||||||
IO20,,,SDIO_DATA0,,
|
|
||||||
IO21,,,SDIO_DATA1,,
|
|
||||||
IO22,,,SDIO_DATA2,,
|
|
||||||
IO23,,,SDIO_DATA3,,
|
|
||||||
IO24,,,SPICS0,,
|
|
||||||
IO25,,,SPIQ,,
|
|
||||||
IO26,,,SPIWP,,
|
|
||||||
IO27,,,,,VDD_SPI
|
|
||||||
IO28,,,SPIHD,,
|
|
||||||
IO29,,,SPICLK,,
|
|
||||||
IO30,,,SPID,,
|
|
||||||
,,,,,
|
|
||||||
DESCRIPTION,"The ESP32-C6 is Espressif’s first Wi-Fi 6 SoC integrating 2.4 GHz Wi-Fi 6, Bluetooth 5 (LE) and the 802.15.4 protocol.",,,,
|
|
||||||
|
|
|
@ -1,57 +0,0 @@
|
||||||
GPIO,ADC,HS/QSPI,SDMMC,Touch,RTC,UART,Other,Special
|
|
||||||
0,ADC2_CH1,,,T1,RTC11,,CLK_OUT1,
|
|
||||||
1,,,,,,U0TXD,CLK_OUT3,
|
|
||||||
2,ADC2_CH2,HSPIWP,HS2_DATA0,T2,RTC12,,,
|
|
||||||
3,,,,,,U0RXD,CLK_OUT2,
|
|
||||||
4,ADC2_CH0,HSPIHD,HS2_DATA1,T0,RTC10,,,
|
|
||||||
5,,VSPICS0,HS1_DATA6,,,,,
|
|
||||||
6,,SPICLK,HS1_CLK,,,U1CTS,,
|
|
||||||
7,,SPIQ,HS1_DATA0,,,U2RTS,,
|
|
||||||
8,,SPID,HS1_DATA1,,,U2CTS,,
|
|
||||||
9,,SPIHD,HS1_DATA2,,,U1RXD,,
|
|
||||||
10,,SPIWP,HS1_DATA3,,,U1TXD,,
|
|
||||||
11,,SPI_CS0,HS1_CMD,,,U1RTS,,
|
|
||||||
12,ADC2_CH5,HSPIQ,HS2_DATA2,T5,RTC15,,MTDI,
|
|
||||||
13,ADC2_CH4,HSPID,HS2_DATA3,T4,RTC14,,MTCK,
|
|
||||||
14,ADC2_CH6,HSPICLK,HS2_CLK,T6,RTC16,,MTMS,
|
|
||||||
15,ADC2_CH3,HSPICS0,HS2_CMD,T3,RTC13,,MTDO,
|
|
||||||
16,,,HS1_DATA4,,,U2RXD,,
|
|
||||||
17,,,HS1_DATA5,,,U2TXD,,
|
|
||||||
18,,VSPICLK,HS1_DATA7,,,,,
|
|
||||||
19,,VSPIQ,,,,U0CTS,,
|
|
||||||
20,,,,,,,,
|
|
||||||
21,,VSPIHD,,,,,,
|
|
||||||
22,,VSPIWP,,,,U0RTS,,
|
|
||||||
23,,VSPID,HS1_STROBE,,,,,
|
|
||||||
25,ADC2_CH8,,,,RTC6,,DAC1,
|
|
||||||
26,ADC2_CH9,,,,RTC7,,DAC2,
|
|
||||||
27,ADC2_CH7,,,T7,RTC17,,,
|
|
||||||
32,ADC1_CH4,,,T9,RTC9,,32K_XP,
|
|
||||||
33,ADC1_CH5,,,T8,RTC8,,32K_XN,
|
|
||||||
34,ADC1_CH6,,,,RTC4,,VDET1,Input Only
|
|
||||||
35,ADC1_CH7,,,,RTC5,,VDET2,Input Only
|
|
||||||
36,ADC1_CH0,,,,RTC0,,SENSE_V+,Input Only
|
|
||||||
37,ADC1_CH1,,,,RTC1,,SENSE_CAP+,Input Only
|
|
||||||
38,ADC1_CH2,,,,RTC2,,SENSE_CAP-,Input Only
|
|
||||||
39,ADC1_CH3,,,,RTC3,,SENSE_V-,Input Only
|
|
||||||
,,,,,,,,
|
|
||||||
,,,,,,,,
|
|
||||||
,,,,,,,,
|
|
||||||
,,,,,,,,
|
|
||||||
,,,,,,,,
|
|
||||||
,,,,,,,,
|
|
||||||
,,,,,,,,
|
|
||||||
,,,,,,,,
|
|
||||||
,,,,,,,,
|
|
||||||
,,,,,,,,
|
|
||||||
,,,,,,,,
|
|
||||||
,,,,,,,,
|
|
||||||
,,,,,,,,
|
|
||||||
,,,,,,,,
|
|
||||||
,,,,,,,,
|
|
||||||
,,,,,,,,
|
|
||||||
,,,,,,,,
|
|
||||||
,,,,,,,,
|
|
||||||
,,,,,,,,
|
|
||||||
,,,,,,,,
|
|
||||||
DESCRIPTION,,,,,,,,
|
|
||||||
|
|
|
@ -62,4 +62,4 @@ GPIO46,CPU,,,,,INPUT ONLY,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||||
DESCRIPTION,The ESP32 description goes here
|
DESCRIPTION,The,RP2040,,Pi,Raspberry,Cortex-M0+,running,at,up,to,133MHz,with,264kB,on-chip,SRAM,and,built,in,USB.,Flash,memory,is,provided,by,external,QSPI,chip.,All,GPIO,is,3.3V,in/out,max,unless,otherwise,stated.
|
||||||
|
|
|
||||||
|
Can't render this file because it has a wrong number of fields in line 65.
|
|
|
@ -1,65 +0,0 @@
|
||||||
GPIO,Power Domain,ADC,HS/QSPI,Touch,Debug,Other
|
|
||||||
GPIO0,RTC,,,,,
|
|
||||||
GPIO1,RTC,ADC1_CH0,,T1,,
|
|
||||||
GPIO2,RTC,ADC1_CH1,,T2,,
|
|
||||||
GPIO3,RTC,ADC1_CH2,,T3,,
|
|
||||||
GPIO4,RTC,ADC1_CH3,,T4,,
|
|
||||||
GPIO5,RTC,ADC1_CH4,,T5,,
|
|
||||||
GPIO6,RTC,ADC1_CH5,,T6,,
|
|
||||||
GPIO7,RTC,ADC1_CH6,,T7,,
|
|
||||||
GPIO8,RTC,ADC1_CH7,,T8,,
|
|
||||||
GPIO9,RTC,ADC1_CH8,FSPIHD,T9,,
|
|
||||||
GPIO10,RTC,ADC1_CH9,FSPICS0,T10,,
|
|
||||||
GPIO11,RTC,ADC2_CH0,FSPID,T11,,
|
|
||||||
GPIO12,RTC,ADC2_CH1,FSPICLK,T12,,
|
|
||||||
GPIO13,RTC,ADC2_CH2,FSPIQ,T13,,
|
|
||||||
GPIO14,RTC,ADC2_CH3,FSPIWP,T14,,
|
|
||||||
GPIO15,RTC,ADC2_CH4,,,U0RTS,XTAL_32K_P
|
|
||||||
GPIO16,RTC,ADC2_CH5,,,U0CTS,XTAL_32K_N
|
|
||||||
GPIO17,RTC,ADC2_CH6,,,U1TXD,
|
|
||||||
GPIO18,RTC,ADC2_CH7,,,U1RXD,
|
|
||||||
GPIO19,RTC,ADC2_CH8,,,U1RTS,USB_D-
|
|
||||||
GPIO20,RTC,ADC2_CH9,,,U1CTS,USB_D+
|
|
||||||
GPIO21,RTC,,,,,
|
|
||||||
GPIO26,SPI,,SPICS1,,,
|
|
||||||
GPIO27,SPI,,SPIHD,,,
|
|
||||||
GPIO28,SPI,,SPIWP,,,
|
|
||||||
GPIO29,SPI,,SPICS0,,,
|
|
||||||
GPIO30,SPI,,SPICLK,,,
|
|
||||||
GPIO31,SPI,,SPIQ,,,
|
|
||||||
GPIO32,SPI,,SPID,,,
|
|
||||||
GPIO33,SPI/CPU,,FSPIHD,,,
|
|
||||||
GPIO34,SPI/CPU,,FSPICS0,,,
|
|
||||||
GPIO35,SPI/CPU,,FSPID,,,
|
|
||||||
GPIO36,SPI/CPU,,FSPICLK,,,
|
|
||||||
GPIO37,SPI/CPU,,FSPIQ,,,
|
|
||||||
GPIO38,CPU,,FSPIWP,,,
|
|
||||||
GPIO39,CPU,,,,MTCK,
|
|
||||||
GPIO40,CPU,,,,MTDO,
|
|
||||||
GPIO41,CPU,,,,MTDI,
|
|
||||||
GPIO42,CPU,,,,MTMS,
|
|
||||||
GPIO43,CPU,,,,U0TXD,
|
|
||||||
GPIO44,CPU,,,,U0RXD,
|
|
||||||
GPIO45,CPU,,,,,
|
|
||||||
GPIO46,CPU,,,,,INPUT ONLY
|
|
||||||
GPIO47,CPU,,CLK_P_DIFF,,,
|
|
||||||
GPIO48,CPU,,CLK_N_DIFF,,,
|
|
||||||
,,,,,,
|
|
||||||
,,,,,,
|
|
||||||
,,,,,,
|
|
||||||
,,,,,,
|
|
||||||
,,,,,,
|
|
||||||
,,,,,,
|
|
||||||
,,,,,,
|
|
||||||
,,,,,,
|
|
||||||
,,,,,,
|
|
||||||
,,,,,,
|
|
||||||
,,,,,,
|
|
||||||
,,,,,,
|
|
||||||
,,,,,,
|
|
||||||
,,,,,,
|
|
||||||
,,,,,,
|
|
||||||
,,,,,,
|
|
||||||
,,,,,,
|
|
||||||
,,,,,,
|
|
||||||
DESCRIPTION,The ESP32 description goes here,,,,,
|
|
||||||
|
|
|
@ -1,49 +0,0 @@
|
||||||
GPIO,ADC,PWM,I2C,SPI,UART,I2S,Other,Debug
|
|
||||||
GPIO_00,,,,DQS/PCS3/PCS3,,MCLK,,
|
|
||||||
GPIO_01,,PWM0_B,SDA,,,RX_BCLK,,
|
|
||||||
GPIO_02,,PWM0_A,SCL,,,RX_SYNC,,
|
|
||||||
GPIO_03,,PWM1_B,,,,RX_DATA0,,
|
|
||||||
GPIO_04,,PWM1_A,,,,TX_DATA0,,
|
|
||||||
GPIO_05,,PWM2_B,,,RXD,TX_DATA1/RX_DATA1,,
|
|
||||||
GPIO_06,,PWM2_A,,,TXD,TX_BCLK,,
|
|
||||||
GPIO_07,,PWM3_B,,,RTS_B/RXD,TX_SYNC,,
|
|
||||||
GPIO_08,,PWM3_A,,,CTS_B/TXD,MCLK,,
|
|
||||||
GPIO_09,,,SDA,SS1_B,RXD,,,
|
|
||||||
GPIO_10,,,HREQ/SCL,,TXD,,,
|
|
||||||
GPIO_11,,,SDA,SS1_B,RXD,,,TRACE3
|
|
||||||
GPIO_12,,,SCL,,TXD,,,TRACE2
|
|
||||||
GPIO_13,,,,PCS2,RXD,,,TRACE1
|
|
||||||
GPIO_AD_00,ADC0,,,PCS2,TXD,,,TRACE0
|
|
||||||
GPIO_AD_01,ADC1,,SDA,PCS1,RXD,,,TRACE_SWO
|
|
||||||
GPIO_AD_02,ADC2,,SCL,PCS1,TXD,,,TRACE_CLK
|
|
||||||
GPIO_AD_03,ADC3,PWM2_B,,SDI,,,,JTAG_DE_B
|
|
||||||
GPIO_AD_04,ADC4,PWM2_A,,SDO,,,,
|
|
||||||
GPIO_AD_05,ADC5,PWM3_B,,PCS0,,,,
|
|
||||||
GPIO_AD_06,ADC6,PWM3_A,HREQ,SCK,,,,
|
|
||||||
GPIO_AD_07,ADC7,,SDA,,RTS_B/RXD,,XBAR1_INOUT03,CM7_RXEV
|
|
||||||
GPIO_AD_08,ADC8,,SCL,,CTS_B/TXD,,,CM7_TXEV/JTAG_TRSTB
|
|
||||||
GPIO_AD_09,ADC9,PWM3_X,,SDI,,,,TRACE_SWO/JTAG_TDO
|
|
||||||
GPIO_AD_10,ADC10,PWM2_X,,SDO,,,,JTAG_TDI
|
|
||||||
GPIO_AD_11,ADC11,PWM1_X,,PCS0,,,,JTAG_MOD
|
|
||||||
GPIO_AD_12,ADC12,PWM0_X,,SCK,,,,JTAG_TCK
|
|
||||||
GPIO_AD_13,ADC13,,SDA,,RTS_B/RTS_B,,,JTAG_TMS
|
|
||||||
GPIO_AD_14,ADC14,,SCL,,CTS_B/CTS_B,,XBAR1_INOUT02,
|
|
||||||
GPIO_SD_00,,,,SS0_B,,TX_SYNC,,CM7_RXEV
|
|
||||||
GPIO_SD_01,,PWM0_B,,DATA1,,TX_BCLK,,
|
|
||||||
GPIO_SD_02,,PWM0_A,,DATA2,,TX_DATA,,
|
|
||||||
GPIO_SD_03,,PWM1_B,,DATA0,,RX_DATA,,
|
|
||||||
GPIO_SD_04,,PWM1_A,,DATA3,,RX_SYNC,,
|
|
||||||
GPIO_SD_05,,,SDA,SS1_B/SDI,,,,
|
|
||||||
GPIO_SD_06,,,SCL,SS0_B/SDO,,,,
|
|
||||||
GPIO_SD_07,,,SDA,DATA1/PCS0,,,,
|
|
||||||
GPIO_SD_08,,,SCL,DATA2/SCK,,,,
|
|
||||||
GPIO_SD_09,,,,DATA0/SDI,RXD,,,
|
|
||||||
GPIO_SD_10,,,,SCLK/SDO,TXD,,,
|
|
||||||
GPIO_SD_11,,,,DATA3/SCK,RXD,,,
|
|
||||||
GPIO_SD_12,,,,DQS/PCS0,TXD,,,
|
|
||||||
GPIO_SD_13,,,,SCLK,,RX_BCLK,,CM7_TXEV
|
|
||||||
GPIO_SD_14,,,,DQS/DQS,,,,
|
|
||||||
PMIC_ON_REQ,,,,,,,,
|
|
||||||
POR_B,,,,,,,,
|
|
||||||
ONOFF,,,,,,,,
|
|
||||||
DESCRIPTION,,,,,,,,
|
|
||||||
|
|
|
@ -1,55 +0,0 @@
|
||||||
GPIO,High Speed,Low Speed,ADC,Special
|
|
||||||
P0.00,HS,,,XL1
|
|
||||||
P0.01,HS,,,XL2
|
|
||||||
P0.02,,LS,AIN0,
|
|
||||||
P0.03,,LS,AIN1,
|
|
||||||
P0.04,HS,,AIN2,
|
|
||||||
P0.05,HS,,AIN3,
|
|
||||||
P0.06,HS,,,
|
|
||||||
P0.07,HS,,,
|
|
||||||
P0.08,HS,,,
|
|
||||||
P0.09,,LS,,NFC1
|
|
||||||
P0.10,,LS,,NFC2
|
|
||||||
P0.11,HS,,,
|
|
||||||
P0.12,HS,,,
|
|
||||||
P0.13,HS,,,
|
|
||||||
P0.14,HS,,,
|
|
||||||
P0.15,HS,,,
|
|
||||||
P0.16,HS,,,
|
|
||||||
P0.17,HS,,,
|
|
||||||
P0.18,HS,,,RESET
|
|
||||||
P0.19,QSPI/SCK,,,
|
|
||||||
P0.20,HS,,,
|
|
||||||
P0.21,QSPI,,,
|
|
||||||
P0.22,QSPI,,,
|
|
||||||
P0.23,QSPI,,,
|
|
||||||
P0.24,HS,,,
|
|
||||||
P0.25,HS,,,
|
|
||||||
P0.26,HS,,,
|
|
||||||
P0.27,HS,,,
|
|
||||||
P0.28,,LS,AIN4,
|
|
||||||
P0.29,,LS,AIN5,
|
|
||||||
P0.30,,LS,AIN6,
|
|
||||||
P0.31,,LS,AIN7,
|
|
||||||
P1.00,QSPI,,,
|
|
||||||
P1.01,,LS,,
|
|
||||||
P1.02,,LS,,
|
|
||||||
P1.03,,LS,,
|
|
||||||
P1.04,,LS,,
|
|
||||||
P1.05,,LS,,
|
|
||||||
P1.06,,LS,,
|
|
||||||
P1.07,,LS,,
|
|
||||||
P1.08,HS,,,
|
|
||||||
P1.09,HS,,,
|
|
||||||
P1.10,,LS,,
|
|
||||||
P1.11,,LS,,
|
|
||||||
P1.12,,LS,,
|
|
||||||
P1.13,,LS,,
|
|
||||||
P1.14,,LS,,
|
|
||||||
P1.15,,LS,,
|
|
||||||
,,,,
|
|
||||||
,,,,
|
|
||||||
,,,,
|
|
||||||
,,,,
|
|
||||||
,,,,
|
|
||||||
DESCRIPTION,"The Nordic nRF52840 is an ARM Cortex-M4 running at 64MHz with 256kB on-chip SRAM, 1MB of Flash memory and built-in Bluetooth Low Energy and native USB. Any pin can be used for I2C/SPI/UART/I2S/PDM/etc peripheral usage. LS pins can interfere with radio reception when over 10 Khz, however they are not restricted from going faster. All GPIO is 3.3V in/out max unless otherwise stated. ",,,,,
|
|
||||||
|
Can't render this file because it has a wrong number of fields in line 55.
|
9306
output.svg
9306
output.svg
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 850 KiB |
692
parser.py
692
parser.py
|
|
@ -15,8 +15,6 @@ import glob
|
||||||
import os
|
import os
|
||||||
import math
|
import math
|
||||||
import time
|
import time
|
||||||
import textwrap
|
|
||||||
import subprocess
|
|
||||||
|
|
||||||
MM_TO_PX = 96 / 25.4 # SVGs measure in px but maybe we want mm!
|
MM_TO_PX = 96 / 25.4 # SVGs measure in px but maybe we want mm!
|
||||||
PX_TO_MM = 25.4 / 96 # SVGs measure in px but maybe we want mm!
|
PX_TO_MM = 25.4 / 96 # SVGs measure in px but maybe we want mm!
|
||||||
|
|
@ -42,90 +40,65 @@ TITLE_FONTSIZE = 16
|
||||||
URL_FONTSIZE = 12
|
URL_FONTSIZE = 12
|
||||||
|
|
||||||
|
|
||||||
# The following table is derived from
|
# Color palette has been revised based on a recommended table from
|
||||||
# http://mkweb.bcgsc.ca/biovis2012/color-blindness-palette.png
|
# http://mkweb.bcgsc.ca/biovis2012/ to accommodate multiple types of
|
||||||
# It provides 13 to 15 colors (plus white) that appear perceptually distinct
|
# color blindness. Some of these might be a bit vivid to the normally-
|
||||||
# to most types of color blindness (they do NOT appear as the SAME colors,
|
# sighted, so I'm keeping a note here of the original values used if
|
||||||
# merely DISTINGUISHABLE from one another).
|
# you want to switch back (at the expense of some users' ability to
|
||||||
# It is generally not advised (but occasionally acceptable) to use colors
|
# distinguish pin colors). Use the colors from the table exactly,
|
||||||
# not in this table (as regular #RRGGBB), BUT they should be made distinct
|
# DO NOT try to adjust a little lighter or darker, as the resulting
|
||||||
# some other way -- for example, CircuitPython pin name boxes are light gray
|
# color may head off in a tangent direction for color blind users.
|
||||||
# (not in table) but assigned an outline. Also, STEMMA QT SDA and SCL boxes
|
# If something doesn't appeal, pick a different color from the table,
|
||||||
# are assigned colors of the physical wiring, so the wires and labels match
|
# or repeat an existing one but distinguish it with/without an outline.
|
||||||
# (BOTH are then similarly 'off' to color blind users). Some of these entries
|
#
|
||||||
# are a bit vivid to the normally-sighted, but they should be used exacly,
|
# Type Old New (biovis2012 table index)
|
||||||
# do NOT try to adjust a little lighter or darker, as the result might go in
|
# CPy Name #E6E6E6 #E6E6E6 - light gray, not in table, distinguished by outline
|
||||||
# a different direction for color blind users. Pick a different index, or
|
# Power #E60000 #920000 (11)
|
||||||
# distinguish it with/without an outline, thanks.
|
# GND #000000 #000000 (1)
|
||||||
palette = (
|
# Control #B0B0B0 #004949
|
||||||
'#FFFFFF', # Keeps list index in sync w/numbers in ref image (1-15)
|
# Arduino #00FF00 #00FF00 - not currently used?
|
||||||
'#000000', # #1
|
# Port #F0E65A #FFFF6D (15) - same as QT_SCL
|
||||||
'#004949', # #2
|
# Analog #FFB95A #DB6D00 (13) - avoid using (4) elsewhere
|
||||||
'#009292', # #3 do not use w/#7
|
# PWM #FAB4BE #FFB6DB (5)
|
||||||
'#FF6DB6', # #4 do not use w/#13
|
# UART #96C8FA #B6DBFF (10)
|
||||||
'#FFB6DB', # #5
|
# SPI #78F07D #24FF24 (14)
|
||||||
'#490092', # #6
|
# I2C #D7C8FF #B66DFF (8)
|
||||||
'#006DDB', # #7 do not use w/#3
|
# QT_SCL #FFFF00 #FFFF00 - not remapped, keep wire color so these match RL
|
||||||
'#B66DFF', # #8
|
# QT_SDA #0000FF #0000FF - same
|
||||||
'#6DB6FF', # #9
|
# ExtInt #FF00FF #FF00FF - not currently used?
|
||||||
'#B6DBFF', # #10
|
# PCInt #FFC000 #FFCC00 - not currently used?
|
||||||
'#920000', # #11
|
# Misc #A0A0FF #A0A0FF - not currently used?
|
||||||
'#924900', # #12
|
# Misc2 #C0C0FF #C0C0FF - not currently used?
|
||||||
'#DB6D00', # #13 do not use w/#4
|
|
||||||
'#24FF24', # #14
|
|
||||||
'#FFFF6D') # #15
|
|
||||||
|
|
||||||
# This is a sequence of 9 palette indices that appear in a chromatic-ish
|
|
||||||
# sequence for normal-sighted viewers, and are distinct and non-repeating
|
|
||||||
# for anyone else. MUX boxes, when drawn from center-to-outskirts in this
|
|
||||||
# order, are nicely appealing. If a chip type has fewer than 9 muxes,
|
|
||||||
# colors in the sequence can be skipped by adding an empty column in the
|
|
||||||
# CSV (e.g. brown isn't very appealing). For future ref, if more than 9
|
|
||||||
# muxes become necessary, maybe repeat the sequence but add a box outline?
|
|
||||||
chroma = (
|
|
||||||
15, # Yellow
|
|
||||||
14, # Green
|
|
||||||
3, # Teal
|
|
||||||
10, # Cyan
|
|
||||||
9, # Light blue
|
|
||||||
8, # Purple
|
|
||||||
5, # Light Pink
|
|
||||||
12, # Brown
|
|
||||||
13) # Orange (after this, list repeats but adds box outline)
|
|
||||||
# NOT in this list, but still distinct and available for other uses, are
|
|
||||||
# #1 (black, used for ground), #11 (dark red, used for power), #6 (dark
|
|
||||||
# purple, used for control), #2 (dark teal, used for Arduino pin name), #7
|
|
||||||
# (medium blue, not currently used and should be avoided if possible as it
|
|
||||||
# appears similar to #3 for some) and #4 (hot pink, not used and also
|
|
||||||
# should be avoided as it resembles #13 orange to some.)
|
|
||||||
|
|
||||||
# This is a base set of pin themes that are common to ALL chips.
|
|
||||||
# Any additional 'muxed' functions get drawn in chroma sequence
|
|
||||||
# following left-to-right column order in CSV file.
|
|
||||||
themes = [
|
themes = [
|
||||||
{'type':'Power', 'fill':palette[11], 'font-weight':'bold'},
|
|
||||||
{'type':'GND', 'fill':palette[1], 'font-weight':'bold'},
|
|
||||||
{'type':'Control', 'fill':palette[6], 'font-weight':'bold'},
|
|
||||||
{'type':'Arduino', 'fill':palette[2], 'font-weight':'bold'},
|
|
||||||
{'type':'CircuitPython Name', 'fill':'#E6E6E6', 'outline':'auto', 'font-weight':'bold'},
|
{'type':'CircuitPython Name', 'fill':'#E6E6E6', 'outline':'auto', 'font-weight':'bold'},
|
||||||
{'type':'QT_SCL', 'fill':'#FFFF00', 'font-weight':'bold'},
|
{'type':'Power', 'fill':'#920000', 'outline':'none', 'font-weight':'bold'},
|
||||||
{'type':'QT_SDA', 'fill':'#0000FF', 'font-weight':'bold'},
|
{'type':'GND', 'fill':'#000000', 'outline':'none', 'font-weight':'bold'},
|
||||||
|
{'type':'Control', 'fill':'#004949', 'outline':'none', 'font-weight':'bold'},
|
||||||
|
{'type':'Arduino', 'fill':'#00FF00', 'outline':'none', 'font-weight':'bold'},
|
||||||
|
{'type':'Port', 'fill':'#FFFF6D', 'outline':'none', 'font-weight':'normal'},
|
||||||
|
{'type':'Analog', 'fill':'#DB6D00', 'outline':'none', 'font-weight':'normal'},
|
||||||
|
{'type':'PWM', 'fill':'#FFB6DB', 'outline':'none', 'font-weight':'normal'},
|
||||||
|
{'type':'UART', 'fill':'#B6DBFF', 'outline':'none', 'font-weight':'normal'},
|
||||||
|
{'type':'SPI', 'fill':'#24FF24', 'outline':'none', 'font-weight':'normal'},
|
||||||
|
{'type':'I2C', 'fill':'#B66DFF', 'outline':'none', 'font-weight':'normal'},
|
||||||
|
{'type':'QT_SCL', 'fill':'#FFFF00', 'outline':'none', 'font-weight':'bold'},
|
||||||
|
{'type':'QT_SDA', 'fill':'#0000FF', 'outline':'none', 'font-weight':'bold'},
|
||||||
|
{'type':'ExtInt', 'fill':'#FF00FF', 'outline':'none', 'font-weight':'normal'},
|
||||||
|
{'type':'PCInt', 'fill':'#FFC000', 'outline':'none', 'font-weight':'normal'},
|
||||||
|
{'type':'Misc', 'fill':'#A0A0FF', 'outline':'none', 'font-weight':'normal'},
|
||||||
|
{'type':'Misc2', 'fill':'#C0C0FF', 'outline':'none', 'font-weight':'normal'},
|
||||||
]
|
]
|
||||||
|
|
||||||
# some eagle cad names are not as pretty
|
# some eagle cad names are not as pretty
|
||||||
conn_renames = [('!RESET', 'RESET'),
|
conn_renames = [('!RESET', 'RESET'),
|
||||||
('D5_5V', 'D5'),
|
('D5_5V', 'D5'),
|
||||||
('+3V3', '3.3V'),
|
('+3V3', '3.3V'),
|
||||||
('3V3', '3.3V'),
|
|
||||||
('+5V', '5V')
|
('+5V', '5V')
|
||||||
]
|
]
|
||||||
product_url = None
|
product_url = None
|
||||||
product_title = None
|
product_title = None
|
||||||
chip_description = None
|
chip_description = None
|
||||||
pinmuxes = None # Set by get_chip_pinout() on CSV load
|
|
||||||
pinmux_in_use = None # Ditto
|
|
||||||
arduino_in_use = False # Is set true if Arduino pin names found
|
|
||||||
longest_arduinopin = 0 # Longest label for Arduino pins (for box sizing)
|
|
||||||
|
|
||||||
# This function digs through the FZP (XML) file and the SVG (also, ironically, XML) to find what
|
# This function digs through the FZP (XML) file and the SVG (also, ironically, XML) to find what
|
||||||
# frtizing calls a connection - these are pads that folks can connect to! they are 'named' by
|
# frtizing calls a connection - these are pads that folks can connect to! they are 'named' by
|
||||||
|
|
@ -143,10 +116,7 @@ def get_connections(fzp, svg, substitute):
|
||||||
d = {'name': c_name, 'svgid': c_svg}
|
d = {'name': c_name, 'svgid': c_svg}
|
||||||
connections.append(d)
|
connections.append(d)
|
||||||
|
|
||||||
if 'url' in xmldict['module']:
|
|
||||||
product_url = xmldict['module']['url']
|
product_url = xmldict['module']['url']
|
||||||
else:
|
|
||||||
product_url = 'Missing product URL'
|
|
||||||
product_title = xmldict['module']['title']
|
product_title = xmldict['module']['title']
|
||||||
print(product_title, product_url)
|
print(product_title, product_url)
|
||||||
#print(connections)
|
#print(connections)
|
||||||
|
|
@ -187,314 +157,6 @@ def get_connections(fzp, svg, substitute):
|
||||||
c['name'] = re.sub(substitute[0], substitute[1], c['name'])
|
c['name'] = re.sub(substitute[0], substitute[1], c['name'])
|
||||||
return connections
|
return connections
|
||||||
|
|
||||||
def get_arduino_mapping(connections, variantfolder):
|
|
||||||
global longest_arduinopin
|
|
||||||
if not variantfolder:
|
|
||||||
return connections
|
|
||||||
###################################################### special case of very early chips
|
|
||||||
if ("atmega328" in variantfolder) or ("atmega32u4" in variantfolder) or ("attiny8x" in variantfolder):
|
|
||||||
pinmap8x = ["PB0", "PB1", "PB2", "PB3", "PB4"]
|
|
||||||
pinmap328 = ["PD0", "PD1", "PD2", "PD3", "PD4", "PD5", "PD6", "PD7",
|
|
||||||
"PB0", "PB1", "PB2", "PB3", "PB4", "PB5",
|
|
||||||
"PC0", "PC1", "PC2", "PC3", "PC4", "PC5"]
|
|
||||||
specialnames328 = {"A0" : "PC0", "A1" : "PC1", "A2" : "PC2",
|
|
||||||
"A3" : "PC3", "A4" : "PC4", "A5" : "PC5",
|
|
||||||
"A4/SDA" : "PC4", "A5/SCL" : "PC5",
|
|
||||||
"SS" : "PB2", "MOSI" : "PB3",
|
|
||||||
"MISO": "PB4", "SCK": "PB5"}
|
|
||||||
pinmap32u4 = ["PD2", "PD3", "PD1", "PD0", "PD4", "PC6", "PD7", "PE6",
|
|
||||||
"PB4", "PB5", "PB6", "PB7", "PD6", "PC7",
|
|
||||||
"PB3", "PB1", "PB2", "PB0",
|
|
||||||
"PF7", "PF6", "PF5", "PF4", "PF1", "PF0"]
|
|
||||||
specialnames32u4 = {"SDA" : "PD1", "SCL" : "PD0",
|
|
||||||
"MISO" : "PB3", "SCK" : "PB1", "MOSI" : "PB2",
|
|
||||||
"A0" : "PF7", "A1" : "PF6", "A2" : "PF5",
|
|
||||||
"A3" : "PF4", "A4" : "PF1", "A5" : "PF0" }
|
|
||||||
|
|
||||||
if "attiny8x" in variantfolder:
|
|
||||||
pinmap = pinmap8x
|
|
||||||
specialnames = None
|
|
||||||
if "atmega328" in variantfolder:
|
|
||||||
pinmap = pinmap328
|
|
||||||
specialnames = specialnames328
|
|
||||||
if "atmega32u4" in variantfolder:
|
|
||||||
pinmap = pinmap32u4
|
|
||||||
specialnames = specialnames32u4
|
|
||||||
|
|
||||||
for conn in connections:
|
|
||||||
print(conn['name'])
|
|
||||||
# digital pins
|
|
||||||
matches = re.match(r'(IO|D|#)([0-9]+)', conn['name'])
|
|
||||||
if matches:
|
|
||||||
#print(matches)
|
|
||||||
digitalname = matches.group(2)
|
|
||||||
conn['pinname'] = pinmap[int(digitalname)]
|
|
||||||
conn['arduinopin'] = digitalname
|
|
||||||
longest_arduinopin = max(longest_arduinopin, len(str(conn['arduinopin'])))
|
|
||||||
# other pins :/
|
|
||||||
if specialnames:
|
|
||||||
if conn['name'] in specialnames:
|
|
||||||
conn['pinname'] = specialnames[conn['name']]
|
|
||||||
conn['arduinopin'] = pinmap.index(conn['pinname'])
|
|
||||||
longest_arduinopin = max(longest_arduinopin, len(str(conn['arduinopin'])))
|
|
||||||
#print(connections)
|
|
||||||
return connections
|
|
||||||
|
|
||||||
###################################################### NRF52 board variant handler
|
|
||||||
elif "nrf52" in variantfolder.lower():
|
|
||||||
# copy over the variant.cpp minus any includes
|
|
||||||
|
|
||||||
variantcpp = open(variantfolder+"/"+"variant.cpp").readlines()
|
|
||||||
outfilecpp = open("variant.cpp", "w")
|
|
||||||
# Add some new header text so we can compile the raw variant cpp/h without arduino BSP
|
|
||||||
outfilecpp.write("""
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include "variant.h"
|
|
||||||
#define OUTPUT 1
|
|
||||||
#define INPUT 0
|
|
||||||
#define HIGH 1
|
|
||||||
#define LOW 0
|
|
||||||
#define ledOff(x) (x)
|
|
||||||
#define pinMode(x, y) (x)
|
|
||||||
#define digitalWrite(x, y) (x)
|
|
||||||
|
|
||||||
""")
|
|
||||||
for line in variantcpp:
|
|
||||||
# cut out the arduino deps
|
|
||||||
if "#include" in line:
|
|
||||||
continue
|
|
||||||
outfilecpp.write(line)
|
|
||||||
|
|
||||||
# here's the code that will actually print out the pin mapping as a CSV:
|
|
||||||
outfilecpp.write("""
|
|
||||||
int main(void) {
|
|
||||||
for (uint32_t pin=0; pin<sizeof(g_ADigitalPinMap)/4; pin++) {
|
|
||||||
uint8_t portnum = g_ADigitalPinMap[pin] / 32;
|
|
||||||
uint8_t portpin = g_ADigitalPinMap[pin] % 32;
|
|
||||||
printf("%d", pin);
|
|
||||||
""")
|
|
||||||
for analog in range(0, 32):
|
|
||||||
outfilecpp.write("#ifdef PIN_A%d\n" % analog)
|
|
||||||
outfilecpp.write(" if (PIN_A%d == pin) printf(\"/A%d\");\n" % (analog, analog))
|
|
||||||
outfilecpp.write("#endif\n")
|
|
||||||
outfilecpp.write("""
|
|
||||||
printf(", P%d.%02d\\n", portnum, portpin);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
""")
|
|
||||||
outfilecpp.close()
|
|
||||||
|
|
||||||
# ditto for the header file, copy it over, except remove all arduino headers
|
|
||||||
varianth = open(variantfolder+"/"+"variant.h").readlines()
|
|
||||||
outfileh = open("variant.h", "w")
|
|
||||||
outfileh.write("#include <stdint.h>\n")
|
|
||||||
for line in varianth:
|
|
||||||
if "#include" in line:
|
|
||||||
continue
|
|
||||||
outfileh.write(line)
|
|
||||||
outfileh.close()
|
|
||||||
|
|
||||||
###################################################### SAMDxx board variant handler
|
|
||||||
elif "samd" in variantfolder.lower():
|
|
||||||
# copy over the variant.cpp minus any includes
|
|
||||||
|
|
||||||
variantcpp = open(variantfolder+"/"+"variant.cpp").readlines()
|
|
||||||
outfilecpp = open("variant.cpp", "w")
|
|
||||||
# Add some new header text so we can compile the raw variant cpp/h without arduino BSP
|
|
||||||
outfilecpp.write("""
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include "variant.h"
|
|
||||||
#define OUTPUT 1
|
|
||||||
#define INPUT 0
|
|
||||||
#define HIGH 1
|
|
||||||
#define LOW 0
|
|
||||||
#define ledOff(x) (x)
|
|
||||||
#define pinMode(x, y) (x)
|
|
||||||
#define digitalWrite(x, y) (x)
|
|
||||||
|
|
||||||
|
|
||||||
#define EXTERNAL_INT_NMI 32
|
|
||||||
#define PIN_ATTR_PWM 0
|
|
||||||
#define PIN_ATTR_ANALOG 0
|
|
||||||
#define PIN_ATTR_ANALOG_ALT 0
|
|
||||||
#define PIN_ATTR_DIGITAL 0
|
|
||||||
#define PIO_SERCOM 0
|
|
||||||
#define PIO_DIGITAL 0
|
|
||||||
#define PIO_ANALOG 0
|
|
||||||
#define PIO_SERCOM_ALT 0
|
|
||||||
#define PIO_OUTPUT 0
|
|
||||||
#define PIO_TIMER 0
|
|
||||||
#define PIO_TIMER_ALT 0
|
|
||||||
#define PIO_PWM 0
|
|
||||||
#define PIO_PWM_ALT 0
|
|
||||||
#define PIN_ATTR_TIMER 0
|
|
||||||
#define PIN_ATTR_TIMER_ALT 0
|
|
||||||
#define PIO_COM 0
|
|
||||||
#define PORTA 0
|
|
||||||
#define PORTB 1
|
|
||||||
#define PORTC 2
|
|
||||||
#define PORTD 3
|
|
||||||
#define DAC_Channel0 0
|
|
||||||
""")
|
|
||||||
for define in ("NOT_ON_TIMER", "NOT_ON_PWM", "No_ADC_Channel",
|
|
||||||
"EXTERNAL_INT_NONE", "PIN_ATTR_NONE",
|
|
||||||
"PIN_ATTR_PWM_E", "PIN_ATTR_PWM_F", "PIN_ATTR_PWM_G",
|
|
||||||
"DAC_Channel1", "TCC_INST_NUM", "TC_INST_NUM",
|
|
||||||
"NOT_A_PORT", "PIO_NOT_A_PIN", "PIN_NOT_A_PIN"):
|
|
||||||
outfilecpp.write("#define %s 10\n" % define)
|
|
||||||
for adc in range(0, 32):
|
|
||||||
outfilecpp.write("#define ADC_Channel%d %d\n" % (adc, adc))
|
|
||||||
for irq in range(0, 32):
|
|
||||||
outfilecpp.write("#define EXTERNAL_INT_%d %d\n" % (irq, irq))
|
|
||||||
for tcc in range(0, 8):
|
|
||||||
outfilecpp.write("#define PWM0_CH%d %d\n" % (tcc, tcc))
|
|
||||||
outfilecpp.write("#define TCC0_CH%d %d\n" % (tcc, tcc))
|
|
||||||
outfilecpp.write("#define PWM1_CH%d %d\n" % (tcc, tcc))
|
|
||||||
outfilecpp.write("#define TCC1_CH%d %d\n" % (tcc, tcc))
|
|
||||||
outfilecpp.write("#define TCC%d_GCLK_ID %d\n" % (tcc, tcc))
|
|
||||||
for tc in range(0, 8):
|
|
||||||
outfilecpp.write("#define PWM2_CH%d %d\n" % (tc, tc))
|
|
||||||
outfilecpp.write("#define TCC2_CH%d %d\n" % (tc, tc))
|
|
||||||
outfilecpp.write("#define TCC3_CH%d %d\n" % (tc, tc))
|
|
||||||
outfilecpp.write("#define TCC4_CH%d %d\n" % (tc, tc))
|
|
||||||
outfilecpp.write("#define PWM3_CH%d %d\n" % (tc, tc))
|
|
||||||
outfilecpp.write("#define TC3_CH%d %d\n" % (tc, tc))
|
|
||||||
outfilecpp.write("#define PWM4_CH%d %d\n" % (tc, tc))
|
|
||||||
outfilecpp.write("#define TC7_CH%d %d\n" % (tc, tc))
|
|
||||||
outfilecpp.write("#define TC6_CH%d %d\n" % (tc, tc))
|
|
||||||
outfilecpp.write("#define TC5_CH%d %d\n" % (tc, tc))
|
|
||||||
outfilecpp.write("#define TC4_CH%d %d\n" % (tc, tc))
|
|
||||||
outfilecpp.write("#define TC2_CH%d %d\n" % (tc, tc))
|
|
||||||
outfilecpp.write("#define TC1_CH%d %d\n" % (tc, tc))
|
|
||||||
outfilecpp.write("#define TC0_CH%d %d\n" % (tc, tc))
|
|
||||||
outfilecpp.write("#define TC%d_GCLK_ID %d\n" % (tc, tc))
|
|
||||||
outfilecpp.write("""
|
|
||||||
typedef struct _PinDescription
|
|
||||||
{
|
|
||||||
uint32_t ulPort ;
|
|
||||||
uint32_t ulPin ;
|
|
||||||
uint32_t ulPinType ;
|
|
||||||
uint32_t ulPinAttribute ;
|
|
||||||
uint32_t ulADCChannelNumber ;
|
|
||||||
uint32_t ulPWMChannel ;
|
|
||||||
uint32_t ulTCChannel ;
|
|
||||||
uint32_t ulExtInt ;
|
|
||||||
} PinDescription ;
|
|
||||||
|
|
||||||
""")
|
|
||||||
blocklist = ("#include", "extern", "apTCInstances", "IrqHandler", "Uart", "SERCOM ")
|
|
||||||
for line in variantcpp:
|
|
||||||
# cut out the arduino deps
|
|
||||||
if any([block in line for block in blocklist]):
|
|
||||||
continue
|
|
||||||
outfilecpp.write(line)
|
|
||||||
|
|
||||||
# here's the code that will actually print out the pin mapping as a CSV:
|
|
||||||
outfilecpp.write("""
|
|
||||||
int main(void) {
|
|
||||||
for (uint32_t pin=0; pin<sizeof(g_APinDescription)/sizeof(PinDescription); pin++) {
|
|
||||||
uint8_t portnum = g_APinDescription[pin].ulPort;
|
|
||||||
uint8_t portpin = g_APinDescription[pin].ulPin;
|
|
||||||
printf("%d", pin);
|
|
||||||
""")
|
|
||||||
for analog in range(0, 32):
|
|
||||||
outfilecpp.write("#ifdef PIN_A%d\n" % analog)
|
|
||||||
outfilecpp.write(" if ((PIN_A%d == pin) || ((g_APinDescription[PIN_A%d].ulPort == portnum) && (g_APinDescription[PIN_A%d].ulPin == portpin))) printf(\"/A%d\");\n" % (analog, analog, analog, analog))
|
|
||||||
outfilecpp.write("#endif\n")
|
|
||||||
outfilecpp.write("""
|
|
||||||
printf(", P%c%02d\\n", 'A'+portnum, portpin);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
""")
|
|
||||||
outfilecpp.close()
|
|
||||||
|
|
||||||
# ditto for the header file, copy it over, except remove all arduino headers
|
|
||||||
varianth = open(variantfolder+"/"+"variant.h").readlines()
|
|
||||||
outfileh = open("variant.h", "w")
|
|
||||||
outfileh.write("#include <stdint.h>\n")
|
|
||||||
blocklist = ("#include", "extern SERCOM", "extern Uart")
|
|
||||||
for line in varianth:
|
|
||||||
if any([block in line for block in blocklist]):
|
|
||||||
continue
|
|
||||||
outfileh.write(line)
|
|
||||||
|
|
||||||
outfileh.close()
|
|
||||||
arduinopins = ""
|
|
||||||
|
|
||||||
###################################################### SAMDxx board variant handler
|
|
||||||
elif "esp32" in variantfolder.lower():
|
|
||||||
for conn in connections:
|
|
||||||
print(conn['name'])
|
|
||||||
# digital pins
|
|
||||||
iomatches = re.match(r'(GPIO|IO|D|I|#)([0-9]+)', conn['name'])
|
|
||||||
if iomatches:
|
|
||||||
print(iomatches)
|
|
||||||
digitalname = iomatches.group(2)
|
|
||||||
conn['pinname'] = digitalname
|
|
||||||
#conn['arduinopin'] = digitalname
|
|
||||||
longest_arduinopin = max(longest_arduinopin, len(digitalname))
|
|
||||||
else:
|
|
||||||
conn['pinname'] = conn['name']
|
|
||||||
|
|
||||||
# open the file
|
|
||||||
varianth = open(variantfolder+"/"+"pins_arduino.h").readlines()
|
|
||||||
arduinopins = ""
|
|
||||||
for line in varianth:
|
|
||||||
#print(line)
|
|
||||||
# find the const defines
|
|
||||||
matches2 = re.match(r'\s*static\s*const\s*uint8_t\s*([A-Z0-9_]+)\s*=\s*([0-9]+)\s*;.*', line)
|
|
||||||
if matches2:
|
|
||||||
prettyname = matches2[1]
|
|
||||||
pinnumber = matches2[2]
|
|
||||||
print(prettyname, pinnumber)
|
|
||||||
for conn in connections:
|
|
||||||
if conn['pinname'] == prettyname:
|
|
||||||
conn['pinname'] = pinnumber
|
|
||||||
#print(conn)
|
|
||||||
arduinopins += pinnumber + ", " + prettyname + "\n"
|
|
||||||
# ok after we map everything, lets find internal pins
|
|
||||||
for pinpair in arduinopins.split('\n'):
|
|
||||||
if not pinpair:
|
|
||||||
continue
|
|
||||||
pinnumber, prettyname = pinpair.split(",")
|
|
||||||
conn = next((c for c in connections if c.get('pinname') == pinnumber), None)
|
|
||||||
if conn:
|
|
||||||
continue
|
|
||||||
print("Found an internal pin!")
|
|
||||||
newconn = {'name': prettyname, 'pinname': pinnumber}
|
|
||||||
print(newconn)
|
|
||||||
connections.append(newconn)
|
|
||||||
#print(arduinopins)
|
|
||||||
|
|
||||||
|
|
||||||
else:
|
|
||||||
raise NotImplementedError("Unknown Arduino variant type! (if RP2040, leave off -a arguments and try again)", variantfolder.lower())
|
|
||||||
|
|
||||||
if not arduinopins: # some variants can auto-extract the pins for us, if not we do it the hard way
|
|
||||||
time.sleep(1)
|
|
||||||
# now compile it!
|
|
||||||
compileit = subprocess.Popen("g++ -w variant.cpp -o arduinopins", shell=True, stdout=subprocess.PIPE)
|
|
||||||
#print(compileit.stdout.read())
|
|
||||||
runit = subprocess.Popen("./arduinopins", shell=True, stdout=subprocess.PIPE)
|
|
||||||
time.sleep(1)
|
|
||||||
arduinopins = runit.stdout.read().decode("utf-8")
|
|
||||||
#print(arduinopins)
|
|
||||||
#exit()
|
|
||||||
for pinpair in arduinopins.split("\n"):
|
|
||||||
if not pinpair:
|
|
||||||
continue
|
|
||||||
arduinopin, pinname = pinpair.split(", ")
|
|
||||||
for conn in (c for c in connections if c.get('pinname') == pinname):
|
|
||||||
if 'arduinopin' in conn:
|
|
||||||
continue
|
|
||||||
conn['arduinopin'] = arduinopin
|
|
||||||
print(arduinopin, pinname, conn)
|
|
||||||
longest_arduinopin = max(longest_arduinopin, len(arduinopin))
|
|
||||||
|
|
||||||
return connections
|
|
||||||
|
|
||||||
def get_circuitpy_aliases(connections, circuitpydef):
|
def get_circuitpy_aliases(connections, circuitpydef):
|
||||||
# now check the circuitpython definition file
|
# now check the circuitpython definition file
|
||||||
pyvar = open(circuitpydef).readlines()
|
pyvar = open(circuitpydef).readlines()
|
||||||
|
|
@ -504,13 +166,7 @@ def get_circuitpy_aliases(connections, circuitpydef):
|
||||||
matches = re.match(r'.*MP_QSTR_(.*)\)\s*,\s*MP_ROM_PTR\(&pin_(.*)\)', line)
|
matches = re.match(r'.*MP_QSTR_(.*)\)\s*,\s*MP_ROM_PTR\(&pin_(.*)\)', line)
|
||||||
if not matches:
|
if not matches:
|
||||||
continue
|
continue
|
||||||
|
pypairs.append((matches.group(1), matches.group(2)))
|
||||||
# Special case for nRF52840, we cant use . in the pin name so rename P0_0 -> P0.0
|
|
||||||
# so it matches the 'true' name of the pin
|
|
||||||
pinname = matches.group(2)
|
|
||||||
if re.match(r"P[0-1]_[0-9]+", pinname):
|
|
||||||
pinname = pinname.replace("_", ".")
|
|
||||||
pypairs.append([matches.group(1), pinname])
|
|
||||||
|
|
||||||
# for every known connection, lets set the 'true' pin name
|
# for every known connection, lets set the 'true' pin name
|
||||||
for conn in connections:
|
for conn in connections:
|
||||||
|
|
@ -550,8 +206,7 @@ def get_circuitpy_aliases(connections, circuitpydef):
|
||||||
return connections
|
return connections
|
||||||
|
|
||||||
def get_chip_pinout(connections, pinoutcsv):
|
def get_chip_pinout(connections, pinoutcsv):
|
||||||
global themes, chip_description, pinmuxes, pinmux_in_use
|
global chip_description
|
||||||
|
|
||||||
with open(pinoutcsv, mode='r') as infile:
|
with open(pinoutcsv, mode='r') as infile:
|
||||||
pinarray = []
|
pinarray = []
|
||||||
reader = csv.reader(infile)
|
reader = csv.reader(infile)
|
||||||
|
|
@ -567,39 +222,17 @@ def get_chip_pinout(connections, pinoutcsv):
|
||||||
d[header[i]] = mux
|
d[header[i]] = mux
|
||||||
pinarray.append(d)
|
pinarray.append(d)
|
||||||
pinmuxes = header
|
pinmuxes = header
|
||||||
pinmux_in_use = [0] * len(pinmuxes)
|
|
||||||
print("Mux options available: ", pinmuxes)
|
print("Mux options available: ", pinmuxes)
|
||||||
return pinarray
|
return pinarray
|
||||||
|
|
||||||
|
|
||||||
def draw_label(dwg, group, label_text, label_type, box_x, box_y, box_w, box_h):
|
def draw_label(dwg, group, label_text, label_type, box_x, box_y, box_w, box_h):
|
||||||
|
|
||||||
# Some initial assumptions on label style, might override later below
|
|
||||||
box_outline = None # No box outline
|
|
||||||
text_weight = None # Normal text weight
|
|
||||||
text_color = 'black'
|
|
||||||
|
|
||||||
# Check if label_type is in the theme set...
|
|
||||||
theme = next((theme for theme in themes if theme['type'] == label_type), None)
|
theme = next((theme for theme in themes if theme['type'] == label_type), None)
|
||||||
|
|
||||||
if theme: # label_type IS one of the global theme settings
|
|
||||||
box_fill = theme['fill']
|
|
||||||
if 'outline' in theme:
|
|
||||||
box_outline = theme['outline']
|
box_outline = theme['outline']
|
||||||
if 'font-weight' in theme:
|
box_fill = theme['fill']
|
||||||
text_weight = theme['font-weight']
|
text_color = 'black'
|
||||||
elif label_type == 'Arduino':
|
# Some auto-color things only work if RGB (not named) fill is specified...
|
||||||
box_fill = palette[2]
|
if (box_fill[0] == '#'):
|
||||||
else: # label_type IS NOT in themes, must be a muxed pin.
|
|
||||||
# Switch to chromatic color scheme based on index of label_type
|
|
||||||
# in the CSV pinmuxes header.
|
|
||||||
box_fill = palette[chroma[pinmuxes.index(label_type) % len(chroma)]]
|
|
||||||
if pinmuxes.index(label_type) >= len(chroma):
|
|
||||||
box_outline = 'auto' # Repeating color sequence, add outline
|
|
||||||
|
|
||||||
if (box_fill == 'black'):
|
|
||||||
text_color = 'white'
|
|
||||||
elif (box_fill[0] == '#'):
|
|
||||||
red = int(box_fill[1:3], 16)
|
red = int(box_fill[1:3], 16)
|
||||||
green = int(box_fill[3:5], 16)
|
green = int(box_fill[3:5], 16)
|
||||||
blue = int(box_fill[5:7], 16)
|
blue = int(box_fill[5:7], 16)
|
||||||
|
|
@ -613,13 +246,17 @@ def draw_label(dwg, group, label_text, label_type, box_x, box_y, box_w, box_h):
|
||||||
if box_outline == 'auto':
|
if box_outline == 'auto':
|
||||||
rgb = ((red // 2)) << 16 | ((green // 2) << 8) | (blue // 2)
|
rgb = ((red // 2)) << 16 | ((green // 2) << 8) | (blue // 2)
|
||||||
box_outline = '#{0:0{1}X}'.format(rgb, 6)
|
box_outline = '#{0:0{1}X}'.format(rgb, 6)
|
||||||
|
elif (box_fill == 'black'):
|
||||||
|
text_color = 'white'
|
||||||
|
|
||||||
|
#box_opacity = theme['opacity'] # Not used, everything's gone opaque
|
||||||
|
weight = theme['font-weight']
|
||||||
# draw a box
|
# draw a box
|
||||||
box_x += BOX_INSET[0] # Inset a bit so boxes aren't touching
|
box_x += BOX_INSET[0] # Inset a bit so boxes aren't touching
|
||||||
box_y += BOX_INSET[1]
|
box_y += BOX_INSET[1]
|
||||||
box_w -= BOX_INSET[0] * 2
|
box_w -= BOX_INSET[0] * 2
|
||||||
box_h -= BOX_INSET[1] * 2
|
box_h -= BOX_INSET[1] * 2
|
||||||
if box_outline:
|
if box_outline != 'none':
|
||||||
box_x += BOX_STROKE_WIDTH * 0.5 # Inset further for stroke
|
box_x += BOX_STROKE_WIDTH * 0.5 # Inset further for stroke
|
||||||
box_y += BOX_STROKE_WIDTH * 0.5 # (so box extents visually align)
|
box_y += BOX_STROKE_WIDTH * 0.5 # (so box extents visually align)
|
||||||
box_w -= BOX_STROKE_WIDTH
|
box_w -= BOX_STROKE_WIDTH
|
||||||
|
|
@ -627,8 +264,7 @@ def draw_label(dwg, group, label_text, label_type, box_x, box_y, box_w, box_h):
|
||||||
group.add(dwg.rect(
|
group.add(dwg.rect(
|
||||||
(box_x, box_y),
|
(box_x, box_y),
|
||||||
(box_w, box_h),
|
(box_w, box_h),
|
||||||
BOX_CORNER_RADIUS[0] - BOX_STROKE_WIDTH * 0.5,
|
BOX_CORNER_RADIUS[0], BOX_CORNER_RADIUS[1],
|
||||||
BOX_CORNER_RADIUS[1] - BOX_STROKE_WIDTH * 0.5,
|
|
||||||
stroke = box_outline,
|
stroke = box_outline,
|
||||||
stroke_width = BOX_STROKE_WIDTH,
|
stroke_width = BOX_STROKE_WIDTH,
|
||||||
fill = box_fill
|
fill = box_fill
|
||||||
|
|
@ -641,36 +277,24 @@ def draw_label(dwg, group, label_text, label_type, box_x, box_y, box_w, box_h):
|
||||||
fill = box_fill
|
fill = box_fill
|
||||||
))
|
))
|
||||||
if label_text:
|
if label_text:
|
||||||
if text_weight:
|
|
||||||
group.add(dwg.text(
|
|
||||||
label_text,
|
|
||||||
insert = (box_x+box_w/2, box_y+box_h/2+LABEL_HEIGHTADJUST),
|
|
||||||
font_size = LABEL_FONTSIZE,
|
|
||||||
font_family = LABEL_FONT,
|
|
||||||
font_weight = text_weight,
|
|
||||||
fill = text_color,
|
|
||||||
text_anchor = "middle",
|
|
||||||
))
|
|
||||||
else:
|
|
||||||
group.add(dwg.text(
|
group.add(dwg.text(
|
||||||
label_text,
|
label_text,
|
||||||
insert = (box_x+box_w/2, box_y+box_h/2+LABEL_HEIGHTADJUST),
|
insert = (box_x+box_w/2, box_y+box_h/2+LABEL_HEIGHTADJUST),
|
||||||
font_size = LABEL_FONTSIZE,
|
font_size = LABEL_FONTSIZE,
|
||||||
font_family = LABEL_FONT,
|
font_family = LABEL_FONT,
|
||||||
|
font_weight = weight,
|
||||||
fill = text_color,
|
fill = text_color,
|
||||||
text_anchor = "middle",
|
text_anchor = "middle",
|
||||||
))
|
))
|
||||||
|
|
||||||
|
|
||||||
def draw_pinlabels_svg(connections):
|
def draw_pinlabels_svg(connections):
|
||||||
global arduino_in_use
|
|
||||||
|
|
||||||
dwg = svgwrite.Drawing(filename=str("pinlabels.svg"), profile='tiny', size=(100,100))
|
dwg = svgwrite.Drawing(filename=str("pinlabels.svg"), profile='tiny', size=(100,100))
|
||||||
|
|
||||||
# collect all muxstrings to calculate label widths:
|
# collect all muxstrings to calculate label widths:
|
||||||
muxstringlen = {}
|
muxstringlen = {}
|
||||||
for i, conn in enumerate(connections):
|
for i, conn in enumerate(connections):
|
||||||
if not conn.get('mux'):
|
if not 'mux' in conn:
|
||||||
continue
|
continue
|
||||||
for mux in conn['mux']:
|
for mux in conn['mux']:
|
||||||
if not mux in muxstringlen:
|
if not mux in muxstringlen:
|
||||||
|
|
@ -692,33 +316,13 @@ def draw_pinlabels_svg(connections):
|
||||||
for i, conn in enumerate(tops+[None,]+bottoms+[None,]+rights+[None,]+lefts+[None,]+others):
|
for i, conn in enumerate(tops+[None,]+bottoms+[None,]+rights+[None,]+lefts+[None,]+others):
|
||||||
if conn == None: # Gap between groups
|
if conn == None: # Gap between groups
|
||||||
continue
|
continue
|
||||||
box_x = 0
|
box_x = last_used_x = 0
|
||||||
box_w = max(6, len(conn['name'])+1) * BOX_WIDTH_PER_CHAR
|
box_w = max(6, len(conn['name'])+1) * BOX_WIDTH_PER_CHAR
|
||||||
# If it's a left/bottom box, and wider than the standard width,
|
|
||||||
# scoot left so the right edge is aligned with other boxes.
|
|
||||||
if conn['location'] in ('left', 'bottom'):
|
|
||||||
box_x -= box_w - 6 * BOX_WIDTH_PER_CHAR
|
|
||||||
last_used_x = box_x
|
|
||||||
first_box_w = box_w
|
first_box_w = box_w
|
||||||
last_used_w = box_w
|
last_used_w = box_w
|
||||||
if conn['location'] in ('top', 'right', 'unknown'):
|
if conn['location'] in ('top', 'right', 'unknown'):
|
||||||
box_x += box_w
|
box_x += box_w
|
||||||
|
if 'mux' in conn: # power pins don't have muxing, its cool!
|
||||||
# Adjust endpoint if there's an Arduino pin defined.
|
|
||||||
# Neither a theme nor a mux, just a weird one-off...
|
|
||||||
if 'arduinopin' in conn:
|
|
||||||
#box_w = (longest_arduinopin + 1) * BOX_WIDTH_PER_CHAR
|
|
||||||
box_w = longest_arduinopin * BOX_WIDTH_PER_CHAR
|
|
||||||
|
|
||||||
if conn['location'] in ('top', 'right', 'unknown'):
|
|
||||||
last_used_x = box_x # Save-and-increment
|
|
||||||
box_x += box_w
|
|
||||||
elif conn['location'] in ('left', 'bottom'):
|
|
||||||
box_x -= box_w # Increment-and-save
|
|
||||||
last_used_x = box_x
|
|
||||||
last_used_w = box_w
|
|
||||||
|
|
||||||
if conn.get('mux'): # power pins don't have muxing, its cool!
|
|
||||||
for mux in conn['mux']:
|
for mux in conn['mux']:
|
||||||
box_w = (muxstringlen[mux]+1) * BOX_WIDTH_PER_CHAR
|
box_w = (muxstringlen[mux]+1) * BOX_WIDTH_PER_CHAR
|
||||||
# Increment box_x regardless to maintain mux columns.
|
# Increment box_x regardless to maintain mux columns.
|
||||||
|
|
@ -738,9 +342,9 @@ def draw_pinlabels_svg(connections):
|
||||||
g = dwg.g() # Create group for connection
|
g = dwg.g() # Create group for connection
|
||||||
group.append(g) # Add to list
|
group.append(g) # Add to list
|
||||||
if conn['location'] in ('top', 'right', 'unknown'):
|
if conn['location'] in ('top', 'right', 'unknown'):
|
||||||
g.add(dwg.line(start=(-4, line_y), end=(last_used_x + last_used_w * 0.5, line_y), stroke=ROW_STROKE_COLOR, stroke_width = ROW_STROKE_WIDTH, stroke_linecap='round'))
|
g.add(dwg.line(start=(-4, line_y), end=(last_used_x + last_used_w * 0.5, line_y), stroke=ROW_STROKE_COLOR, stroke_width = ROW_STROKE_WIDTH, stroke_linecap='round'));
|
||||||
if conn['location'] in ('bottom', 'left'):
|
if conn['location'] in ('bottom', 'left'):
|
||||||
g.add(dwg.line(start=(6 * BOX_WIDTH_PER_CHAR + 4, line_y), end=(last_used_x + last_used_w * 0.5, line_y), stroke=ROW_STROKE_COLOR, stroke_width = ROW_STROKE_WIDTH, stroke_linecap='round'))
|
g.add(dwg.line(start=(first_box_w + 4, line_y), end=(last_used_x + last_used_w * 0.5, line_y), stroke=ROW_STROKE_COLOR, stroke_width = ROW_STROKE_WIDTH, stroke_linecap='round'));
|
||||||
|
|
||||||
# pick out each connection
|
# pick out each connection
|
||||||
group_index = 0 # Only increments on non-None connections, unlike enum
|
group_index = 0 # Only increments on non-None connections, unlike enum
|
||||||
|
|
@ -761,25 +365,20 @@ def draw_pinlabels_svg(connections):
|
||||||
# clean up some names!
|
# clean up some names!
|
||||||
|
|
||||||
label_type = 'CircuitPython Name'
|
label_type = 'CircuitPython Name'
|
||||||
if name_label in ("3.3V", "VMAX", "VHIGH", "VIN", "5V", "VBAT", "VBUS", "VHI", "VCCIO", "VIO"):
|
if name_label in ("3.3V", "VHIGH", "VIN", "5V", "VBAT", "VBUS", "VHI"):
|
||||||
label_type = 'Power'
|
label_type = 'Power'
|
||||||
if name_label in ("GND"):
|
if name_label in ("GND"):
|
||||||
label_type = 'GND'
|
label_type = 'GND'
|
||||||
if name_label in ("EN", "RST", "RESET", "SWCLK", "SWC", "SWDIO", "SWD"):
|
if name_label in ("EN", "RESET", "SWCLK", "SWC", "SWDIO", "SWD"):
|
||||||
label_type = 'Control'
|
label_type = 'Control'
|
||||||
if name_label in ('SCL', 'SCL1', 'SCL0') and conn.get('svgtype') == 'ellipse':
|
if name_label in ('SCL', 'SCL1', 'SCL0') and conn['svgtype'] == 'ellipse':
|
||||||
# special stemma QT!
|
# special stemma QT!
|
||||||
label_type = 'QT_SCL'
|
label_type = 'QT_SCL'
|
||||||
if name_label in ('SDA', 'SDA1', 'SDA0') and conn.get('svgtype') == 'ellipse':
|
if name_label in ('SDA', 'SDA1', 'SDA0') and conn['svgtype'] == 'ellipse':
|
||||||
# special stemma QT!
|
# special stemma QT!
|
||||||
label_type = 'QT_SDA'
|
label_type = 'QT_SDA'
|
||||||
|
|
||||||
# Draw the first-column box (could be power pin or Arduino pin #)
|
# Draw the first-column box (could be power pin or Arduino pin #)
|
||||||
# (this box/label relates to the global 'themes' list).
|
|
||||||
# If it's in left/bottom groups, scoot left a little if box is
|
|
||||||
# wider than the 6-char default (so right edges align).
|
|
||||||
if conn['location'] in ('left', 'bottom'):
|
|
||||||
box_x -= box_w - 6 * BOX_WIDTH_PER_CHAR
|
|
||||||
draw_label(dwg, group[group_index], name_label, label_type, box_x, box_y, box_w, box_h)
|
draw_label(dwg, group[group_index], name_label, label_type, box_x, box_y, box_w, box_h)
|
||||||
# Increment box_x only on 'right' locations, because the behavior
|
# Increment box_x only on 'right' locations, because the behavior
|
||||||
# for subsequent right boxes is to draw-and-increment, whereas
|
# for subsequent right boxes is to draw-and-increment, whereas
|
||||||
|
|
@ -788,25 +387,10 @@ def draw_pinlabels_svg(connections):
|
||||||
box_x += box_w
|
box_x += box_w
|
||||||
mark_as_in_use(label_type)
|
mark_as_in_use(label_type)
|
||||||
|
|
||||||
# Arduino pins are sort of brute-force wedged in here, neither a
|
if 'mux' in conn: # power pins don't have muxing, its cool!
|
||||||
# theme nor a muxed pin...the position and label-drawing from
|
|
||||||
# above are duplicated (except box_x decrement is different).
|
|
||||||
if 'arduinopin' in conn:
|
|
||||||
box_w = (longest_arduinopin + 1) * BOX_WIDTH_PER_CHAR
|
|
||||||
if conn['location'] in ('left', 'bottom'):
|
|
||||||
box_x -= box_w
|
|
||||||
draw_label(dwg, group[group_index], conn['arduinopin'], 'Arduino', box_x, box_y, box_w, box_h)
|
|
||||||
if conn['location'] in ('top', 'right', 'unknown'):
|
|
||||||
box_x += box_w
|
|
||||||
arduino_in_use = True
|
|
||||||
|
|
||||||
if conn.get('mux'): # power pins don't have muxing, its cool!
|
|
||||||
for mux in conn['mux']:
|
for mux in conn['mux']:
|
||||||
label = conn['mux'][mux] # Label (if any) for this pin/mux
|
label = conn['mux'][mux]
|
||||||
if muxstringlen[mux]: # Typical label length for this mux
|
|
||||||
box_w = (muxstringlen[mux]+1) * BOX_WIDTH_PER_CHAR
|
box_w = (muxstringlen[mux]+1) * BOX_WIDTH_PER_CHAR
|
||||||
else:
|
|
||||||
box_w = 0
|
|
||||||
if not label:
|
if not label:
|
||||||
# Increment box_x regardless for sparse tables
|
# Increment box_x regardless for sparse tables
|
||||||
if conn['location'] in ('top', 'right', 'unknown'):
|
if conn['location'] in ('top', 'right', 'unknown'):
|
||||||
|
|
@ -816,64 +400,35 @@ def draw_pinlabels_svg(connections):
|
||||||
continue
|
continue
|
||||||
if mux == 'GPIO': # the underlying pin GPIO name
|
if mux == 'GPIO': # the underlying pin GPIO name
|
||||||
label_type = 'Port'
|
label_type = 'Port'
|
||||||
elif mux in ('SPI', 'HS/QSPI', 'QSPI/CAN') : # SPI ports
|
elif mux in ('SPI', 'HS/QSPI') : # SPI ports
|
||||||
label_type = 'SPI'
|
label_type = 'SPI'
|
||||||
elif mux in ('I2C',): # I2C ports
|
elif mux == 'I2C': # I2C ports
|
||||||
label_type = 'I2C'
|
label_type = 'I2C'
|
||||||
elif mux in ('UART', 'Debug'): # UART ports
|
elif mux in ('UART', 'Debug'): # UART ports
|
||||||
label_type = 'UART'
|
label_type = 'UART'
|
||||||
elif mux == 'PWM': # PWM's
|
elif mux == 'PWM': # PWM's
|
||||||
label_type = 'PWM'
|
label_type = 'PWM'
|
||||||
elif mux in('Touch', 'TOUCH'): # touch capable
|
elif mux == 'Touch': # touch capable
|
||||||
label_type = 'Touch'
|
label_type = 'Analog'
|
||||||
elif mux == 'ADC': # analog ins
|
elif mux == 'ADC': # analog ins
|
||||||
label_type = 'Analog'
|
label_type = 'Analog'
|
||||||
elif mux == 'Arduino ADC': # analog ins
|
|
||||||
label_type = 'SERCOM'
|
|
||||||
elif mux == 'Other':
|
elif mux == 'Other':
|
||||||
label_type = 'I2C'
|
label_type = 'I2C'
|
||||||
elif mux == 'Power Domain':
|
elif mux == 'Power Domain':
|
||||||
label_type = 'Power Domain'
|
label_type = 'Power'
|
||||||
elif mux in ('High Speed', "PCC"):
|
|
||||||
label_type = 'High Speed'
|
|
||||||
elif mux == 'Low Speed':
|
|
||||||
label_type = 'Low Speed'
|
|
||||||
elif mux == 'RTC':
|
|
||||||
label_type = 'Low Speed'
|
|
||||||
elif mux == 'Speed':
|
|
||||||
label_type = 'Speed'
|
|
||||||
elif mux in('Special', 'SPECIAL'):
|
|
||||||
label_type = 'Special'
|
|
||||||
elif mux == 'INT':
|
|
||||||
label_type = 'Interrupt'
|
|
||||||
elif mux == 'DAC/AREF':
|
|
||||||
label_type = 'DAC/AREF'
|
|
||||||
elif mux == 'SERCOM':
|
|
||||||
label_type = 'SERCOM'
|
|
||||||
elif mux == 'SERCOM Alt':
|
|
||||||
label_type = 'SERCOM Alt'
|
|
||||||
elif mux == 'Timer':
|
|
||||||
label_type = 'Timer'
|
|
||||||
elif mux == 'Timer Alt':
|
|
||||||
label_type = 'Timer Alt'
|
|
||||||
elif mux == 'Timer Alt2':
|
|
||||||
label_type = 'Timer Alt2'
|
|
||||||
elif mux in ('SDMMC', "I2S"):
|
|
||||||
label_type = 'SERCOM'
|
|
||||||
else:
|
else:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Here, labels are chromatic mux items, not in themes
|
|
||||||
if conn['location'] in ('top', 'right', 'unknown'):
|
if conn['location'] in ('top', 'right', 'unknown'):
|
||||||
# Draw-and-increment
|
# Draw-and-increment
|
||||||
draw_label(dwg, group[group_index], label, mux, box_x, box_y, box_w, box_h)
|
draw_label(dwg, group[group_index], label, label_type, box_x, box_y, box_w, box_h)
|
||||||
box_x += box_w
|
box_x += box_w
|
||||||
if conn['location'] in ('bottom', 'left'):
|
if conn['location'] in ('bottom', 'left'):
|
||||||
# Increment-and-draw
|
# Increment-and-draw
|
||||||
box_x -= box_w
|
box_x -= box_w
|
||||||
draw_label(dwg, group[group_index], label, mux, box_x, box_y, box_w, box_h)
|
draw_label(dwg, group[group_index], label, label_type, box_x, box_y, box_w, box_h)
|
||||||
|
|
||||||
mark_as_in_use(mux) # Show label type on legend
|
mark_as_in_use(label_type) # Show label type on legend
|
||||||
else:
|
else:
|
||||||
# For power pins with no mux, keep legend up to date
|
# For power pins with no mux, keep legend up to date
|
||||||
# and don't 'continue,' so group_index keeps in sync.
|
# and don't 'continue,' so group_index keeps in sync.
|
||||||
|
|
@ -885,18 +440,22 @@ def draw_pinlabels_svg(connections):
|
||||||
# Add legend
|
# Add legend
|
||||||
g = dwg.g()
|
g = dwg.g()
|
||||||
box_y = BOX_HEIGHT * (i + 4)
|
box_y = BOX_HEIGHT * (i + 4)
|
||||||
# Draw legend items for in-use themes
|
|
||||||
for theme in themes:
|
for theme in themes:
|
||||||
# Skip themes not in use, and the STEMMA QT connector
|
# Skip themes not in use, and the STEMMA QT connector
|
||||||
if 'in_use' in theme and not theme['type'].startswith('QT_'):
|
if 'in_use' in theme and not theme['type'].startswith('QT_'):
|
||||||
box_y = draw_legend_box(dwg, g, theme['type'], box_y)
|
label_type = theme['type']
|
||||||
# Wedge the Arduino pin in there if needed
|
draw_label(dwg, g, None, label_type, 0, box_y, BOX_HEIGHT, BOX_HEIGHT)
|
||||||
if arduino_in_use:
|
label_text = label_type
|
||||||
box_y = draw_legend_box(dwg, g, 'Arduino', box_y)
|
g.add(dwg.text(
|
||||||
# And then add in-use pin mux items to legend
|
label_text,
|
||||||
for i, mux in enumerate(pinmuxes):
|
insert = (BOX_HEIGHT * 1.2, box_y+box_h/2+LABEL_HEIGHTADJUST),
|
||||||
if pinmux_in_use[i]:
|
font_size = LABEL_FONTSIZE,
|
||||||
box_y = draw_legend_box(dwg, g, mux, box_y)
|
font_family = LABEL_FONT,
|
||||||
|
font_weight = 'bold',
|
||||||
|
fill = 'black',
|
||||||
|
text_anchor = 'start'
|
||||||
|
))
|
||||||
|
box_y += BOX_HEIGHT
|
||||||
dwg.add(g)
|
dwg.add(g)
|
||||||
|
|
||||||
# add title and url
|
# add title and url
|
||||||
|
|
@ -908,7 +467,7 @@ def draw_pinlabels_svg(connections):
|
||||||
font_family = LABEL_FONT,
|
font_family = LABEL_FONT,
|
||||||
font_weight = 'bold',
|
font_weight = 'bold',
|
||||||
fill = 'black',
|
fill = 'black',
|
||||||
text_anchor = 'middle'
|
text_anchor = 'end'
|
||||||
))
|
))
|
||||||
g.add(dwg.text(
|
g.add(dwg.text(
|
||||||
product_url,
|
product_url,
|
||||||
|
|
@ -917,66 +476,37 @@ def draw_pinlabels_svg(connections):
|
||||||
font_family = LABEL_FONT,
|
font_family = LABEL_FONT,
|
||||||
font_weight = 'bold',
|
font_weight = 'bold',
|
||||||
fill = 'black',
|
fill = 'black',
|
||||||
text_anchor = 'middle'
|
text_anchor = 'end'
|
||||||
))
|
))
|
||||||
dwg.add(g)
|
dwg.add(g)
|
||||||
|
|
||||||
print(chip_description)
|
print(chip_description)
|
||||||
box_y += 30
|
dwg.add(dwg.text(
|
||||||
g = dwg.g() # Create group for description
|
chip_description,
|
||||||
strings = textwrap.wrap(chip_description, width=40)
|
insert = (0, box_y+30),
|
||||||
for s in strings:
|
|
||||||
g.add(dwg.text(
|
|
||||||
s,
|
|
||||||
insert = (0, box_y),
|
|
||||||
font_size = LABEL_FONTSIZE,
|
font_size = LABEL_FONTSIZE,
|
||||||
font_family = LABEL_FONT,
|
font_family = LABEL_FONT,
|
||||||
font_weight = 'normal',
|
font_weight = 'normal',
|
||||||
fill = 'black',
|
fill = 'black',
|
||||||
text_anchor = 'start',
|
|
||||||
))
|
|
||||||
box_y += LABEL_FONTSIZE
|
|
||||||
dwg.add(g)
|
|
||||||
|
|
||||||
dwg.save()
|
|
||||||
|
|
||||||
|
|
||||||
# Draws colored box and label, returns next avail Y position
|
|
||||||
def draw_legend_box(dwg, g, label_text, box_y):
|
|
||||||
draw_label(dwg, g, None, label_text, 0, box_y, BOX_HEIGHT, BOX_HEIGHT)
|
|
||||||
if label_text == 'Arduino':
|
|
||||||
label_text = 'Arduino Name'
|
|
||||||
g.add(dwg.text(
|
|
||||||
label_text,
|
|
||||||
insert = (BOX_HEIGHT * 1.2, box_y+BOX_HEIGHT/2+LABEL_HEIGHTADJUST),
|
|
||||||
font_size = LABEL_FONTSIZE,
|
|
||||||
font_family = LABEL_FONT,
|
|
||||||
font_weight = 'bold',
|
|
||||||
fill = 'black',
|
|
||||||
text_anchor = 'start'
|
text_anchor = 'start'
|
||||||
))
|
))
|
||||||
return box_y + BOX_HEIGHT
|
dwg.save()
|
||||||
|
|
||||||
|
|
||||||
# Add an 'in_use' key to themes that get referenced.
|
# Add an 'in_use' key to themes that get referenced.
|
||||||
# Only these items are shown on the legend.
|
# Only these items are shown on the legend.
|
||||||
def mark_as_in_use(label_type):
|
def mark_as_in_use(label_type):
|
||||||
# If label_type matches a theme, add/set 'in_use' element:
|
|
||||||
for theme in themes:
|
for theme in themes:
|
||||||
if theme['type'] == label_type:
|
if theme['type'] == label_type and not 'in_use' in theme:
|
||||||
theme['in_use'] = '1'
|
theme['in_use'] = '1'
|
||||||
return
|
|
||||||
# If label_type didn't match any themes, it must be a pinmux,
|
|
||||||
# marked in a simple array.
|
|
||||||
pinmux_in_use[pinmuxes.index(label_type)] = 1
|
|
||||||
|
|
||||||
|
|
||||||
@click.command()
|
@click.command()
|
||||||
@click.argument('FZPZ')
|
@click.argument('FZPZ')
|
||||||
@click.argument('circuitpydef')
|
@click.argument('circuitpydef')
|
||||||
@click.argument('pinoutcsv')
|
@click.argument('pinoutcsv')
|
||||||
@click.option('-a', '--arduino', 'arduinovariantfolder')
|
|
||||||
@click.option('-s', '--substitute', 'substitute', nargs=2)
|
@click.option('-s', '--substitute', 'substitute', nargs=2)
|
||||||
def parse(fzpz, circuitpydef, pinoutcsv, arduinovariantfolder, substitute):
|
def parse(fzpz, circuitpydef, pinoutcsv, substitute):
|
||||||
# fzpz are actually zip files!
|
# fzpz are actually zip files!
|
||||||
shutil.copyfile(fzpz, fzpz+".zip")
|
shutil.copyfile(fzpz, fzpz+".zip")
|
||||||
# delete any old workdir
|
# delete any old workdir
|
||||||
|
|
@ -1001,23 +531,11 @@ def parse(fzpz, circuitpydef, pinoutcsv, arduinovariantfolder, substitute):
|
||||||
if conn['name'] == rename[0]:
|
if conn['name'] == rename[0]:
|
||||||
conn['name'] = rename[1]
|
conn['name'] = rename[1]
|
||||||
|
|
||||||
# find the 'true' GPIO pin names via the circuitpython file
|
# find the 'true' GPIO pine via the circuitpython file
|
||||||
# e.g. "MISO" and "D2" map to "GPIO03" or "P0.04"
|
|
||||||
if circuitpydef != "None":
|
|
||||||
connections = get_circuitpy_aliases(connections, circuitpydef)
|
connections = get_circuitpy_aliases(connections, circuitpydef)
|
||||||
|
|
||||||
# find the mapping between gpio pins and arduino pins
|
|
||||||
# atmega 328's/32u4 dont have a mapping
|
|
||||||
if not arduinovariantfolder and pinoutcsv == "atmega328pins.csv":
|
|
||||||
arduinovariantfolder = "atmega328"
|
|
||||||
if not arduinovariantfolder and pinoutcsv == "atmega32u4pins.csv":
|
|
||||||
arduinovariantfolder = "atmega32u4"
|
|
||||||
if not arduinovariantfolder and pinoutcsv == "attiny8xpins.csv":
|
|
||||||
arduinovariantfolder = "attiny8x"
|
|
||||||
connections = get_arduino_mapping(connections, arduinovariantfolder)
|
|
||||||
# open and parse the pinout mapper CSV
|
# open and parse the pinout mapper CSV
|
||||||
pinarray = get_chip_pinout(connections, pinoutcsv)
|
pinarray = get_chip_pinout(connections, pinoutcsv)
|
||||||
#print(pinarray)
|
|
||||||
|
|
||||||
# get SVG width and height
|
# get SVG width and height
|
||||||
bb_sg = sg.fromfile(svgfilename)
|
bb_sg = sg.fromfile(svgfilename)
|
||||||
|
|
@ -1026,18 +544,10 @@ def parse(fzpz, circuitpydef, pinoutcsv, arduinovariantfolder, substitute):
|
||||||
svg_height = bb_sg.height
|
svg_height = bb_sg.height
|
||||||
if "in" in svg_width:
|
if "in" in svg_width:
|
||||||
svg_width = 25.4 * float(svg_width[:-2]) * MM_TO_PX
|
svg_width = 25.4 * float(svg_width[:-2]) * MM_TO_PX
|
||||||
elif "mm" in svg_width:
|
|
||||||
svg_width = float(svg_width[:-2]) * MM_TO_PX
|
|
||||||
elif "px" in svg_width:
|
|
||||||
svg_width = float(svg_width[:-2])
|
|
||||||
else:
|
else:
|
||||||
raise RuntimeError("Dont know units of width!", svg_width)
|
raise RuntimeError("Dont know units of width!", svg_width)
|
||||||
if "in" in svg_height:
|
if "in" in svg_height:
|
||||||
svg_height = 25.4 * float(svg_height[:-2]) * MM_TO_PX
|
svg_height = 25.4 * float(svg_height[:-2]) * MM_TO_PX
|
||||||
elif "mm" in svg_height:
|
|
||||||
svg_height = float(svg_height[:-2]) * MM_TO_PX
|
|
||||||
elif "px" in svg_height:
|
|
||||||
svg_height = float(svg_height[:-2])
|
|
||||||
else:
|
else:
|
||||||
raise RuntimeError("Dont know units of width!", svg_height)
|
raise RuntimeError("Dont know units of width!", svg_height)
|
||||||
|
|
||||||
|
|
@ -1077,9 +587,7 @@ def parse(fzpz, circuitpydef, pinoutcsv, arduinovariantfolder, substitute):
|
||||||
if not 'pinname' in conn:
|
if not 'pinname' in conn:
|
||||||
continue
|
continue
|
||||||
# find muxes next
|
# find muxes next
|
||||||
|
|
||||||
muxes = next((pin for pin in pinarray if pin['GPIO'] == conn['pinname']), None)
|
muxes = next((pin for pin in pinarray if pin['GPIO'] == conn['pinname']), None)
|
||||||
#print("***", muxes)
|
|
||||||
conn['mux'] = muxes
|
conn['mux'] = muxes
|
||||||
draw_pinlabels_svg(connections)
|
draw_pinlabels_svg(connections)
|
||||||
|
|
||||||
|
|
|
||||||
4639
pinlabels.svg
4639
pinlabels.svg
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 150 KiB After Width: | Height: | Size: 49 KiB |
|
|
@ -1,406 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<!-- Generator: Adobe Illustrator 27.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
|
||||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
|
||||||
width="1280px" height="1024px" viewBox="0 0 1280 1024" enable-background="new 0 0 1280 1024" xml:space="preserve">
|
|
||||||
<g>
|
|
||||||
<line fill="none" stroke="#8C8C8C" stroke-width="0.7087" stroke-linecap="round" x1="35" y1="46.9" x2="59" y2="46.9"/>
|
|
||||||
<path fill="#920000" d="M49.9,43.8h18.2c0.6,0,1.1,0.5,1.1,1.1v3.8c0,0.6-0.5,1.1-1.1,1.1H49.9c-0.6,0-1.1-0.5-1.1-1.1V45
|
|
||||||
C48.8,44.3,49.3,43.8,49.9,43.8z"/>
|
|
||||||
<text transform="matrix(1 0 0 1 51.8051 48.6211)" fill="#FFFFFF" font-family="'CourierNewPS-BoldMT'" font-size="6px">3.3V</text>
|
|
||||||
<line fill="none" stroke="#8C8C8C" stroke-width="0.7087" stroke-linecap="round" x1="44.2" y1="32.5" x2="59" y2="32.5"/>
|
|
||||||
<path fill="#FFFF6D" d="M49.9,29.5h18.2c0.6,0,1.1,0.5,1.1,1.1v3.8c0,0.6-0.5,1.1-1.1,1.1H49.9c-0.6,0-1.1-0.5-1.1-1.1v-3.8
|
|
||||||
C48.7,30,49.2,29.5,49.9,29.5z"/>
|
|
||||||
<text transform="matrix(1 0 0 1 53.5721 34.2982)" font-family="'CourierNewPS-BoldMT'" font-size="6px">SCL</text>
|
|
||||||
<line fill="none" stroke="#8C8C8C" stroke-width="0.7087" stroke-linecap="round" x1="39.6" y1="39.7" x2="59" y2="39.7"/>
|
|
||||||
<path fill="#006DDB" d="M49.9,36.7h18.2c0.6,0,1.1,0.5,1.1,1.1v3.8c0,0.6-0.5,1.1-1.1,1.1H49.9c-0.6,0-1.1-0.5-1.1-1.1v-3.8
|
|
||||||
C48.7,37.2,49.2,36.7,49.9,36.7z"/>
|
|
||||||
<text transform="matrix(1 0 0 1 53.5721 41.4981)" fill="#FFFFFF" font-family="'CourierNewPS-BoldMT'" font-size="6px">SDA</text>
|
|
||||||
<line fill="none" stroke="#8C8C8C" stroke-width="0.7087" stroke-linecap="round" x1="30.5" y1="54" x2="59" y2="54"/>
|
|
||||||
<path d="M49.9,51h18.2c0.6,0,1.1,0.5,1.1,1.1v3.8c0,0.6-0.5,1.1-1.1,1.1H49.9c-0.6,0-1.1-0.5-1.1-1.1v-3.8
|
|
||||||
C48.8,51.5,49.3,51,49.9,51z"/>
|
|
||||||
<text transform="matrix(1 0 0 1 53.6053 55.744)" fill="#FFFFFF" font-family="'CourierNewPS-BoldMT'" font-size="6px">GND</text>
|
|
||||||
<line fill="none" stroke="#8C8C8C" stroke-width="0.7087" stroke-linecap="round" x1="35" y1="46.9" x2="35.1" y2="26.4"/>
|
|
||||||
<line fill="none" stroke="#8C8C8C" stroke-width="0.7087" stroke-linecap="round" x1="30.5" y1="53.8" x2="30.5" y2="26.4"/>
|
|
||||||
<line fill="none" stroke="#8C8C8C" stroke-width="0.7087" stroke-linecap="round" x1="39.6" y1="39.7" x2="39.6" y2="26.4"/>
|
|
||||||
<line fill="none" stroke="#8C8C8C" stroke-width="0.7087" stroke-linecap="round" x1="44.1" y1="32.5" x2="44.1" y2="26.4"/>
|
|
||||||
</g>
|
|
||||||
<g id="g18467" transform="translate(4.4999716,-4.9999826)">
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path fill="#DCDCDC" d="M184.9,27.1v-0.2c-0.2,0-0.4,0-0.6,0c-0.3,0-0.5,0-0.8-0.1v0.3h-3.1v-0.3c-0.2,0-0.4,0-0.6,0
|
|
||||||
c-0.3,0-0.6,0-0.8-0.1V27h-1.3v9.9h1.3v0.2c0.2,0,0.3,0,0.5,0c0.3,0,0.6,0,0.9,0.1V37h3.1v0.3c0.2,0,0.3,0,0.5,0
|
|
||||||
c0.3,0,0.6,0,0.9,0.1V37h1.3v-9.9H184.9z"/>
|
|
||||||
<circle fill="#1E1E1E" cx="181.9" cy="32.1" r="2.5"/>
|
|
||||||
<rect x="177.7" y="36.9" fill="#B4B4B4" width="8.5" height="0.6"/>
|
|
||||||
<rect x="177.7" y="26.7" fill="#B4B4B4" width="8.5" height="0.6"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line fill="none" stroke="#0000FF" stroke-width="0.7087" stroke-linecap="round" x1="234.5" y1="42.4" x2="245.1" y2="40.6"/>
|
|
||||||
<line fill="none" stroke="#FFFF00" stroke-width="0.7087" stroke-linecap="round" x1="234.6" y1="38.1" x2="245.1" y2="33.4"/>
|
|
||||||
<line fill="none" stroke="#000000" stroke-width="0.7087" stroke-linecap="round" x1="245.1" y1="54.9" x2="234.5" y2="50.2"/>
|
|
||||||
<line fill="none" stroke="#FF0000" stroke-width="0.7087" stroke-linecap="round" x1="245" y1="47.8" x2="234.5" y2="46.1"/>
|
|
||||||
<line fill="none" stroke="#FF0000" stroke-width="0.7087" stroke-linecap="round" x1="245.1" y1="47.8" x2="255.7" y2="47.8"/>
|
|
||||||
<line fill="none" stroke="#FFFF00" stroke-width="0.7087" stroke-linecap="round" x1="245.1" y1="33.4" x2="255.7" y2="33.4"/>
|
|
||||||
<line fill="none" stroke="#0000FF" stroke-width="0.7087" stroke-linecap="round" x1="245.1" y1="40.6" x2="255.7" y2="40.6"/>
|
|
||||||
<line fill="none" stroke="#000000" stroke-width="0.7087" stroke-linecap="round" x1="245.1" y1="54.9" x2="255.7" y2="54.9"/>
|
|
||||||
<path fill="#920000" d="M256.9,44.7h18.2c0.6,0,1.1,0.5,1.1,1.1v3.8c0,0.6-0.5,1.1-1.1,1.1h-18.2c-0.6,0-1.1-0.5-1.1-1.1v-3.8
|
|
||||||
C255.7,45.2,256.2,44.7,256.9,44.7z"/>
|
|
||||||
<text transform="matrix(1 0 0 1 258.7333 49.4797)" fill="#FFFFFF" font-family="'CourierNewPS-BoldMT'" font-size="6px">3.3V</text>
|
|
||||||
<path fill="#FFFF6D" d="M256.8,30.4H275c0.6,0,1.1,0.5,1.1,1.1v3.8c0,0.6-0.5,1.1-1.1,1.1h-18.2c-0.6,0-1.1-0.5-1.1-1.1v-3.8
|
|
||||||
C255.7,30.9,256.2,30.4,256.8,30.4z"/>
|
|
||||||
<text transform="matrix(1 0 0 1 260.5004 35.1569)" font-family="'CourierNewPS-BoldMT'" font-size="6px">SCL</text>
|
|
||||||
<path fill="#006DDB" d="M256.8,37.6H275c0.6,0,1.1,0.5,1.1,1.1v3.8c0,0.6-0.5,1.1-1.1,1.1h-18.2c-0.6,0-1.1-0.5-1.1-1.1v-3.8
|
|
||||||
C255.7,38.1,256.2,37.6,256.8,37.6z"/>
|
|
||||||
<text transform="matrix(1 0 0 1 260.5004 42.3569)" fill="#FFFFFF" font-family="'CourierNewPS-BoldMT'" font-size="6px">SDA</text>
|
|
||||||
<path d="M256.9,51.8h18.2c0.6,0,1.1,0.5,1.1,1.1v3.8c0,0.6-0.5,1.1-1.1,1.1h-18.2c-0.6,0-1.1-0.5-1.1-1.1v-3.8
|
|
||||||
C255.7,52.3,256.2,51.8,256.9,51.8z"/>
|
|
||||||
<text transform="matrix(1 0 0 1 260.5336 56.6027)" fill="#FFFFFF" font-family="'CourierNewPS-BoldMT'" font-size="6px">GND</text>
|
|
||||||
<path fill="#FFFF00" d="M256.8,30.4H275c0.6,0,1.1,0.5,1.1,1.1v3.8c0,0.6-0.5,1.1-1.1,1.1h-18.2c-0.6,0-1.1-0.5-1.1-1.1v-3.8
|
|
||||||
C255.7,30.9,256.2,30.4,256.8,30.4z"/>
|
|
||||||
<text transform="matrix(1 0 0 1 260.5002 35.1569)" font-family="'CourierNewPS-BoldMT'" font-size="6px">SCL</text>
|
|
||||||
<path fill="#0000FF" d="M256.8,37.6H275c0.6,0,1.1,0.5,1.1,1.1v3.8c0,0.6-0.5,1.1-1.1,1.1h-18.2c-0.6,0-1.1-0.5-1.1-1.1v-3.8
|
|
||||||
C255.7,38.1,256.2,37.6,256.8,37.6z"/>
|
|
||||||
<text transform="matrix(1 0 0 1 260.5002 42.3569)" fill="#FFFFFF" font-family="'CourierNewPS-BoldMT'" font-size="6px">SDA</text>
|
|
||||||
<line fill="none" stroke="#FFFF00" stroke-width="0.7087" stroke-linecap="round" x1="223.8" y1="38.1" x2="234.5" y2="38.1"/>
|
|
||||||
<line fill="none" stroke="#0000FF" stroke-width="0.7087" stroke-linecap="round" x1="223.8" y1="42.4" x2="234.5" y2="42.4"/>
|
|
||||||
<line fill="none" stroke="#FF0000" stroke-width="0.7087" stroke-linecap="round" x1="223.8" y1="46.1" x2="234.4" y2="46.1"/>
|
|
||||||
<line fill="none" stroke="#000000" stroke-width="0.7087" stroke-linecap="round" x1="223.8" y1="50.2" x2="234.5" y2="50.2"/>
|
|
||||||
<g>
|
|
||||||
|
|
||||||
<rect id="rect18427_1_" x="209.9" y="36.2" fill="#333333" stroke="#333333" stroke-width="0.2877" stroke-miterlimit="3.8362" width="12.6" height="15.5"/>
|
|
||||||
<rect id="rect18429_1_" x="222.4" y="33.6" fill="#666666" width="3.3" height="20.8"/>
|
|
||||||
<g>
|
|
||||||
<rect id="rect18431_1_" x="218.8" y="49.2" fill="#666666" width="3.9" height="2.8"/>
|
|
||||||
<rect id="rect18433_1_" x="218.8" y="46.5" fill="#666666" width="3.9" height="1.5"/>
|
|
||||||
<rect id="rect18435_1_" x="218.8" y="43.4" fill="#666666" width="3.9" height="1.1"/>
|
|
||||||
<rect id="rect18437_1_" x="218.8" y="39.8" fill="#666666" width="3.9" height="1.5"/>
|
|
||||||
<rect id="rect18439_1_" x="218.8" y="36" fill="#666666" width="3.9" height="2.6"/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path fill="none" stroke="#FF0000" stroke-width="0.7087" stroke-linecap="round" stroke-linejoin="round" d="M145.5,55.5h-43.7
|
|
||||||
c-1,0-1.9-0.9-1.9-1.9V34.7"/>
|
|
||||||
<path fill="none" stroke="#000000" stroke-width="0.7087" stroke-linecap="round" stroke-linejoin="round" d="M145.5,62.7h-47
|
|
||||||
c-1,0-1.9-0.9-1.9-1.9V34.7"/>
|
|
||||||
<path fill="none" stroke="#FFFF00" stroke-width="0.7087" stroke-linecap="round" stroke-linejoin="round" d="M145.5,41.1h-37
|
|
||||||
c-1,0-1.9-0.9-1.9-1.9v-4.5"/>
|
|
||||||
<path fill="none" stroke="#0000FF" stroke-width="0.7087" stroke-linecap="round" stroke-linejoin="round" d="M145.5,48.3h-40.4
|
|
||||||
c-1,0-1.9-0.9-1.9-1.9V34.7"/>
|
|
||||||
<g>
|
|
||||||
|
|
||||||
<rect id="rect18427_2_" x="93.8" y="19.6" fill="#333333" stroke="#333333" stroke-width="0.2877" stroke-miterlimit="3.8362" width="15.5" height="12.6"/>
|
|
||||||
<rect id="rect18429_2_" x="91.1" y="32" fill="#666666" width="20.8" height="3.3"/>
|
|
||||||
<g>
|
|
||||||
<rect id="rect18431_2_" x="106.8" y="28.4" fill="#666666" width="2.8" height="3.9"/>
|
|
||||||
<rect id="rect18433_2_" x="104.1" y="28.4" fill="#666666" width="1.5" height="3.9"/>
|
|
||||||
<rect id="rect18435_2_" x="100.9" y="28.4" fill="#666666" width="1.1" height="3.9"/>
|
|
||||||
<rect id="rect18437_2_" x="97.4" y="28.4" fill="#666666" width="1.5" height="3.9"/>
|
|
||||||
<rect id="rect18439_2_" x="93.5" y="28.4" fill="#666666" width="2.6" height="3.9"/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
<path fill="#920000" d="M136.4,52.5h18.2c0.6,0,1.1,0.5,1.1,1.1v3.8c0,0.6-0.5,1.1-1.1,1.1h-18.2c-0.6,0-1.1-0.5-1.1-1.1v-3.8
|
|
||||||
C135.3,53,135.8,52.5,136.4,52.5z"/>
|
|
||||||
<text transform="matrix(1 0 0 1 138.337 57.2971)" fill="#FFFFFF" font-family="'CourierNewPS-BoldMT'" font-size="6px">3.3V</text>
|
|
||||||
<path fill="#0000FF" d="M136.4,45.3h18.2c0.6,0,1.1,0.5,1.1,1.1v3.8c0,0.6-0.5,1.1-1.1,1.1h-18.2c-0.6,0-1.1-0.5-1.1-1.1v-3.8
|
|
||||||
C135.3,45.8,135.8,45.3,136.4,45.3z"/>
|
|
||||||
<text transform="matrix(1 0 0 1 140.1373 50.097)" fill="#FFFFFF" font-family="'CourierNewPS-BoldMT'" font-size="6px">SDA</text>
|
|
||||||
<path fill="#FFFF00" d="M136.4,38.1h18.2c0.6,0,1.1,0.5,1.1,1.1V43c0,0.6-0.5,1.1-1.1,1.1h-18.2c-0.6,0-1.1-0.5-1.1-1.1v-3.8
|
|
||||||
C135.3,38.6,135.8,38.1,136.4,38.1z"/>
|
|
||||||
<text transform="matrix(1 0 0 1 140.1373 42.897)" font-family="'CourierNewPS-BoldMT'" font-size="6px">SCL</text>
|
|
||||||
<path d="M136.4,59.7h18.2c0.6,0,1.1,0.5,1.1,1.1v3.8c0,0.6-0.5,1.1-1.1,1.1h-18.2c-0.6,0-1.1-0.5-1.1-1.1v-3.8
|
|
||||||
C135.3,60.2,135.8,59.7,136.4,59.7z"/>
|
|
||||||
<text transform="matrix(1 0 0 1 140.1373 64.497)" fill="#FFFFFF" font-family="'CourierNewPS-BoldMT'" font-size="6px">GND</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<line fill="none" stroke="#0000FF" stroke-width="0.7087" stroke-linecap="round" x1="343.1" y1="46.4" x2="332.5" y2="48.2"/>
|
|
||||||
<line fill="none" stroke="#FFFF00" stroke-width="0.7087" stroke-linecap="round" x1="343" y1="50.7" x2="332.5" y2="55.4"/>
|
|
||||||
<line fill="none" stroke="#000000" stroke-width="0.7087" stroke-linecap="round" x1="332.5" y1="33.9" x2="343.1" y2="38.6"/>
|
|
||||||
<line fill="none" stroke="#FF0000" stroke-width="0.7087" stroke-linecap="round" x1="332.6" y1="41" x2="343.1" y2="42.7"/>
|
|
||||||
<line fill="none" stroke="#FF0000" stroke-width="0.7087" stroke-linecap="round" x1="332.5" y1="41" x2="321.9" y2="41"/>
|
|
||||||
<line fill="none" stroke="#FFFF00" stroke-width="0.7087" stroke-linecap="round" x1="332.5" y1="55.4" x2="321.9" y2="55.4"/>
|
|
||||||
<line fill="none" stroke="#0000FF" stroke-width="0.7087" stroke-linecap="round" x1="332.5" y1="48.2" x2="321.9" y2="48.2"/>
|
|
||||||
<line fill="none" stroke="#000000" stroke-width="0.7087" stroke-linecap="round" x1="332.5" y1="33.9" x2="321.9" y2="33.9"/>
|
|
||||||
<line fill="none" stroke="#FFFF00" stroke-width="0.7087" stroke-linecap="round" x1="353.8" y1="50.7" x2="343.1" y2="50.7"/>
|
|
||||||
<line fill="none" stroke="#0000FF" stroke-width="0.7087" stroke-linecap="round" x1="353.8" y1="46.4" x2="343.1" y2="46.4"/>
|
|
||||||
<line fill="none" stroke="#FF0000" stroke-width="0.7087" stroke-linecap="round" x1="353.8" y1="42.7" x2="343.2" y2="42.7"/>
|
|
||||||
<line fill="none" stroke="#000000" stroke-width="0.7087" stroke-linecap="round" x1="353.8" y1="38.6" x2="343.1" y2="38.6"/>
|
|
||||||
<g>
|
|
||||||
|
|
||||||
<rect id="rect18427_3_" x="355.8" y="37" fill="#333333" stroke="#333333" stroke-width="0.2877" stroke-miterlimit="3.8362" width="12.6" height="15.5"/>
|
|
||||||
<rect id="rect18429_3_" x="352.6" y="34.3" fill="#666666" width="3.3" height="20.8"/>
|
|
||||||
<g>
|
|
||||||
<rect id="rect18431_3_" x="355.6" y="36.7" fill="#666666" width="3.9" height="2.8"/>
|
|
||||||
<rect id="rect18433_3_" x="355.6" y="40.7" fill="#666666" width="3.9" height="1.5"/>
|
|
||||||
<rect id="rect18435_3_" x="355.6" y="44.2" fill="#666666" width="3.9" height="1.1"/>
|
|
||||||
<rect id="rect18437_3_" x="355.6" y="47.4" fill="#666666" width="3.9" height="1.5"/>
|
|
||||||
<rect id="rect18439_3_" x="355.6" y="50.1" fill="#666666" width="3.9" height="2.6"/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
<path fill="#920000" d="M304.1,38.2h18.2c0.6,0,1.1,0.5,1.1,1.1V43c0,0.6-0.5,1.1-1.1,1.1h-18.2c-0.6,0-1.1-0.5-1.1-1.1v-3.8
|
|
||||||
C302.9,38.7,303.4,38.2,304.1,38.2z"/>
|
|
||||||
<text transform="matrix(1 0 0 1 305.9028 42.9297)" fill="#FFFFFF" font-family="'CourierNewPS-BoldMT'" font-size="6px">3.3V</text>
|
|
||||||
<path d="M304.1,31h18.2c0.6,0,1.1,0.5,1.1,1.1v3.8c0,0.6-0.5,1.1-1.1,1.1h-18.2c-0.6,0-1.1-0.5-1.1-1.1v-3.8
|
|
||||||
C302.9,31.5,303.4,31,304.1,31z"/>
|
|
||||||
<text transform="matrix(1 0 0 1 307.7031 35.8027)" fill="#FFFFFF" font-family="'CourierNewPS-BoldMT'" font-size="6px">GND</text>
|
|
||||||
<path fill="#FFFF00" d="M304.2,52.4h18.2c0.6,0,1.1,0.5,1.1,1.1v3.8c0,0.6-0.5,1.1-1.1,1.1h-18.2c-0.6,0-1.1-0.5-1.1-1.1v-3.8
|
|
||||||
C303.1,52.9,303.6,52.4,304.2,52.4z"/>
|
|
||||||
<text transform="matrix(1 0 0 1 307.857 57.1569)" font-family="'CourierNewPS-BoldMT'" font-size="6px">SCL</text>
|
|
||||||
<path fill="#0000FF" d="M304.2,45.3h18.2c0.6,0,1.1,0.5,1.1,1.1v3.8c0,0.6-0.5,1.1-1.1,1.1h-18.2c-0.6,0-1.1-0.5-1.1-1.1v-3.8
|
|
||||||
C303.1,45.8,303.6,45.3,304.2,45.3z"/>
|
|
||||||
<text transform="matrix(1 0 0 1 307.857 50.0569)" fill="#FFFFFF" font-family="'CourierNewPS-BoldMT'" font-size="6px">SDA</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<g>
|
|
||||||
<path fill="none" stroke="#FF0000" stroke-width="0.7087" stroke-linecap="round" stroke-linejoin="round" d="M456.4,39.2v18.9
|
|
||||||
c0,1-0.9,1.9-1.9,1.9h-43.7"/>
|
|
||||||
<path fill="none" stroke="#000000" stroke-width="0.7087" stroke-linecap="round" stroke-linejoin="round" d="M459.7,39.2v26.1
|
|
||||||
c0,1-0.9,1.9-1.9,1.9h-47"/>
|
|
||||||
<path fill="none" stroke="#FFFF00" stroke-width="0.7087" stroke-linecap="round" stroke-linejoin="round" d="M449.7,39.2v4.5
|
|
||||||
c0,1-0.9,1.9-1.9,1.9h-37"/>
|
|
||||||
<path fill="none" stroke="#0000FF" stroke-width="0.7087" stroke-linecap="round" stroke-linejoin="round" d="M453.1,39.2v11.7
|
|
||||||
c0,1-0.9,1.9-1.9,1.9h-40.4"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
|
|
||||||
<rect id="rect18427_00000178914106809447511930000013866159404436575389_" x="447.2" y="23.9" fill="#333333" stroke="#333333" stroke-width="0.2877" stroke-miterlimit="3.8362" width="15.5" height="12.6"/>
|
|
||||||
|
|
||||||
<rect id="rect18429_00000031928373075921312910000014790377498140978847_" x="444.5" y="36.3" fill="#666666" width="20.8" height="3.3"/>
|
|
||||||
<g>
|
|
||||||
|
|
||||||
<rect id="rect18431_00000170993680101322717880000001644850932840291517_" x="460.2" y="32.7" fill="#666666" width="2.8" height="3.9"/>
|
|
||||||
|
|
||||||
<rect id="rect18433_00000103241704361221988900000015591929497546297534_" x="457.5" y="32.7" fill="#666666" width="1.5" height="3.9"/>
|
|
||||||
|
|
||||||
<rect id="rect18435_00000173155515476320139280000004429963318720837812_" x="454.3" y="32.7" fill="#666666" width="1.1" height="3.9"/>
|
|
||||||
|
|
||||||
<rect id="rect18437_00000061454898119703330670000013955461483550485126_" x="450.8" y="32.7" fill="#666666" width="1.5" height="3.9"/>
|
|
||||||
|
|
||||||
<rect id="rect18439_00000055704433746169303960000015895652824250320515_" x="446.9" y="32.7" fill="#666666" width="2.6" height="3.9"/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path fill="#920000" d="M409.6,56.8h18.2c0.6,0,1.1,0.5,1.1,1.1v3.8c0,0.6-0.5,1.1-1.1,1.1h-18.2c-0.6,0-1.1-0.5-1.1-1.1v-3.8
|
|
||||||
C408.5,57.3,409,56.8,409.6,56.8z"/>
|
|
||||||
<text transform="matrix(1 0 0 1 411.4896 61.5797)" fill="#FFFFFF" font-family="'CourierNewPS-BoldMT'" font-size="6px">3.3V</text>
|
|
||||||
<path fill="#0000FF" d="M409.6,49.6h18.2c0.6,0,1.1,0.5,1.1,1.1v3.8c0,0.6-0.5,1.1-1.1,1.1h-18.2c-0.6,0-1.1-0.5-1.1-1.1v-3.8
|
|
||||||
C408.5,50.1,409,49.6,409.6,49.6z"/>
|
|
||||||
<text transform="matrix(1 0 0 1 413.2899 54.3796)" fill="#FFFFFF" font-family="'CourierNewPS-BoldMT'" font-size="6px">SDA</text>
|
|
||||||
<path fill="#FFFF00" d="M409.6,42.4h18.2c0.6,0,1.1,0.5,1.1,1.1v3.8c0,0.6-0.5,1.1-1.1,1.1h-18.2c-0.6,0-1.1-0.5-1.1-1.1v-3.8
|
|
||||||
C408.5,42.9,409,42.4,409.6,42.4z"/>
|
|
||||||
<text transform="matrix(1 0 0 1 413.2899 47.1795)" font-family="'CourierNewPS-BoldMT'" font-size="6px">SCL</text>
|
|
||||||
<path d="M409.6,64h18.2c0.6,0,1.1,0.5,1.1,1.1v3.8c0,0.6-0.5,1.1-1.1,1.1h-18.2c-0.6,0-1.1-0.5-1.1-1.1v-3.8
|
|
||||||
C408.5,64.5,409,64,409.6,64z"/>
|
|
||||||
<text transform="matrix(1 0 0 1 413.2899 68.7795)" fill="#FFFFFF" font-family="'CourierNewPS-BoldMT'" font-size="6px">GND</text>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path fill="#E91E32" d="M529.4,45.5c-0.1,0-0.1,0.1-0.1,0.1v2.3c0,0.1,0.1,0.1,0.1,0.1H555c0.1,0,0.1-0.1,0.1-0.1v-2.3
|
|
||||||
c0-0.1-0.1-0.1-0.1-0.1H529.4z"/>
|
|
||||||
<path fill="none" stroke="#000000" stroke-width="0.2" stroke-linecap="round" stroke-linejoin="round" d="M529.4,45.5
|
|
||||||
c-0.1,0-0.1,0.1-0.1,0.1v2.3c0,0.1,0.1,0.1,0.1,0.1H555c0.1,0,0.1-0.1,0.1-0.1v-2.3c0-0.1-0.1-0.1-0.1-0.1H529.4z"/>
|
|
||||||
<path fill="#231F20" d="M529.4,38.9c-0.1,0-0.1,0.1-0.1,0.1v2.3c0,0.1,0.1,0.1,0.1,0.1H555c0.1,0,0.1-0.1,0.1-0.1V39
|
|
||||||
c0-0.1-0.1-0.1-0.1-0.1H529.4z"/>
|
|
||||||
<path fill="none" stroke="#000000" stroke-width="0.2" stroke-linecap="round" stroke-linejoin="round" d="M529.4,38.9
|
|
||||||
c-0.1,0-0.1,0.1-0.1,0.1v2.3c0,0.1,0.1,0.1,0.1,0.1H555c0.1,0,0.1-0.1,0.1-0.1V39c0-0.1-0.1-0.1-0.1-0.1H529.4z"/>
|
|
||||||
<polygon fill="#F4F4F4" points="529.9,45 529.9,48.6 531.6,49.4 531.6,53.1 528.9,53.1 525.4,51.1 508.6,51.1 508.6,44.2
|
|
||||||
508.6,35.7 525.4,35.7 528.9,33.7 531.6,33.7 531.6,37.5 529.9,38.2 529.9,42 531.6,42.7 531.6,44.2 "/>
|
|
||||||
<polygon fill="none" stroke="#231F20" stroke-width="0.2" points="529.9,45 529.9,48.6 531.6,49.4 531.6,53.1 528.9,53.1
|
|
||||||
525.4,51.1 508.6,51.1 508.6,44.2 508.6,35.7 525.4,35.7 528.9,33.7 531.6,33.7 531.6,37.5 529.9,38.2 529.9,42 531.6,42.7
|
|
||||||
531.6,44.2 "/>
|
|
||||||
<rect x="508.6" y="35.7" fill="#919497" width="16.9" height="15.4"/>
|
|
||||||
|
|
||||||
<rect x="508.6" y="35.7" fill="none" stroke="#231F20" stroke-width="0.2" stroke-linecap="round" stroke-linejoin="round" width="16.9" height="15.4"/>
|
|
||||||
<polygon fill="#F4F4F4" points="513.7,51.1 508.6,51.1 508.6,44.2 513.7,44.2 513.7,45.5 510.6,45.5 510.6,48 513.7,48 "/>
|
|
||||||
<polygon fill="none" stroke="#231F20" stroke-width="0.2" points="513.7,51.1 508.6,51.1 508.6,44.2 513.7,44.2 513.7,45.5
|
|
||||||
510.6,45.5 510.6,48 513.7,48 "/>
|
|
||||||
<rect x="508.6" y="42.7" fill="#E1E1E1" width="14.4" height="1.5"/>
|
|
||||||
<rect x="508.6" y="42.7" fill="none" stroke="#231F20" stroke-width="0.2" width="14.4" height="1.5"/>
|
|
||||||
<rect x="513.7" y="49.4" fill="#E1E1E1" width="9.1" height="1.8"/>
|
|
||||||
<rect x="513.7" y="49.4" fill="none" stroke="#231F20" stroke-width="0.2" width="9.1" height="1.8"/>
|
|
||||||
<rect x="513.7" y="35.7" fill="#E1E1E1" width="9.1" height="1.8"/>
|
|
||||||
<rect x="513.7" y="35.7" fill="none" stroke="#231F20" stroke-width="0.2" width="9.1" height="1.8"/>
|
|
||||||
<line fill="none" stroke="#000000" stroke-width="0.2" x1="516.2" y1="44.7" x2="516.2" y2="48.9"/>
|
|
||||||
<line fill="none" stroke="#000000" stroke-width="0.2" x1="525.4" y1="51.1" x2="525.4" y2="44.8"/>
|
|
||||||
<line fill="none" stroke="#000000" stroke-width="0.2" x1="512.1" y1="48" x2="512.1" y2="45.5"/>
|
|
||||||
<line fill="none" stroke="#000000" stroke-width="0.2" x1="512.1" y1="41.4" x2="512.1" y2="38.9"/>
|
|
||||||
<line fill="none" stroke="#000000" stroke-width="0.2" x1="516.2" y1="37.9" x2="516.2" y2="42.3"/>
|
|
||||||
|
|
||||||
<line fill="none" stroke="#000000" stroke-width="0.2" stroke-linecap="round" stroke-linejoin="round" x1="529.9" y1="38.2" x2="529.9" y2="33.7"/>
|
|
||||||
<line fill="none" stroke="#000000" stroke-width="0.2" x1="525.4" y1="44.8" x2="525.4" y2="35.7"/>
|
|
||||||
<rect x="529.9" y="42.7" fill="#FFFFFF" width="1.7" height="1.5"/>
|
|
||||||
|
|
||||||
<rect x="529.9" y="42.7" fill="none" stroke="#000000" stroke-width="0.2" stroke-linecap="round" stroke-linejoin="round" width="1.7" height="1.5"/>
|
|
||||||
<rect x="525.4" y="42" fill="#FFFFFF" width="4.5" height="2.9"/>
|
|
||||||
<rect x="525.4" y="42" fill="none" stroke="#000000" stroke-width="0.2" width="4.5" height="2.9"/>
|
|
||||||
<rect x="528.9" y="45" fill="#FFFFFF" width="1" height="8.2"/>
|
|
||||||
|
|
||||||
<rect x="528.9" y="45" fill="none" stroke="#000000" stroke-width="0.2" stroke-linecap="round" stroke-linejoin="round" width="1" height="8.2"/>
|
|
||||||
<rect x="528.9" y="33.7" fill="#FFFFFF" width="1" height="8.3"/>
|
|
||||||
|
|
||||||
<rect x="528.9" y="33.7" fill="none" stroke="#000000" stroke-width="0.2" stroke-linecap="round" stroke-linejoin="round" width="1" height="8.3"/>
|
|
||||||
<rect x="510.6" y="38.9" fill="#F1EED9" width="5.2" height="2.5"/>
|
|
||||||
|
|
||||||
<rect x="510.6" y="38.9" fill="none" stroke="#000000" stroke-width="0.2" stroke-linecap="round" stroke-linejoin="round" width="5.2" height="2.5"/>
|
|
||||||
<rect x="515.1" y="38.9" fill="#E6E1CC" width="0.7" height="2.5"/>
|
|
||||||
|
|
||||||
<rect x="515.1" y="38.9" fill="none" stroke="#000000" stroke-width="0.2" stroke-linecap="round" stroke-linejoin="round" width="0.7" height="2.5"/>
|
|
||||||
|
|
||||||
<line fill="none" stroke="#6E7071" stroke-width="0.2" stroke-linecap="round" stroke-linejoin="round" x1="513.7" y1="44.2" x2="513.7" y2="42.7"/>
|
|
||||||
<rect x="510.6" y="45.5" fill="#F1EED9" width="5.2" height="2.5"/>
|
|
||||||
|
|
||||||
<rect x="510.6" y="45.5" fill="none" stroke="#000000" stroke-width="0.2" stroke-linecap="round" stroke-linejoin="round" width="5.2" height="2.5"/>
|
|
||||||
<rect x="515.1" y="45.5" fill="#E6E1CC" width="0.7" height="2.5"/>
|
|
||||||
|
|
||||||
<rect x="515.1" y="45.5" fill="none" stroke="#000000" stroke-width="0.2" stroke-linecap="round" stroke-linejoin="round" width="0.7" height="2.5"/>
|
|
||||||
<path fill="#F4F4F4" d="M522.5,51.1h3V35.7h-3v1.2c0,0.6-0.5,1-1,1h-5.7v4.4h5.7c0.6,0,1,0.5,1,1v0.3c0,0.6-0.5,1-1,1h-5.7v4.3h5.7
|
|
||||||
c0.6,0,1,0.5,1,1V51.1z"/>
|
|
||||||
<path fill="none" stroke="#231F20" stroke-width="0.2" d="M522.5,51.1h3V35.7h-3v1.2c0,0.6-0.5,1-1,1h-5.7v4.4h5.7c0.6,0,1,0.5,1,1
|
|
||||||
v0.3c0,0.6-0.5,1-1,1h-5.7v4.3h5.7c0.6,0,1,0.5,1,1V51.1z"/>
|
|
||||||
<polyline fill="#F4F4F4" points="513.7,35.7 508.6,35.7 508.6,42.7 513.7,42.7 513.7,41.4 510.6,41.4 510.6,38.9 513.7,38.9
|
|
||||||
513.7,35.7 "/>
|
|
||||||
<polyline fill="none" stroke="#231F20" stroke-width="0.2" points="513.7,35.7 508.6,35.7 508.6,42.7 513.7,42.7 513.7,41.4
|
|
||||||
510.6,41.4 510.6,38.9 513.7,38.9 513.7,35.7 "/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path fill="#A3A5A7" d="M617.2,53.4h-17c-0.1,0-0.1,0-0.2,0c-0.9-0.1-1.6-0.8-1.6-1.8c0-0.3,0.1-0.6,0.2-0.9c0,0,0-0.1,0.1-0.1
|
|
||||||
l8.5-13.8l0.1-0.1c0.3-0.4,0.8-0.7,1.4-0.7c0.6,0,1.1,0.3,1.4,0.7c0,0,0,0.1,0.1,0.1l8.5,13.8l0.1,0.1c0.1,0.2,0.2,0.5,0.2,0.8
|
|
||||||
c0,0.9-0.7,1.7-1.6,1.8C617.4,53.4,617.3,53.4,617.2,53.4 M608.7,36.4c-0.5,0-0.9,0.2-1.2,0.6l-0.1,0.1l-8.5,13.8c0,0,0,0,0,0.1
|
|
||||||
c-0.1,0.2-0.2,0.5-0.2,0.7c0,0.8,0.6,1.4,1.3,1.5c0.1,0,0.1,0,0.1,0h17h0.1c0.8-0.1,1.3-0.7,1.3-1.5c0-0.2-0.1-0.5-0.2-0.7
|
|
||||||
c0,0,0-0.1-0.1-0.1L610,37.1c0,0,0,0-0.1-0.1C609.6,36.6,609.2,36.4,608.7,36.4"/>
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#F39337" d="M618.1,51.6c0,0.5-0.4,0.9-0.9,0.9l0,0h-17l0,0l0,0
|
|
||||||
c-0.5,0-0.9-0.4-0.9-0.9c0-0.2,0.1-0.3,0.1-0.5l0,0l8.5-13.8l0,0c0.2-0.2,0.4-0.4,0.7-0.4s0.6,0.2,0.8,0.4l0,0l8.5,13.8l0,0
|
|
||||||
C618.1,51.3,618.1,51.5,618.1,51.6"/>
|
|
||||||
<path fill="#E3E4E4" d="M617.2,52.7H600l0,0c-0.5-0.1-0.9-0.5-0.9-1c0-0.1,0-0.3,0.1-0.4l0,0l0.1-0.1l8.6-13.9l0,0
|
|
||||||
c0.2-0.2,0.5-0.4,0.8-0.4s0.6,0.1,0.8,0.4l0,0l0.1,0.1l8.6,13.9l0,0c0.1,0.1,0.1,0.3,0.1,0.4c0,0.5-0.4,0.9-0.9,1l0,0L617.2,52.7z
|
|
||||||
M600.3,52.4H617l0,0h0.1c0.4,0,0.7-0.3,0.7-0.7c0-0.1,0-0.3-0.1-0.4l-0.1-0.1l0,0l-8.4-13.6l0,0l-0.1-0.1
|
|
||||||
c-0.1-0.2-0.4-0.4-0.6-0.4c-0.2,0-0.5,0.1-0.6,0.3l-0.1,0.1l0,0l-8.4,13.5l0,0l-0.1,0.1c-0.1,0.1-0.1,0.3-0.1,0.4
|
|
||||||
c0,0.4,0.3,0.7,0.7,0.7L600.3,52.4L600.3,52.4L600.3,52.4z"/>
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M609.9,42c0-0.6-0.5-1.2-1.2-1.2c-0.6,0-1.2,0.5-1.2,1.2v4.4
|
|
||||||
c0,0.7,0.5,1.2,1.2,1.2c0.6,0,1.2-0.5,1.2-1.2V42z"/>
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#FFFFFF" d="M608.7,48.4c-0.6,0-1.2,0.5-1.2,1.2c0,0.6,0.5,1.2,1.2,1.2
|
|
||||||
c0.6,0,1.2-0.5,1.2-1.2S609.4,48.4,608.7,48.4"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path fill="none" stroke="#0000FF" stroke-width="0.7087" stroke-linecap="round" stroke-linejoin="round" d="M724.2,36.6v19.8
|
|
||||||
c0,1.4-0.7,2.3-2,2.3h-40.3"/>
|
|
||||||
<path fill="none" stroke="#FF0000" stroke-width="0.7087" stroke-linecap="round" stroke-linejoin="round" d="M720.9,30.6v18.9
|
|
||||||
c0,1-0.9,1.9-1.8,1.9h-41.4"/>
|
|
||||||
<path fill="none" stroke="#FFFF00" stroke-width="0.7087" stroke-linecap="round" stroke-linejoin="round" d="M727.5,31.4v31.3
|
|
||||||
c0,2.8-0.5,3.2-3.2,3.2h-35.7"/>
|
|
||||||
<path fill="none" stroke="#000000" stroke-width="0.7087" stroke-linecap="round" stroke-linejoin="round" d="M717.5,23.7v18.6
|
|
||||||
c0,1-0.9,1.9-1.9,1.9h-37.9"/>
|
|
||||||
<path fill="#0000FF" d="M677.4,55.5h18.2c0.6,0,1.1,0.5,1.1,1.1v3.8c0,0.6-0.5,1.1-1.1,1.1h-18.2c-0.6,0-1.1-0.5-1.1-1.1v-3.8
|
|
||||||
C676.3,56,676.8,55.5,677.4,55.5z"/>
|
|
||||||
<path d="M677.4,41h18.2c0.6,0,1.1,0.5,1.1,1.1v3.8c0,0.6-0.5,1.1-1.1,1.1h-18.2c-0.6,0-1.1-0.5-1.1-1.1v-3.8
|
|
||||||
C676.3,41.5,676.8,41,677.4,41z"/>
|
|
||||||
<text transform="matrix(1 0 0 1 681.131 45.8295)" fill="#FFFFFF" font-family="'CourierNewPS-BoldMT'" font-size="6px">GND</text>
|
|
||||||
<path fill="#FFFF00" d="M677.4,62.7h18.2c0.6,0,1.1,0.5,1.1,1.1v3.8c0,0.6-0.5,1.1-1.1,1.1h-18.2c-0.6,0-1.1-0.5-1.1-1.1v-3.8
|
|
||||||
C676.3,63.2,676.8,62.7,677.4,62.7z"/>
|
|
||||||
<g>
|
|
||||||
|
|
||||||
<rect id="rect18427_00000060028905247321236260000016538577171732800398_" x="715" y="22.5" fill="#333333" stroke="#333333" stroke-width="0.2877" stroke-miterlimit="3.8362" width="15.5" height="12.6"/>
|
|
||||||
|
|
||||||
<rect id="rect18429_00000136380620032927873150000008133730919514636695_" x="712.3" y="35" fill="#666666" width="20.8" height="3.3"/>
|
|
||||||
<g>
|
|
||||||
|
|
||||||
<rect id="rect18431_00000067232381136894892490000013012950741728482693_" x="728" y="31.4" fill="#666666" width="2.8" height="3.9"/>
|
|
||||||
|
|
||||||
<rect id="rect18433_00000039092270229879896300000000163092724316894638_" x="725.3" y="31.4" fill="#666666" width="1.5" height="3.9"/>
|
|
||||||
|
|
||||||
<rect id="rect18435_00000018217946427967510590000005138267382436280508_" x="722.1" y="31.4" fill="#666666" width="1.1" height="3.9"/>
|
|
||||||
|
|
||||||
<rect id="rect18437_00000053525560374292404480000001696303565037957564_" x="718.6" y="31.4" fill="#666666" width="1.5" height="3.9"/>
|
|
||||||
|
|
||||||
<rect id="rect18439_00000061453906011602837510000005837779149130639238_" x="714.7" y="31.4" fill="#666666" width="2.6" height="3.9"/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
<path fill="#920000" d="M677.4,48.2h18.2c0.6,0,1.1,0.5,1.1,1.1v3.8c0,0.6-0.5,1.1-1.1,1.1h-18.2c-0.6,0-1.1-0.5-1.1-1.1v-3.8
|
|
||||||
C676.3,48.8,676.8,48.2,677.4,48.2z"/>
|
|
||||||
<text transform="matrix(1 0 0 1 679.3307 53.0297)" fill="#FFFFFF" font-family="'CourierNewPS-BoldMT'" font-size="6px">3.3V</text>
|
|
||||||
<path fill="#0000FF" d="M677.4,55.5h18.2c0.6,0,1.1,0.5,1.1,1.1v3.8c0,0.6-0.5,1.1-1.1,1.1h-18.2c-0.6,0-1.1-0.5-1.1-1.1v-3.8
|
|
||||||
C676.3,56,676.8,55.5,677.4,55.5z"/>
|
|
||||||
<text transform="matrix(1 0 0 1 681.131 60.2296)" fill="#FFFFFF" font-family="'CourierNewPS-BoldMT'" font-size="6px">SDA</text>
|
|
||||||
<path fill="#FFFF00" d="M677.4,62.7h18.2c0.6,0,1.1,0.5,1.1,1.1v3.8c0,0.6-0.5,1.1-1.1,1.1h-18.2c-0.6,0-1.1-0.5-1.1-1.1v-3.8
|
|
||||||
C676.3,63.2,676.8,62.7,677.4,62.7z"/>
|
|
||||||
<text transform="matrix(1 0 0 1 681.131 67.4295)" font-family="'CourierNewPS-BoldMT'" font-size="6px">SCL</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path fill="#A3A5A7" d="M617.2,83.2h-17c-0.1,0-0.1,0-0.2,0c-1-0.1-1.7-0.9-1.6-1.9c0-0.2,0.1-0.5,0.2-0.7c0,0,0-0.1,0.1-0.1
|
|
||||||
l8.5-13.8l0.1-0.1c0.6-0.8,1.7-0.9,2.5-0.3c0.1,0.1,0.3,0.2,0.4,0.4c0,0,0,0.1,0.1,0.1l8.5,13.8l0.1,0.1c0.4,0.9,0.1,1.9-0.8,2.4
|
|
||||||
c-0.2,0.1-0.4,0.2-0.6,0.2C617.3,83.2,617.3,83.2,617.2,83.2 M608.7,66.1c-0.5,0-0.9,0.2-1.2,0.6l-0.1,0.1l-8.5,13.8c0,0,0,0,0,0.1
|
|
||||||
c-0.1,0.2-0.2,0.5-0.2,0.7c0,0.8,0.6,1.4,1.3,1.5h0.1h17h0.1c0.8-0.1,1.3-0.7,1.3-1.5c0-0.2-0.1-0.5-0.2-0.7c0,0,0-0.1-0.1-0.1
|
|
||||||
L610,66.8c0,0,0,0-0.1-0.1C609.6,66.4,609.2,66.1,608.7,66.1"/>
|
|
||||||
<path fill-rule="evenodd" clip-rule="evenodd" fill="#1536FF" d="M618.1,81.4c0,0.5-0.4,0.9-0.9,0.9l0,0h-17l0,0l0,0
|
|
||||||
c-0.5,0-0.9-0.4-0.9-0.9c0-0.2,0-0.3,0.1-0.5l0,0l8.5-13.8l0,0c0.3-0.4,0.8-0.5,1.2-0.3c0.1,0.1,0.2,0.2,0.3,0.3l0,0L618,81l0,0
|
|
||||||
C618.1,81.1,618.1,81.3,618.1,81.4"/>
|
|
||||||
<path fill="#E3E4E4" d="M617.2,82.4H600l0,0c-0.5-0.1-0.9-0.5-0.9-1c0-0.1,0-0.3,0.1-0.4l0,0l0.1-0.1l8.6-13.9l0,0
|
|
||||||
c0.4-0.4,1-0.5,1.4-0.1l0.1,0.1l0,0l0.1,0.1l8.6,13.9l0,0c0.2,0.5,0,1.1-0.5,1.3c-0.1,0-0.2,0.1-0.3,0.1l0,0H617.2z M600.3,82.2
|
|
||||||
H617l0,0h0.1c0.4,0,0.7-0.3,0.7-0.7c0-0.1,0-0.3-0.1-0.4l-0.1-0.1l0,0l-8.4-13.6l0,0l-0.1-0.1c-0.2-0.3-0.7-0.5-1-0.3
|
|
||||||
c-0.1,0.1-0.2,0.1-0.2,0.2l-0.1,0.1l0,0l-8.4,13.6l0,0l-0.1,0.1c-0.2,0.3-0.1,0.8,0.2,1c0.1,0.1,0.3,0.1,0.4,0.1L600.3,82.2
|
|
||||||
L600.3,82.2L600.3,82.2z"/>
|
|
||||||
<text transform="matrix(1 0 0 1 604.9225 80.8256)" fill="#FFFFFF" font-family="'ArialRoundedMTBold'" font-size="13px">?</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<path fill="none" stroke="#FF0000" stroke-width="0.7087" stroke-linecap="round" stroke-linejoin="round" d="M780.7648,49.9665
|
|
||||||
v-18.9c0-1,0.9-1.9,1.9-1.9h43.7"/>
|
|
||||||
<path fill="none" stroke="#000000" stroke-width="0.7087" stroke-linecap="round" stroke-linejoin="round" d="M777.4648,49.9665
|
|
||||||
v-26.1c0-1,0.7156-1.9,1.5107-1.9h37.3708"/>
|
|
||||||
<path fill="none" stroke="#FFFF00" stroke-width="0.7087" stroke-linecap="round" stroke-linejoin="round" d="M787.4648,49.9665
|
|
||||||
v-4.5c0-1,0.7454-1.9,1.5736-1.9h30.6431"/>
|
|
||||||
<path fill="none" stroke="#0000FF" stroke-width="0.7087" stroke-linecap="round" stroke-linejoin="round" d="M784.0648,49.9665
|
|
||||||
v-11.7c0-1,0.7706-1.9,1.6269-1.9h34.5937"/>
|
|
||||||
<g>
|
|
||||||
|
|
||||||
<rect id="rect18427_00000116943696674707758360000017825434837459895480_" x="774.6648" y="52.4665" fill="#333333" stroke="#333333" stroke-width="0.2877" stroke-miterlimit="3.8362" width="15.5" height="12.6"/>
|
|
||||||
|
|
||||||
<rect id="rect18429_00000137090772507022974370000005226029994886005931_" x="771.9648" y="49.3665" fill="#666666" width="20.8" height="3.3"/>
|
|
||||||
<g>
|
|
||||||
|
|
||||||
<rect id="rect18431_00000065787331369743706590000015133379946716299431_" x="787.6648" y="52.3665" fill="#666666" width="2.8" height="3.9"/>
|
|
||||||
|
|
||||||
<rect id="rect18433_00000003825769621864205960000008149423384283175824_" x="784.9648" y="52.3665" fill="#666666" width="1.5" height="3.9"/>
|
|
||||||
|
|
||||||
<rect id="rect18435_00000155829848388907457810000001883953621611135370_" x="781.7648" y="52.3665" fill="#666666" width="1.1" height="3.9"/>
|
|
||||||
|
|
||||||
<rect id="rect18437_00000166674337339107047640000008104075451349266357_" x="778.2648" y="52.3665" fill="#666666" width="1.5" height="3.9"/>
|
|
||||||
|
|
||||||
<rect id="rect18439_00000121968638656140496540000015156553289452774056_" x="774.3648" y="52.3665" fill="#666666" width="2.6" height="3.9"/>
|
|
||||||
</g>
|
|
||||||
</g>
|
|
||||||
<path fill="#FFFF00" stroke="#737373" stroke-width="0.3543" d="M801.7148,40.7107h18.1984c0.5284,0,0.9567,0.4283,0.9567,0.9567
|
|
||||||
v3.7984c0,0.5284-0.4283,0.9567-0.9567,0.9567h-18.1984c-0.5284,0-0.9567-0.4283-0.9567-0.9567v-3.7984
|
|
||||||
C800.7582,41.139,801.1865,40.7107,801.7148,40.7107z"/>
|
|
||||||
<text transform="matrix(1 0 0 1 805.4132 45.3166)" font-family="'CourierNewPS-BoldMT'" font-size="6px">SCL</text>
|
|
||||||
<path fill="#0000FF" stroke="#737373" stroke-width="0.3543" d="M801.7148,33.5107h18.1984c0.5284,0,0.9567,0.4283,0.9567,0.9567
|
|
||||||
v3.7984c0,0.5284-0.4283,0.9567-0.9567,0.9567h-18.1984c-0.5284,0-0.9567-0.4283-0.9567-0.9567v-3.7984
|
|
||||||
C800.7582,33.939,801.1865,33.5107,801.7148,33.5107z"/>
|
|
||||||
<text transform="matrix(1 0 0 1 805.4132 38.1166)" fill="#FFFFFF" font-family="'CourierNewPS-BoldMT'" font-size="6px">SDA</text>
|
|
||||||
<g>
|
|
||||||
<path fill="#920000" stroke="#737373" stroke-width="0.3543" d="M801.7148,26.3106h25.3984c0.5283,0,0.9567,0.4283,0.9567,0.9567
|
|
||||||
v3.7984c0,0.5284-0.4283,0.9567-0.9567,0.9567h-25.3984c-0.5284,0-0.9567-0.4283-0.9567-0.9567v-3.7984
|
|
||||||
C800.7582,26.7389,801.1865,26.3106,801.7148,26.3106z"/>
|
|
||||||
<text transform="matrix(1 0 0 1 801.812 30.9165)" fill="#FFFFFF" font-family="'CourierNewPS-BoldMT'" font-size="6px">VSENSOR</text>
|
|
||||||
</g>
|
|
||||||
<path d="M801.7148,18.9335h18.1983c0.6262,0,1.1339,0.5077,1.1339,1.1339v3.7983c0,0.6262-0.5077,1.1339-1.1339,1.1339h-18.1983
|
|
||||||
c-0.6262,0-1.1339-0.5077-1.1339-1.1339v-3.7983C800.5809,19.4412,801.0886,18.9335,801.7148,18.9335z"/>
|
|
||||||
<text transform="matrix(1 0 0 1 805.4132 23.7166)" fill="#FFFFFF" font-family="'CourierNewPS-BoldMT'" font-size="6px">GND</text>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<polygon fill="#DCDCDC" points="183.2591,44.422 184.4936,44.422 184.4936,45.839 185.6044,45.839 185.6044,55.761
|
|
||||||
184.4936,55.761 184.4936,57.178 183.2591,57.178 183.2591,55.761 180.5417,55.761 180.5417,57.178 179.3073,57.178
|
|
||||||
179.3073,55.761 178.1955,55.761 178.1955,45.839 179.3073,45.839 179.3073,44.422 180.5417,44.422 180.5417,45.839
|
|
||||||
183.2591,45.839 "/>
|
|
||||||
<ellipse fill="#1E1E1E" cx="181.997" cy="50.8615" rx="3.2202" ry="4.3886"/>
|
|
||||||
<rect x="178.1955" y="55.7674" fill="#B4B4B4" width="7.4089" height="0.397"/>
|
|
||||||
<rect x="178.1955" y="45.5624" fill="#B4B4B4" width="7.4089" height="0.397"/>
|
|
||||||
</g>
|
|
||||||
<g>
|
|
||||||
<rect x="175.619" y="17.4079" fill="#DCDCDC" width="12.756" height="1.3462"/>
|
|
||||||
<rect x="176.8311" y="10.9257" fill="#DCDCDC" width="10.1269" height="8.0787"/>
|
|
||||||
<rect x="175.619" y="11.2114" fill="#DCDCDC" width="12.756" height="1.3462"/>
|
|
||||||
<ellipse fill="#1E1E1E" cx="181.9354" cy="15.0707" rx="4.3886" ry="3.5113"/>
|
|
||||||
<rect x="176.6326" y="10.9257" fill="#B4B4B4" width="0.397" height="8.0787"/>
|
|
||||||
<rect x="186.8376" y="10.9257" fill="#B4B4B4" width="0.397" height="8.0787"/>
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 31 KiB |
|
|
@ -1,51 +0,0 @@
|
||||||
GPIO,SPI,UART,I2C,PWM,ADC,Other
|
|
||||||
GPIO0,RX0,TX0,SDA0,PWM0A,,
|
|
||||||
GPIO1,CSn0,RX0,SCL0,PWM0B,,
|
|
||||||
GPIO2,SCK0,CTS0,SDA1,PWM1A,,
|
|
||||||
GPIO3,TX0,RTS0,SCL1,PWM1B,,
|
|
||||||
GPIO4,RX0,TX1,SDA0,PWM2A,,
|
|
||||||
GPIO5,CSn0,RX1,SCL0,PWM2B,,
|
|
||||||
GPIO6,SCK0,CTS1,SDA1,PWM3A,,
|
|
||||||
GPIO7,TX0,RTS1,SCL1,PWM3B,,
|
|
||||||
GPIO8,RX1,TX1,SDA0,PWM4A,,
|
|
||||||
GPIO9,CSn1,RX1,SCL0,PWM4B,,
|
|
||||||
GPIO10,SCK1,CTS1,SDA1,PWM5A,,
|
|
||||||
GPIO11,TX1,RTS1,SCL1,PWM5B,,
|
|
||||||
GPIO12,RX1,TX0,SDA0,PWM6A,,HSTX
|
|
||||||
GPIO13,CSn1,RX0,SCL0,PWM6B,,HSTX
|
|
||||||
GPIO14,SCK1,CTS0,SDA1,PWM7A,,HSTX
|
|
||||||
GPIO15,TX1,RTS0,SCL1,PWM7B,,HSTX
|
|
||||||
GPIO16,RX0,TX0,SDA0,PWM0A,,HSTX
|
|
||||||
GPIO17,CSn0,RX0,SCL0,PWM0B,,HSTX
|
|
||||||
GPIO18,SCK0,CTS0,SDA1,PWM1A,,HSTX
|
|
||||||
GPIO19,TX0,RTS0,SCL1,PWM1B,,HSTX
|
|
||||||
GPIO20,RX0,TX1,SDA0,PWM2A,,
|
|
||||||
GPIO21,CSn0,RX1,SCL0,PWM2B,,
|
|
||||||
GPIO22,SCK0,CTS1,SDA1,PWM3A,,
|
|
||||||
GPIO23,TX0,RTS1,SCL1,PWM3B,,
|
|
||||||
GPIO24,RX1,TX1,SDA0,PWM4A,,
|
|
||||||
GPIO25,CSn1,RX1,SCL0,PWM4B,,
|
|
||||||
GPIO26,SCK1,CTS1,SDA1,PWM5A,,
|
|
||||||
GPIO27,TX1,RTS1,SCL1,PWM5B,,
|
|
||||||
GPIO28,RX1,TX0,SDA0,PWM6A,,
|
|
||||||
GPIO29,CSn1,RX0,SCL0,PWM6B,,
|
|
||||||
GPIO30,SCK1,CTS0,SDA1,PWM7A,,
|
|
||||||
GPIO31,TX1,RTS0,SCL1,PWM7B,,
|
|
||||||
GPIO32,RX0,TX0,SDA0,PWM8A,,
|
|
||||||
GPIO33,CSn0,RX0,SCL0,PWM8B,,
|
|
||||||
GPIO34,SCK0,CTS0,SDA1,PWM9A,,
|
|
||||||
GPIO35,TX0,RTS0,SCL1,PWM9B,,
|
|
||||||
GPIO36,RX0,TX1,SDA0,PWM10A,,
|
|
||||||
GPIO37,CSn0,RX1,SCL0,PWM10B,,
|
|
||||||
GPIO38,SCK0,CTS1,SDA1,PWM11A,,
|
|
||||||
GPIO39,TX0,RTS1,SCL1,PWM11B,,
|
|
||||||
GPIO40,RX1,TX1,SDA0,PWM8A,ADC0,
|
|
||||||
GPIO41,CSn1,RX1,SCL0,PWM8B,ADC1,
|
|
||||||
GPIO42,SCK1,CTS1,SDA1,PWM9A,ADC2,
|
|
||||||
GPIO43,TX1,RTS1,SCL1,PWM9B,ADC3,
|
|
||||||
GPIO44,RX1,TX0,SDA0,PWM10A,ADC4,
|
|
||||||
GPIO45,CSn1,RX0,SCL0,PWM10B,ADC5,
|
|
||||||
GPIO46,SCK1,CTS0,SDA1,PWM11A,ADC6,
|
|
||||||
GPIO47,TX1,RTS0,SCL1,PWM11B,ADC7,
|
|
||||||
,,,,,,
|
|
||||||
DESCRIPTION,The Raspberry Pi RP2350 is a dual ARM M33 core with 150 MHz clock rate and built in USB. Flash memory is provided by external QSPI chip.,,,,,
|
|
||||||
|
|
|
@ -1,33 +0,0 @@
|
||||||
GPIO,SPI,UART,I2C,PWM,ADC,Other
|
|
||||||
GPIO0,RX0,TX0,SDA0,PWM0A,,
|
|
||||||
GPIO1,CSn0,RX0,SCL0,PWM0B,,
|
|
||||||
GPIO2,SCK0,CTS0,SDA1,PWM1A,,
|
|
||||||
GPIO3,TX0,RTS0,SCL1,PWM1B,,
|
|
||||||
GPIO4,RX0,TX1,SDA0,PWM2A,,
|
|
||||||
GPIO5,CSn0,RX1,SCL0,PWM2B,,
|
|
||||||
GPIO6,SCK0,CTS1,SDA1,PWM3A,,
|
|
||||||
GPIO7,TX0,RTS1,SCL1,PWM3B,,
|
|
||||||
GPIO8,RX1,TX1,SDA0,PWM4A,,
|
|
||||||
GPIO9,CSn1,RX1,SCL0,PWM4B,,
|
|
||||||
GPIO10,SCK1,CTS1,SDA1,PWM5A,,
|
|
||||||
GPIO11,TX1,RTS1,SCL1,PWM5B,,
|
|
||||||
GPIO12,RX1,TX0,SDA0,PWM6A,,HSTX
|
|
||||||
GPIO13,CSn1,RX0,SCL0,PWM6B,,HSTX
|
|
||||||
GPIO14,SCK1,CTS0,SDA1,PWM7A,,HSTX
|
|
||||||
GPIO15,TX1,RTS0,SCL1,PWM7B,,HSTX
|
|
||||||
GPIO16,RX0,TX0,SDA0,PWM0A,,HSTX
|
|
||||||
GPIO17,CSn0,RX0,SCL0,PWM0B,,HSTX
|
|
||||||
GPIO18,SCK0,CTS0,SDA1,PWM1A,,HSTX
|
|
||||||
GPIO19,TX0,RTS0,SCL1,PWM1B,,HSTX
|
|
||||||
GPIO20,RX0,TX1,SDA0,PWM2A,,
|
|
||||||
GPIO21,CSn0,RX1,SCL0,PWM2B,,
|
|
||||||
GPIO22,SCK0,CTS1,SDA1,PWM3A,,
|
|
||||||
GPIO23,TX0,RTS1,SCL1,PWM3B,,
|
|
||||||
GPIO24,RX1,TX1,SDA0,PWM4A,,
|
|
||||||
GPIO25,CSn1,RX1,SCL0,PWM4B,,
|
|
||||||
GPIO26,SCK1,CTS1,SDA1,PWM5A,ADC0,
|
|
||||||
GPIO27,TX1,RTS1,SCL1,PWM5B,ADC1,
|
|
||||||
GPIO28,RX1,TX0,SDA0,PWM6A,ADC2,
|
|
||||||
GPIO29,CSn1,RX0,SCL0,PWM6B,ADC3,
|
|
||||||
,,,,,,
|
|
||||||
DESCRIPTION,The Raspberry Pi RP2350 is a dual ARM M33 core with 150 MHz clock rate and built in USB. Flash memory is provided by external QSPI chip.,,,,,
|
|
||||||
|
|
|
@ -1,88 +0,0 @@
|
||||||
GPIO,INT,DAC/AREF,ADC,Touch,SERCOM,SERCOM Alt,Timer,Timer Alt,Special
|
|
||||||
PA00,0,,,,,S1.0,TCC2[0],,
|
|
||||||
PA01,1,,,,,S1.1,TCC2[1],,
|
|
||||||
PA02,2,VOUT,AIN0,Y0,,,,,
|
|
||||||
PA03,3,VREFA,AIN1,Y1,,,,,
|
|
||||||
PA04,4,VREFB,AIN4,Y2,,S0.0,TCC0[0],,
|
|
||||||
PA05,5,,AIN5,Y3,,S0.1,TCC0[1],,
|
|
||||||
PA06,6,,AIN6,Y4,,S0.2,TCC1[0],,
|
|
||||||
PA07,7,,AIN7,Y5,,S0.3,TCC1[1],,I2S/SD0
|
|
||||||
PA08,NMI,,AIN16,,S0.0,S2.0,TCC0[0],TCC1[2],I2S/SD1
|
|
||||||
PA09,9,,AIN17,,S0.1,S2.0,TCC0[1],TCC1[3],I2S/MCK0
|
|
||||||
PA10,10,,AIN18,,S0.2,S2.2,TCC1[0],TCC0[2],I2S/SCK0
|
|
||||||
PA11,11,,AIN19,,S0.3,S2.3,TCC1[1],TCC0[3],I2S/FS0
|
|
||||||
PA12,12,,,,S2.0,S4.0,TCC2[0],TCC0[6],
|
|
||||||
PA13,13,,,,S2.1,S4.1,TCC2[1],TCC0[7],
|
|
||||||
PA14,14,,,,S2.2,S4.2,TC3[0],TCC0[4],
|
|
||||||
PA15,15,,,,S2.3,S4.3,TC3[1],TCC0[5],
|
|
||||||
PA16,0,,,,S1.0,S3.0,TCC2[0],TCC0[6],
|
|
||||||
PA17,1,,,,S1.1,S3.1,TCC2[1],TCC0[7],
|
|
||||||
PA18,2,,,,S1.2,S3.2,TC3[0],TCC0[2],
|
|
||||||
PA19,3,,,,S1.3,S3.3,TC3[1],TCC0[3],I2S/SD0
|
|
||||||
PA20,4,,,,S5.2,S3.2,TC7[0],TCC0[6],I2S/SCK0
|
|
||||||
PA21,5,,,,S5.3,S3.3,TC7[1],TCC0[7],I2S/FS0
|
|
||||||
PA22,6,,,,S3.0,S5.0,TC4[0],TCC0[4],
|
|
||||||
PA23,7,,,,S3.1,S5.1,TC4[1],TCC0[5],
|
|
||||||
PA24,12,,,,S3.2,S5.2,TC5[0],TCC1[2],USB D-
|
|
||||||
PA25,13,,,,S3.3,S5.3,TC5[1],TCC1[3],USB D+
|
|
||||||
PA27,15,,,,,,,,
|
|
||||||
PA28,8,,,,,,,,
|
|
||||||
PA30,10,,,,,S1.2,TCC1[0],,SWCLK
|
|
||||||
PA31,11,,,,,S1.3,TCC1[1],,SWDIO
|
|
||||||
PB00,0,,AIN8,Y6,,S5.2,TC7[0],,
|
|
||||||
PB01,1,,AIN9,Y7,,S5.3,TC7[1],,
|
|
||||||
PB02,2,,AIN10,Y8,,S5.0,TC6[0],,
|
|
||||||
PB03,3,,AIN11,Y9,,S5.1,TC6[1],,
|
|
||||||
PB04,4,,AIN12,Y10,,,,,
|
|
||||||
PB05,5,,AIN13,Y11,,,,,
|
|
||||||
PB06,6,,AIN14,Y12,,,,,
|
|
||||||
PB07,7,,AIN15,Y13,,,,,
|
|
||||||
PB08,8,,AIN2,Y14,,S4.0,TC4[0],,
|
|
||||||
PB09,9,,AIN3,Y15,,S4.1,TC4[1],,
|
|
||||||
PB10,10,,,,,S4.2,TC5[0],TCC0[4],I2S/MCK1
|
|
||||||
PB11,11,,,,,S4.3,TC5[1],TCC0[5],I2S/SCK1
|
|
||||||
PB12,12,,,,S4.0,,TC4[0],TCC0[6],I2S/FS1
|
|
||||||
PB13,13,,,,S4.1,,TC4[1],TCC0[7],
|
|
||||||
PB14,14,,,,S4.2,,TC5[0],,
|
|
||||||
PB15,15,,,,S4.3,,TC5[1],,
|
|
||||||
PB16,0,,,,S5.0,,TC6[0],TCC0[4],I2S/SD1
|
|
||||||
PB17,1,,,,S5.1,,TC6[1],TCC0[5],I2S/MCK0
|
|
||||||
PB22,6,,,,,S5.2,TC7[0],,
|
|
||||||
PB23,7,,,,,S5.3,TC7[1],,
|
|
||||||
PB30,14,,,,,S5.0,TCC0[0],TCC1[2],
|
|
||||||
PB31,15,,,,,S5.1,TCC0[1],TCC1[3],
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
,,,,,,,,,
|
|
||||||
DESCRIPTION,"The Microchip (nee Atmel) SAMD21 is an ARM Cortex-M0+ running at 48 MHz with 32kB on-chip SRAM, 256KB Flash memory and built in USB. All GPIO is 3.3V in/out max unless otherwise stated. SERCOMs can be used as UART (TX on SERCOM pad 0 or 2, RX on any pad), I2C (SDA on pad 0, SCL on pad 1), or SPI (SCK on pad 1 or 3, MOSI on pad 0 or 3 (SCK on pad 1) or pad 0 or 2 (SCK on pad 3), MISO on any pad remaining) ",,,,,,,,
|
|
||||||
|
122
samd51pins.csv
122
samd51pins.csv
|
|
@ -1,122 +0,0 @@
|
||||||
GPIO,INT,DAC/AREF,ADC,SERCOM,SERCOM Alt,Timer,Timer Alt,Timer Alt2,QSPI/CAN,Special,I2S,PCC
|
|
||||||
PA00,0,,,,S1.0,TC2[0],,,,,,
|
|
||||||
PA01,1,,,,S1.1,TC2[1],,,,,,
|
|
||||||
PA02,2,VOUT0,A0[0],,,,,,,,,
|
|
||||||
PA03,3,VREFA,A0[1],,,,,,,,,
|
|
||||||
PA04,4,VREFB,A0[4],,S0.0,TC0[0],,,,,,
|
|
||||||
PA05,5,VOUT1,A0[5],,S0.1,TC0[1],,,,,,
|
|
||||||
PA06,6,VREFC,A0[6],,S0.2,TC1[0],,,,SDCD,,
|
|
||||||
PA07,7,,A0[7],,S0.3,TC1[1],,,,SDWP,,
|
|
||||||
PA08,NMI,,A0[8]/A1[2],S0.0,S2.1,TC0[0],TCC0[0],TCC1[4],DATA0,SDCMD,MCK0,
|
|
||||||
PA09,9,,A0[0]/A1[3],S0.1,S2.0,TC0[1],TCC0[1],TCC1[5],DATA1,SDDAT0,FS0,
|
|
||||||
PA10,10,,A0[10],S0.2,S2.2,TC1[0],TCC0[2],TCC1[6],DATA2,SDDAT1,SCK0,
|
|
||||||
PA11,11,,A0[11],S0.3,S2.3,TC1[1],TCC0[3],TCC1[7],DATA3,SDDAT2,SDO,
|
|
||||||
PA12,12,,,S2.0,S4.1,TC2[0],TCC0[6],TCC1[2],,SDCD,,DEN1
|
|
||||||
PA13,13,,,S2.1,S4.0,TC2[1],TCC0[7],TCC1[3],,SDWP,,DEN2
|
|
||||||
PA14,14,,,S2.2,S4.2,TC3[0],TCC2[0],TCC1[2],,,,CLK
|
|
||||||
PA15,15,,,S2.3,S4.3,TC3[1],TCC2[1],TCC1[3],,,,
|
|
||||||
PA16,0,,,S1.0,S3.1,TC2[0],TCC1[0],TCC0[4],,,,DATA0
|
|
||||||
PA17,1,,,S1.1,S3.0,TC2[1],TCC1[1],TCC0[5],,,,DATA1
|
|
||||||
PA18,2,,,S1.2,S3.2,TC3[0],TCC1[2],TCC0[6],,,,DATA2
|
|
||||||
PA19,3,,,S1.3,S3.3,TC3[1],TCC1[3],TCC0[7],,,,DATA3
|
|
||||||
PA20,4,,,S5.2,S3.2,TC7[0],TCC1[4],TCC0[0],,SDCMD,FS0,DATA4
|
|
||||||
PA21,5,,,S5.3,S3.3,TC7[1],TCC1[5],TCC0[1],,SDCK,SDO,DATA5
|
|
||||||
PA22,6,,,S3.0,S5.1,TC4[0],TCC1[6],TCC0[2],CAN0TX,,SDI,DATA6
|
|
||||||
PA23,7,,,S3.1,S5.0,TC4[1],TCC1[7],TCC0[3],CAN0RX,SOF 1KHZ,FS1,DATA7
|
|
||||||
PA24,8,,,S3.2,S5.2,TC5[0],TCC2[2],,CAN0TX,USB D-,,
|
|
||||||
PA25,9,,,S3.3,S5.1,TC5[1],,,CAN0RX,USB D+,,
|
|
||||||
PA27,11,,,,,,,,,,,
|
|
||||||
PA30,14,,,S7.2,S1.2,TC6[0],TCC2[0],,,SWCLK,,
|
|
||||||
PA31,15,,,S7.3,S1.3,TC6[1],TCC2[1],,,SWDIO,,
|
|
||||||
PB00,0,,A0[12],,S5.2,TC7[0],,,,,,
|
|
||||||
PB01,1,,A0[13],,S5.3,TC7[1],,,,,,
|
|
||||||
PB02,2,,A0[14],,S5.0,TC6[0],TCC2[2],,,,,
|
|
||||||
PB03,3,,A0[15],,S5.1,TC6[1],,,,,,
|
|
||||||
PB04,4,,A1[6],,,,,,,,,
|
|
||||||
PB05,5,,A1[7],,,,,,,,,
|
|
||||||
PB06,6,,A1[8],,,,,,,,,
|
|
||||||
PB07,7,,A1[9],,,,,,,,,
|
|
||||||
PB08,8,,A0[2]/A1[0],,S4.0,TC4[0],,,,,,
|
|
||||||
PB09,9,,A0[3]/A1[1],,S4.1,TC4[1],,,,,,
|
|
||||||
PB10,10,,,,S4.2,TC5[0],TCC0[4],TCC1[0],SCK,SDDAT3,SDI,
|
|
||||||
PB11,11,,,,S4.3,TC5[1],TCC0[5],TCC1[1],CS,SDCK,FS1,
|
|
||||||
PB12,12,,,S4.0,,TC4[0],TCC3[0],TCC0[0],CAN1TX,SDCD,SCK1,
|
|
||||||
PB13,13,,,S4.1,,TC4[1],TCC3[1],TCC0[1],CAN1RX,SDWP,MCK1,
|
|
||||||
PB14,14,,,S4.2,,TC5[0],TCC4[0],TCC0[2],CAN1TX,,,DATA8
|
|
||||||
PB15,15,,,S4.3,,TC5[1],TCC4[1],TCC0[3],CAN1RX,,,DATA9
|
|
||||||
PB16,0,,,S5.0,,TC6[0],TCC3[0],TCC0[4],,SDCD,SCK0,
|
|
||||||
PB17,1,,,S5.1,,TC6[1],TCC3[1],TCC0[5],,SDWP,MCK0,
|
|
||||||
PB18,2,,,S5.2,S7.2,,TCC1[0],,,SDDAT0,,
|
|
||||||
PB19,3,,,S5.3,S7.3,,TCC1[1],,,SDDAT1,,
|
|
||||||
PB20,4,,,S3.0,S7.1,,TCC1[2],,,SDDAT2,,
|
|
||||||
PB21,5,,,S3.1,S7.0,,TCC1[3],,,SDDAT3,,
|
|
||||||
PB22,6,,,S1.2,S5.2,TC7[0],,,,SOF 1KHZ,,
|
|
||||||
PB23,7,,,S1.2,S5.3,TC7[1],,,,,,
|
|
||||||
PB24,8,,,S0.0,S2.1,,,,,,,
|
|
||||||
PB25,9,,,S0.1,S2.0,,,,,,,
|
|
||||||
PB26,12,,,S2.0,S4.1,,TCC1[2],,,,,
|
|
||||||
PB27,13,,,S2.1,S4.0,,TCC1[3],,,,,
|
|
||||||
PB28,14,,,S2.2,S4.2,,TCC1[4],,,,SCK1,
|
|
||||||
PB29,15,,,S2.3,S4.3,,TCC1[5],,,,MCK1,
|
|
||||||
PB30,14,,,S7.0,S5.1,TC0[0],TCC4[0],TCC0[6],,SWDO,,
|
|
||||||
PB31,15,,,S7.1,S5.0,TC0[1],TCC4[1],TCC0[7],,,,
|
|
||||||
PC00,0,,A1[10],,,,,,,,,
|
|
||||||
PC01,1,,A1[11],,,,,,,,,
|
|
||||||
PC02,2,,A1[4],,,,,,,,,
|
|
||||||
PC03,3,,A1[5],,,,,,,,,
|
|
||||||
PC04,4,,,S6.0,,,TCC[0],,,,,
|
|
||||||
PC05,5,,,S6.1,,,,,,,,
|
|
||||||
PC06,6,,,S6.2,,,,,,SDCD,,
|
|
||||||
PC07,9,,,S6.3,,,,,,SDWP,,
|
|
||||||
PC10,10,,,S6.2,S7.2,,TCC0[0],TCC1[4],,,,
|
|
||||||
PC11,11,,,S6.3,S7.3,,TCC0[1],TCC1[5],,,,
|
|
||||||
PC12,12,,,S7.0,S6.1,,TCC0[2],TCC1[6],,,,DATA10
|
|
||||||
PC13,13,,,S7.1,S6.0,,TCC0[3],TCC1[7],,,,DATA11
|
|
||||||
PC14,14,,,S7.2,S6.2,,TCC0[4],TCC1[0],,,,DATA12
|
|
||||||
PC15,15,,,S7.3,S6.3,,TCC0[5],TCC1[1],,,,DATA13
|
|
||||||
PC16,0,,,S6.0,S0.1,,TCC0[0],,,,,
|
|
||||||
PC17,1,,,S6.1,S0.0,,TCC0[1],,,,,
|
|
||||||
PC18,2,,,S6.2,S0.2,,TCC0[2],,,,,
|
|
||||||
PC19,3,,,S6.3,S0.3,,TCC0[3],,,,,
|
|
||||||
PC20,4,,,,,,TCC0[4],,,SDCD,,
|
|
||||||
PC21,5,,,,,,TCC0[5],,,SDWP,,
|
|
||||||
PC22,6,,,S1.0,S3.1,,TCC0[6],,,,,
|
|
||||||
PC23,7,,,S1.1,S3.0,,TCC0[7],,,,,
|
|
||||||
PC24,8,,,S0.2,S2.2,,,,,,,
|
|
||||||
PC25,9,,,S0.3,S2.3,,,,,,,
|
|
||||||
PC26,10,,,,,,,,,,,
|
|
||||||
PC27,11,,,S1.0,,,,,,,,
|
|
||||||
PC28,12,,,S1.1,,,,,,,,
|
|
||||||
PC30,14,,A1[12],,,,,,,,,
|
|
||||||
PC31,15,,A1[13],,,,,,,,,
|
|
||||||
PD00,0,,A1[7],,,,,,,,,
|
|
||||||
PD01,1,,A1[15],,,,,,,,,
|
|
||||||
PD08,3,,,S7.0,S6.1,,TCC0[1],,,,,
|
|
||||||
PD09,4,,,S7.1,S6.0,,TCC0[2],,,,,
|
|
||||||
PD10,5,,,S7.2,S6.2,,TCC0[3],,,,,
|
|
||||||
PD11,6,,,S7.3,S6.3,,TCC0[4],,,,,
|
|
||||||
PD12,7,,,,,,TCC0[5],,,,,
|
|
||||||
PD20,10,,,S1.2,S3.2,,TCC1[0],,,SDCD,,
|
|
||||||
PD21,11,,,S1.3,S3.3,,TCC1[1],,,SDWP,,
|
|
||||||
,,,,,,,,,,,,
|
|
||||||
,,,,,,,,,,,,
|
|
||||||
,,,,,,,,,,,,
|
|
||||||
,,,,,,,,,,,,
|
|
||||||
,,,,,,,,,,,,
|
|
||||||
,,,,,,,,,,,,
|
|
||||||
,,,,,,,,,,,,
|
|
||||||
,,,,,,,,,,,,
|
|
||||||
,,,,,,,,,,,,
|
|
||||||
,,,,,,,,,,,,
|
|
||||||
,,,,,,,,,,,,
|
|
||||||
,,,,,,,,,,,,
|
|
||||||
,,,,,,,,,,,,
|
|
||||||
,,,,,,,,,,,,
|
|
||||||
,,,,,,,,,,,,
|
|
||||||
,,,,,,,,,,,,
|
|
||||||
,,,,,,,,,,,,
|
|
||||||
,,,,,,,,,,,,
|
|
||||||
,,,,,,,,,,,,
|
|
||||||
,,,,,,,,,,,,
|
|
||||||
,,,,,,,,,,,,
|
|
||||||
DESCRIPTION,"The Microchip (nee Atmel) SAMD51 is an ARM Cortex-M4F running at 120 MHz with 192 or 256kB on-chip SRAM, up to 1MB Flash memory and built in USB. All GPIO is 3.3V in/out max unless otherwise stated. SERCOMs can be used as UART (TX on SERCOM pad 0, RX on any pad), I2C (SDA on pad 0, SCL on pad 1), or SPI (SCK on pad 1, MOSI on pad 0 or 3, MISO on any pad remaining) ",,,,,,,,,,,
|
|
||||||
|
BIN
samd51pins.ods
BIN
samd51pins.ods
Binary file not shown.
Loading…
Reference in a new issue