├── .github
└── workflows
│ └── pages.yml
├── .gitignore
├── .gitmodules
├── Board
├── Rev0
│ ├── For Review
│ │ ├── pico-ice_r0.0.pdf
│ │ ├── pico-ice_r0.1.pdf
│ │ ├── pico-ice_r0.2.pdf
│ │ └── pico-ice_r0.3.pdf
│ ├── Output Files
│ │ ├── Assembly
│ │ │ ├── pico-ice-B_Fab.pdf
│ │ │ ├── pico-ice-F_Fab.pdf
│ │ │ ├── pico-ice-all-pos.xlsx
│ │ │ ├── pico-ice-bottom.pos
│ │ │ ├── pico-ice-top.pos
│ │ │ ├── pico-ice_bom_0.3.csv
│ │ │ └── pico-ice_bom_0.3.html
│ │ └── Gerbers
│ │ │ ├── pico-ice-B_Cu.gbr
│ │ │ ├── pico-ice-B_Mask.gbr
│ │ │ ├── pico-ice-B_Paste.gbr
│ │ │ ├── pico-ice-B_Silkscreen.gbr
│ │ │ ├── pico-ice-Edge_Cuts.gbr
│ │ │ ├── pico-ice-F_Cu.gbr
│ │ │ ├── pico-ice-F_Mask.gbr
│ │ │ ├── pico-ice-F_Paste.gbr
│ │ │ ├── pico-ice-F_Silkscreen.gbr
│ │ │ ├── pico-ice-In1_Cu.gbr
│ │ │ ├── pico-ice-In2_Cu.gbr
│ │ │ ├── pico-ice-NPTH.drl
│ │ │ └── pico-ice-PTH.drl
│ ├── RP2040_minimal.pretty
│ │ ├── Crystal_SMD_HC49-US.kicad_mod
│ │ ├── RP2040-QFN-56.kicad_mod
│ │ └── USB_Micro-B_Amphenol_10103594-0001LF_Horizontal_modified.kicad_mod
│ ├── bom.ini
│ ├── bom
│ │ └── ibom.html
│ ├── fp-info-cache
│ ├── fp-lib-table
│ ├── pico-ice-cache.lib
│ ├── pico-ice-rescue.dcm
│ ├── pico-ice-rescue.lib
│ ├── pico-ice.kicad_pcb
│ ├── pico-ice.kicad_prl
│ ├── pico-ice.kicad_pro
│ ├── pico-ice.kicad_sch
│ ├── pico-ice.lib
│ ├── pico-ice.pdf
│ ├── pico-ice.pro
│ ├── pico-ice.sch
│ ├── pico-ice.xml
│ ├── pico-ice_minimal.lib
│ └── sym-lib-table
├── Rev1
│ ├── Fabrication
│ │ ├── Gerber
│ │ │ ├── pico-ice-B_Cu.gbr
│ │ │ ├── pico-ice-B_Mask.gbr
│ │ │ ├── pico-ice-B_Paste.gbr
│ │ │ ├── pico-ice-B_Silkscreen.gbr
│ │ │ ├── pico-ice-Edge_Cuts.gbr
│ │ │ ├── pico-ice-F_Cu.gbr
│ │ │ ├── pico-ice-F_Mask.gbr
│ │ │ ├── pico-ice-F_Paste.gbr
│ │ │ ├── pico-ice-F_Silkscreen.gbr
│ │ │ ├── pico-ice-In1_Cu.gbr
│ │ │ ├── pico-ice-In2_Cu.gbr
│ │ │ ├── pico-ice-NPTH-drl_map.gbr
│ │ │ ├── pico-ice-NPTH.drl
│ │ │ ├── pico-ice-PTH-drl_map.gbr
│ │ │ └── pico-ice-PTH.drl
│ │ ├── pico-ice-B_Fab.pdf
│ │ ├── pico-ice-F_Cu.pdf
│ │ ├── pico-ice-F_Fab.pdf
│ │ ├── pico-ice-all-pos.csv
│ │ └── pico-ice.d356
│ ├── RP2040_minimal.pretty
│ │ ├── Crystal_SMD_HC49-US.kicad_mod
│ │ ├── RP2040-QFN-56.kicad_mod
│ │ └── USB_Micro-B_Amphenol_10103594-0001LF_Horizontal_modified.kicad_mod
│ ├── bom.ini
│ ├── bom
│ │ ├── BoM_pico-ice.csv
│ │ └── ibom.html
│ ├── fp-info-cache
│ ├── fp-lib-table
│ ├── pico-ice-cache.lib
│ ├── pico-ice-rescue.dcm
│ ├── pico-ice-rescue.lib
│ ├── pico-ice.kicad_pcb
│ ├── pico-ice.kicad_prl
│ ├── pico-ice.kicad_pro
│ ├── pico-ice.kicad_sch
│ ├── pico-ice.lib
│ ├── pico-ice.pdf
│ ├── pico-ice.pro
│ ├── pico-ice.sch
│ ├── pico-ice.xml
│ ├── pico-ice_back.png
│ ├── pico-ice_front.png
│ ├── pico-ice_minimal.lib
│ └── sym-lib-table
├── Rev2
│ ├── Fabrication
│ │ ├── Gerber
│ │ │ ├── pico-ice-B_Cu.gbr
│ │ │ ├── pico-ice-B_Fab.gbr
│ │ │ ├── pico-ice-B_Fab.pdf
│ │ │ ├── pico-ice-B_Mask.gbr
│ │ │ ├── pico-ice-B_Paste.gbr
│ │ │ ├── pico-ice-B_Silkscreen.gbr
│ │ │ ├── pico-ice-F_Cu.gbr
│ │ │ ├── pico-ice-F_Fab.gbr
│ │ │ ├── pico-ice-F_Fab.pdf
│ │ │ ├── pico-ice-F_Mask.gbr
│ │ │ ├── pico-ice-F_Paste.gbr
│ │ │ ├── pico-ice-F_Silkscreen.gbr
│ │ │ ├── pico-ice-In1_Cu.gbr
│ │ │ ├── pico-ice-In2_Cu.gbr
│ │ │ ├── pico-ice-Margin.gbr
│ │ │ ├── pico-ice-NPTH-drl-drl_map.gbr
│ │ │ ├── pico-ice-NPTH-drl.gbr
│ │ │ ├── pico-ice-PTH-drl-drl_map.gbr
│ │ │ └── pico-ice-PTH-drl.gbr
│ │ ├── pico-ice-all-pos.csv
│ │ └── pico-ice.d356
│ ├── RP2040_minimal.pretty
│ │ ├── Crystal_SMD_HC49-US.kicad_mod
│ │ ├── RP2040-QFN-56.kicad_mod
│ │ └── USB_Micro-B_Amphenol_10103594-0001LF_Horizontal_modified.kicad_mod
│ ├── bom.ini
│ ├── bom
│ │ └── ibom.html
│ ├── fp-info-cache
│ ├── fp-lib-table
│ ├── pico-ice-cache.lib
│ ├── pico-ice-rescue.dcm
│ ├── pico-ice-rescue.lib
│ ├── pico-ice.kicad_pcb
│ ├── pico-ice.kicad_prl
│ ├── pico-ice.kicad_pro
│ ├── pico-ice.kicad_sch
│ ├── pico-ice.lib
│ ├── pico-ice.pdf
│ ├── pico-ice.pro
│ ├── pico-ice.sch
│ ├── pico-ice.xml
│ ├── pico-ice_minimal.lib
│ └── sym-lib-table
└── Rev3
│ ├── CUSTOM.pretty
│ ├── LED_Cree-PLCC4_1x1mm_CW.kicad_mod
│ ├── OSHW_Dual_0.1_Scale_2140.kicad_mod
│ ├── PTS820J25KSMTRLFS.kicad_mod
│ ├── Pb free logo.kicad_mod
│ ├── WEEE logo.kicad_mod
│ └── tinyAI_logo.kicad_mod
│ ├── Fabrication
│ ├── pico-ice-B_Fab.pdf
│ └── pico-ice-F_Fab.pdf
│ ├── RP2040_minimal.pretty
│ ├── Crystal_SMD_HC49-US.kicad_mod
│ ├── OnSemi_XDFN4-1EP_1.0x1.0mm_EP0.52x0.52mm.kicad_mod
│ ├── Onsemi_XDFN-1EP_1X1MM.pretty
│ │ └── OnSemi_XDFN4-1EP_1.0x1.0mm_EP0.52x0.52mm.kicad_mod
│ ├── PinHeader_2x20_P2.54mm_Vertical_Left.kicad_mod
│ ├── PinHeader_2x20_P2.54mm_Vertical_Right.kicad_mod
│ ├── RP2040-QFN-56.kicad_mod
│ └── USB_Micro-B_Amphenol_10103594-0001LF_Horizontal_modified.kicad_mod
│ ├── bom.ini
│ ├── bom
│ └── ibom.html
│ ├── fp-info-cache
│ ├── fp-lib-table
│ ├── ibom.config.ini
│ ├── pico-ice-cache.lib
│ ├── pico-ice-rescue.dcm
│ ├── pico-ice-rescue.lib
│ ├── pico-ice.kicad_pcb
│ ├── pico-ice.kicad_prl
│ ├── pico-ice.kicad_pro
│ ├── pico-ice.kicad_sch
│ ├── pico-ice.lib
│ ├── pico-ice.pdf
│ ├── pico-ice.pro
│ ├── pico-ice.sch
│ ├── pico-ice.step
│ ├── pico-ice.xml
│ ├── pico-ice_minimal.lib
│ └── sym-lib-table
├── CNAME
├── Docs
├── .gitignore
├── Doxyfile
├── DoxygenLayout.xml
├── favicon.ico
├── getting_started.md
├── images
│ ├── favicon.ico
│ ├── favicon.png
│ ├── pico_ice.drawio
│ ├── pico_ice_back.jpg
│ ├── pico_ice_blocks.png
│ ├── pico_ice_front.jpg
│ ├── pico_ice_pmod_install.jpg
│ └── pico_ice_reset_button.jpg
├── index.md
├── learn.md
├── mpy.md
├── pinout.md
├── pinout
│ ├── Makefile
│ ├── data.py
│ ├── pico_ice_front.png
│ ├── pinout.png
│ ├── pinout.svg
│ ├── pinout_diagram.py
│ ├── spi_bus_black.odp
│ ├── spi_bus_black.png
│ ├── spi_bus_white.odp
│ ├── spi_bus_white.png
│ └── styles.css
├── pmods.md
├── programming_the_fpga.md
└── programming_the_mcu.md
├── Firmware
├── pico-ice-default
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── README.md
│ ├── main.c
│ ├── pico-ice-sdk
│ ├── pico-sdk
│ ├── pico_sdk_import.cmake
│ ├── tusb_config.h
│ └── usb_descriptors.c
├── pico-ice-test-jig-mpy
│ ├── final.bit
│ ├── flash_final_rp2040.py
│ ├── flash_final_rp2350.py
│ ├── main_rp2040.py
│ ├── main_rp2350.py
│ ├── mfg_pico-ice.ps1
│ ├── mfg_pico2-ice.ps1
│ ├── pico2_ice.uf2
│ ├── pico_ice.uf2
│ ├── rtl_pico2_ice
│ │ ├── Makefile
│ │ ├── pico_ice.pcf
│ │ └── top.sv
│ ├── rtl_pico_ice
│ │ ├── Makefile
│ │ ├── pico_ice.pcf
│ │ └── top.sv
│ ├── run_tests_rp2040.py
│ ├── run_tests_rp2350.py
│ ├── test_pico2_ice.bit
│ └── test_pico_ice.bit
└── pico-ice-test-jig
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── README.md
│ ├── include
│ └── tusb_config.h
│ ├── pico_sdk_import.cmake
│ ├── rtl
│ ├── Makefile
│ ├── pico_ice.pcf
│ └── top.sv
│ └── src
│ ├── main.c
│ └── usb_descriptors.c
├── LICENSE
├── README.md
└── rtl
└── sim
└── Makefile
/.github/workflows/pages.yml:
--------------------------------------------------------------------------------
1 | # Sample workflow for building and deploying a Doxygen site to GitHub Pages
2 | name: Deploy Doxygen site to Pages
3 |
4 | on:
5 | push:
6 | branches: ["main"]
7 | workflow_dispatch:
8 |
9 | permissions:
10 | contents: read
11 | pages: write
12 | id-token: write
13 |
14 | concurrency:
15 | group: "pages"
16 | cancel-in-progress: true
17 |
18 | jobs:
19 | build:
20 | runs-on: ubuntu-latest
21 | steps:
22 | - name: Checkout
23 | uses: actions/checkout@v3
24 | - name: Setup Doxygen and Graphviz
25 | run: |
26 | sudo apt update
27 | sudo apt install doxygen graphviz
28 | - name: Setup Pages
29 | id: pages
30 | uses: actions/configure-pages@v3
31 | - name: Build with Doxygen
32 | run: |
33 | cd Docs
34 | git submodule update --init
35 | doxygen
36 | - name: Upload artifact
37 | uses: actions/upload-pages-artifact@v3
38 | with:
39 | path: "Docs/html"
40 |
41 | deploy:
42 | environment:
43 | name: github-pages
44 | url: ${{ steps.deployment.outputs.page_url }}
45 | runs-on: ubuntu-latest
46 | needs: build
47 | steps:
48 | - name: Deploy to GitHub Pages
49 | id: deployment
50 | uses: actions/deploy-pages@v4
51 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | *.zip
3 | *-bak
4 | # Byte-compiled / optimized / DLL files
5 | __pycache__/
6 | *.py[cod]
7 | *$py.class
8 |
9 | # C extensions
10 | *.so
11 |
12 | # Distribution / packaging
13 | .Python
14 | build/
15 | develop-eggs/
16 | dist/
17 | downloads/
18 | eggs/
19 | .eggs/
20 | lib/
21 | lib64/
22 | parts/
23 | sdist/
24 | var/
25 | wheels/
26 | pip-wheel-metadata/
27 | share/python-wheels/
28 | *.egg-info/
29 | .installed.cfg
30 | *.egg
31 | MANIFEST
32 |
33 | # PyInstaller
34 | # Usually these files are written by a python script from a template
35 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
36 | *.manifest
37 | *.spec
38 |
39 | # Installer logs
40 | pip-log.txt
41 | pip-delete-this-directory.txt
42 |
43 | # Unit test / coverage reports
44 | htmlcov/
45 | .tox/
46 | .nox/
47 | .coverage
48 | .coverage.*
49 | .cache
50 | nosetests.xml
51 | coverage.xml
52 | *.cover
53 | *.py,cover
54 | .hypothesis/
55 | .pytest_cache/
56 |
57 | # Translations
58 | *.mo
59 | *.pot
60 |
61 | # Django stuff:
62 | *.log
63 | local_settings.py
64 | db.sqlite3
65 | db.sqlite3-journal
66 |
67 | # Flask stuff:
68 | instance/
69 | .webassets-cache
70 |
71 | # Scrapy stuff:
72 | .scrapy
73 |
74 | # Sphinx documentation
75 | docs/_build/
76 |
77 | # PyBuilder
78 | target/
79 |
80 | # Jupyter Notebook
81 | .ipynb_checkpoints
82 |
83 | # IPython
84 | profile_default/
85 | ipython_config.py
86 |
87 | # pyenv
88 | .python-version
89 |
90 | # pipenv
91 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92 | # However, in case of collaboration, if having platform-specific dependencies or dependencies
93 | # having no cross-platform support, pipenv may install dependencies that don't work, or not
94 | # install all needed dependencies.
95 | #Pipfile.lock
96 |
97 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow
98 | __pypackages__/
99 |
100 | # Celery stuff
101 | celerybeat-schedule
102 | celerybeat.pid
103 |
104 | # SageMath parsed files
105 | *.sage.py
106 |
107 | # Environments
108 | .env
109 | .venv
110 | env/
111 | venv/
112 | ENV/
113 | env.bak/
114 | venv.bak/
115 |
116 | # Spyder project settings
117 | .spyderproject
118 | .spyproject
119 |
120 | # Rope project settings
121 | .ropeproject
122 |
123 | # mkdocs documentation
124 | /site
125 |
126 | # mypy
127 | .mypy_cache/
128 | .dmypy.json
129 | dmypy.json
130 |
131 | # Pyre type checker
132 | .pyre/
133 |
--------------------------------------------------------------------------------
/.gitmodules:
--------------------------------------------------------------------------------
1 | [submodule "Firmware/pico-ice-sdk"]
2 | path = Firmware/pico-ice-sdk
3 | url = https://github.com/tinyvision-ai-inc/pico-ice-sdk
4 | [submodule "Firmware/pico-sdk"]
5 | path = Firmware/pico-sdk
6 | url = https://github.com/raspberrypi/pico-sdk
7 | [submodule "Docs/doxygen-awesome-css"]
8 | path = Docs/doxygen-awesome-css
9 | url = https://github.com/jothepro/doxygen-awesome-css.git
10 |
--------------------------------------------------------------------------------
/Board/Rev0/For Review/pico-ice_r0.0.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Board/Rev0/For Review/pico-ice_r0.0.pdf
--------------------------------------------------------------------------------
/Board/Rev0/For Review/pico-ice_r0.1.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Board/Rev0/For Review/pico-ice_r0.1.pdf
--------------------------------------------------------------------------------
/Board/Rev0/For Review/pico-ice_r0.2.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Board/Rev0/For Review/pico-ice_r0.2.pdf
--------------------------------------------------------------------------------
/Board/Rev0/For Review/pico-ice_r0.3.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Board/Rev0/For Review/pico-ice_r0.3.pdf
--------------------------------------------------------------------------------
/Board/Rev0/Output Files/Assembly/pico-ice-B_Fab.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Board/Rev0/Output Files/Assembly/pico-ice-B_Fab.pdf
--------------------------------------------------------------------------------
/Board/Rev0/Output Files/Assembly/pico-ice-F_Fab.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Board/Rev0/Output Files/Assembly/pico-ice-F_Fab.pdf
--------------------------------------------------------------------------------
/Board/Rev0/Output Files/Assembly/pico-ice-all-pos.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Board/Rev0/Output Files/Assembly/pico-ice-all-pos.xlsx
--------------------------------------------------------------------------------
/Board/Rev0/Output Files/Assembly/pico-ice-bottom.pos:
--------------------------------------------------------------------------------
1 | ### Module positions - created on Wed Aug 24 15:33:36 2022 ###
2 | ### Printed by Pcbnew version (6.0.5)
3 | ## Unit = mm, Angle = deg.
4 | ## Side : bottom
5 | # Ref Val Package PosX PosY Rot Side
6 | C3 4.7u C_0402_1005Metric -16.4338 21.4630 -90.0000 bottom
7 | C4 0.1u C_0402_1005Metric -11.8110 15.6464 90.0000 bottom
8 | C6 1u C_0402_1005Metric -9.6012 15.6464 90.0000 bottom
9 | C7 4.7u C_0402_1005Metric -8.1788 27.4066 0.0000 bottom
10 | C8 0.1u C_0402_1005Metric -11.0998 12.9286 0.0000 bottom
11 | C9 4.7u C_0402_1005Metric -17.1395 30.0228 -90.0000 bottom
12 | C11 1u C_0402_1005Metric -10.6680 15.6464 90.0000 bottom
13 | C13 4.7u C_0402_1005Metric -12.0904 29.9466 -90.0000 bottom
14 | C26 0.1u C_0402_1005Metric -5.5372 44.3992 90.0000 bottom
15 | C27 0.1u C_0402_1005Metric -9.6266 32.1818 -90.0000 bottom
16 | C40 0.1u C_0402_1005Metric -5.3340 38.2778 90.0000 bottom
17 | C41 0.1u C_0402_1005Metric -6.2230 38.2778 90.0000 bottom
18 | C42 0.1u C_0402_1005Metric -12.1666 43.1800 180.0000 bottom
19 | FID2 Fiducial Fiducial_0.75mm_Mask1.5mm -20.3200 52.0700 180.0000 bottom
20 | FID4 Fiducial Fiducial_0.75mm_Mask1.5mm -17.7800 2.5400 180.0000 bottom
21 | FID6 Fiducial Fiducial_0.75mm_Mask1.5mm -5.0800 2.5400 180.0000 bottom
22 | R2 1k R_0402_1005Metric -17.3990 11.8364 90.0000 bottom
23 | R3 DNP R_0402_1005Metric -16.4846 11.8384 -90.0000 bottom
24 | R8 10K R_0402_1005Metric -5.1308 52.2732 -90.0000 bottom
25 | R9 10K R_0402_1005Metric -3.0988 52.2732 -90.0000 bottom
26 | R12 10K R_0402_1005Metric -12.5476 52.1716 -90.0000 bottom
27 | R13 10K R_0402_1005Metric -4.1148 52.2732 -90.0000 bottom
28 | R14 2.2K R_0402_1005Metric -2.0828 52.2732 -90.0000 bottom
29 | U1 NCP1117ST33T3G SOT-223-3_TabPin2 -11.5570 24.4094 180.0000 bottom
30 | U2 W25Q32JVSSIQ SOIC-8_5.23x5.23mm_P1.27mm -11.0998 9.4234 180.0000 bottom
31 | U4 CL9293A12L5M SOT-23-5 -14.5796 29.4894 180.0000 bottom
32 | U5 APS6404L-3SQN-SN SOIC-8_3.9x4.9mm_P1.27mm -14.4780 47.2850 -90.0000 bottom
33 | U8 W25Q32JVSSIQ SOIC-8_5.23x5.23mm_P1.27mm -8.7630 48.0060 -90.0000 bottom
34 | ## End
35 |
--------------------------------------------------------------------------------
/Board/Rev0/Output Files/Assembly/pico-ice_bom_0.3.csv:
--------------------------------------------------------------------------------
1 | Component,Description,Part,References,Value,Footprint,Quantity Per PCB,Datasheet,MPN,Manufacturer,Supplier,Digi-Key Part Number,Comment
2 | 1,Unpolarized capacitor,C,C1 C2,27p,C_0402_1005Metric,2,~,GCM1555C1H270JA16D,Murata Electronics,LCSC,,
3 | 2,,Device_C,C4 C5 C8 C10 C12 C14 C15 C16 C17 C18 C19 C20 C21 C23 C24 C26 C27 C28 C29 C33 C35 C38 C39 C40 C41 C42,0.1u,C_0402_1005Metric,26,,GRM155R71C104KA88J,Murata Electronics,Mouser,,
4 | 3,,Device_C,C3 C6 C7 C9 C11 C13 C22 C25 C30 C31 C32 C34 C43,4.7u,C_0402_1005Metric,13,,GRM155R60J475ME87D,Murata Electronics,LCSC,,
5 | 4,,Diode_1N4148W,D1,1N4148WT-7,D_SOD-523,1,https://www.vishay.com/docs/85748/1n4148w.pdf,1N4148WT-7,Micro Commercial Co,LCSC,,
6 | 5,,Device_LED_ALT,D3,LTST-C191KGKT,LED_0603_1608Metric,1,,LTST-C191KGKT,Lite-On,LCSC,,
7 | 6,,Device_LED_ARGB,D2 D4,MHPA1010RGBDT,LED_Cree-PLCC4_1x1mm_CW,2,,MHPA1010RGBDT,MEIHUA,LCSC,LCSC,
8 | 7,,2x3_2.54mm_Female,J10 J11,2x3_2.54mm_Female,PinSocket_2x03_P2.54mm_Horizontal,2,,DW254W-22-06-85,DEALON,LCSC,,
9 | 8,"Generic connector, double row, 02x06, row letter first pin numbering scheme (pin number consists of a letter for the row and a number for the pin index in this row. a1, ..., aN; b1, ..., bN), script generated (kicad-library-utils/schlib/autogen/connector/)",Conn_02x06_Row_Letter_First,J3 J4 J6 J7 J8,6X2 Female Header,PMOD_2x06_P2.54mm_Horizontal,5,~,DW254W-22-12-85,DEALON,LCSC,,PMOD_PICO Dual PMOD A Single PMOD SPARES Dual PMOD B
10 | 9,"Generic connector, single row, 01x02, script generated (kicad-library-utils/schlib/autogen/connector/)",Conn_01x02,J2 J9,SWD,PinHeader_1x02_P2.54mm_Vertical,2,~,PZ254V-11-02P,XFCN,LCSC,,
11 | 10,USB 2.0-only Type-C Receptacle connector,USB_C_Receptacle_USB2.0,J1,USB_C_Receptacle_USB2.0,USB_C_Receptacle_HRO_TYPE-C-31-M-12,1,https://www.usb.org/sites/default/files/documents/usb_type-c.zip,USB4105-GF-A,GCT,Mouser,,
12 | 11,,Device_R,PTC1,MF-FSMF035X-2,R_0603_1608Metric,1,https://www.bourns.com/docs/Product-Datasheets/mffsmf.pdf,MF-FSMF035X-2,Bourns Inc.,LCSC,,
13 | 12,Resistor,R,R4 R5 R6 R22 R23 R25,27,R_0402_1005Metric,6,~,RC0402FR-0727RL,YAGEO,LCSC,,
14 | 13,,Device_R,R11,100,R_0402_1005Metric,1,,RC0402FR-07100RL,YAGEO,LCSC,,
15 | 14,Resistor,R,R1 R2,1k,R_0402_1005Metric,2,~,RC0402FR-071KL,YAGEO,LCSC,,
16 | 15,,Device_R,R14 R18 R19 R20,2.2K,R_0402_1005Metric,4,,RC0402FR-072K2L,YAGEO,LCSC,,
17 | 16,,Device_R,R10 R24,5.1K,R_0402_1005Metric,2,,RC0402FR-075K1L,YAGEO,LCSC,,
18 | 17,,Device_R,R7 R8 R9 R12 R13 R15 R16 R17 R21,10K,R_0402_1005Metric,9,,RC0402FR-0710KL,YAGEO,LCSC,,
19 | 18,"Push button switch, generic, two pins",SW_Push,SW1,PTS820 J25K SMTR LFS,PTS820J25KSMTRLFS,1,~,PTS820 J25K SMTR LFS,C&K,Mouser,,~RESET
20 | 19,"Push button switch, generic, two pins",SW_Push_1,SW2,PTS820 J25K SMTR LFS,PTS820J25KSMTRLFS,1,~,PTS820 J25K SMTR LFS,C&K,Mouser,,SW_Push
21 | 20,,W25Q32JVSS-Memory_Flash,U5,APS6404L-3SQN-SN,SOIC-8_3.9x4.9mm_P1.27mm,1,http://www.winbond.com/resource-files/w25q32jv%20revg%2003272018%20plus.pdf,APS6404L-3SQN-SN,AP Memory,Mouser,,
22 | 21,,AP2127K-1.2,U4,CL9293A12L5M,SOT-23-5,1,https://www.diodes.com/assets/Datasheets/AP2127.pdf,CL9293A12L5M,ChipLink Tech,LCSC,,
23 | 22,,ICE40UP5K-SG48ITR-FPGA_Lattice,U6,ICE40UP5K-SG48ITR,QFN-48-1EP_7x7mm_P0.5mm_EP5.6x5.6mm,1,http://www.latticesemi.com/Products/FPGAandCPLD/iCE40Ultra,ICE40UP5K-SG48I,Lattice,Mouser,,
24 | 23,"1A Low drop-out regulator, Fixed Output 3.3V, SOT-223",NCP1117-3.3_SOT223,U1,NCP1117ST33T3G,SOT-223-3_TabPin2,1,http://www.onsemi.com/pub_link/Collateral/NCP1117-D.PDF,NCP1117ST33T3G,onsemi,LCSC,,
25 | 24,,MCU_RaspberryPi_RP2040_RP2040,U3,RP2040,RP2040-QFN-56,1,,RP2040,Raspberry Pi,LCSC,,
26 | 25,,W25Q32JVSS-Memory_Flash,U2 U8,W25Q32JVSSIQ,SOIC-8_5.23x5.23mm_P1.27mm,2,http://www.winbond.com/resource-files/w25q32jv%20revg%2003272018%20plus.pdf,W25Q32JVSSIQ,Winbond Elec,LCSC,,
27 | 26,"Four pin crystal, GND on pins 2 and 4",Crystal_GND24,Y1,12 MHz,Crystal_SMD_2520-4Pin_2.5x2.0mm,1,~,ABM10-166-12.000MHZ-T3,Abracon LLC,Mouser,,
28 |
29 |
30 |
31 |
32 |
33 | Component Groups:,26
34 | Component Count:,90
35 | Fitted Components:,90
36 | Number of PCBs:,1
37 | Total components:,90
38 | Schematic Version:,0.3
39 | Schematic Date:,2020-08-10
40 | PCB Variant:,default
41 | BoM Date:,8/24/2022 4:19:43 PM
42 | Schematic Source:,pico-ice.kicad_sch
43 | KiCad Version:,Eeschema (6.0.5)
44 |
--------------------------------------------------------------------------------
/Board/Rev0/Output Files/Gerbers/pico-ice-B_Paste.gbr:
--------------------------------------------------------------------------------
1 | G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,(6.0.5)*
2 | G04 #@! TF.CreationDate,2022-08-24T15:32:52-07:00*
3 | G04 #@! TF.ProjectId,pico-ice,7069636f-2d69-4636-952e-6b696361645f,REV1*
4 | G04 #@! TF.SameCoordinates,Original*
5 | G04 #@! TF.FileFunction,Paste,Bot*
6 | G04 #@! TF.FilePolarity,Positive*
7 | %FSLAX46Y46*%
8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
9 | G04 Created by KiCad (PCBNEW (6.0.5)) date 2022-08-24 15:32:52*
10 | %MOMM*%
11 | %LPD*%
12 | G01*
13 | G04 APERTURE LIST*
14 | G04 Aperture macros list*
15 | %AMRoundRect*
16 | 0 Rectangle with rounded corners*
17 | 0 $1 Rounding radius*
18 | 0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
19 | 0 Add a 4 corners polygon primitive as box body*
20 | 4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
21 | 0 Add four circle primitives for the rounded corners*
22 | 1,1,$1+$1,$2,$3*
23 | 1,1,$1+$1,$4,$5*
24 | 1,1,$1+$1,$6,$7*
25 | 1,1,$1+$1,$8,$9*
26 | 0 Add four rect primitives between the rounded corners*
27 | 20,1,$1+$1,$2,$3,$4,$5,0*
28 | 20,1,$1+$1,$4,$5,$6,$7,0*
29 | 20,1,$1+$1,$6,$7,$8,$9,0*
30 | 20,1,$1+$1,$8,$9,$2,$3,0*%
31 | G04 Aperture macros list end*
32 | %ADD10RoundRect,0.135000X-0.185000X0.135000X-0.185000X-0.135000X0.185000X-0.135000X0.185000X0.135000X0*%
33 | %ADD11RoundRect,0.140000X0.170000X-0.140000X0.170000X0.140000X-0.170000X0.140000X-0.170000X-0.140000X0*%
34 | %ADD12RoundRect,0.140000X-0.170000X0.140000X-0.170000X-0.140000X0.170000X-0.140000X0.170000X0.140000X0*%
35 | %ADD13RoundRect,0.150000X-0.150000X0.650000X-0.150000X-0.650000X0.150000X-0.650000X0.150000X0.650000X0*%
36 | %ADD14RoundRect,0.150000X0.650000X0.150000X-0.650000X0.150000X-0.650000X-0.150000X0.650000X-0.150000X0*%
37 | %ADD15RoundRect,0.140000X0.140000X0.170000X-0.140000X0.170000X-0.140000X-0.170000X0.140000X-0.170000X0*%
38 | %ADD16RoundRect,0.150000X-0.150000X0.825000X-0.150000X-0.825000X0.150000X-0.825000X0.150000X0.825000X0*%
39 | %ADD17RoundRect,0.140000X-0.140000X-0.170000X0.140000X-0.170000X0.140000X0.170000X-0.140000X0.170000X0*%
40 | %ADD18RoundRect,0.150000X0.512500X0.150000X-0.512500X0.150000X-0.512500X-0.150000X0.512500X-0.150000X0*%
41 | %ADD19RoundRect,0.135000X0.185000X-0.135000X0.185000X0.135000X-0.185000X0.135000X-0.185000X-0.135000X0*%
42 | %ADD20R,2.000000X1.500000*%
43 | %ADD21R,2.000000X3.800000*%
44 | G04 APERTURE END LIST*
45 | D10*
46 | X77444600Y-119731600D03*
47 | X77444600Y-120751600D03*
48 | X73507600Y-79398400D03*
49 | X73507600Y-80418400D03*
50 | D11*
51 | X66497200Y-88160800D03*
52 | X66497200Y-87200800D03*
53 | X72771000Y-116913600D03*
54 | X72771000Y-115953600D03*
55 | D12*
56 | X78099500Y-101577200D03*
57 | X78099500Y-102537200D03*
58 | X77393800Y-110137000D03*
59 | X77393800Y-111097000D03*
60 | D13*
61 | X67818000Y-80474000D03*
62 | X69088000Y-80474000D03*
63 | X70358000Y-80474000D03*
64 | X71628000Y-80474000D03*
65 | X71628000Y-87674000D03*
66 | X70358000Y-87674000D03*
67 | X69088000Y-87674000D03*
68 | X67818000Y-87674000D03*
69 | D14*
70 | X75659800Y-120751600D03*
71 | X75659800Y-122021600D03*
72 | X75659800Y-123291600D03*
73 | X75659800Y-124561600D03*
74 | X68459800Y-124561600D03*
75 | X68459800Y-123291600D03*
76 | X68459800Y-122021600D03*
77 | X68459800Y-120751600D03*
78 | D11*
79 | X67183000Y-94282200D03*
80 | X67183000Y-93322200D03*
81 | D15*
82 | X73606600Y-88900000D03*
83 | X72646600Y-88900000D03*
84 | D12*
85 | X70586600Y-99418200D03*
86 | X70586600Y-100378200D03*
87 | X73050400Y-101653400D03*
88 | X73050400Y-102613400D03*
89 | D16*
90 | X73533000Y-82320000D03*
91 | X74803000Y-82320000D03*
92 | X76073000Y-82320000D03*
93 | X77343000Y-82320000D03*
94 | X77343000Y-87270000D03*
95 | X76073000Y-87270000D03*
96 | X74803000Y-87270000D03*
97 | X73533000Y-87270000D03*
98 | D11*
99 | X66294000Y-94282200D03*
100 | X66294000Y-93322200D03*
101 | D10*
102 | X66090800Y-79296800D03*
103 | X66090800Y-80316800D03*
104 | D11*
105 | X70561200Y-116913600D03*
106 | X70561200Y-115953600D03*
107 | D10*
108 | X64058800Y-79296800D03*
109 | X64058800Y-80316800D03*
110 | D17*
111 | X68658800Y-104673400D03*
112 | X69618800Y-104673400D03*
113 | D11*
114 | X71628000Y-116913600D03*
115 | X71628000Y-115953600D03*
116 | D18*
117 | X76677100Y-101640600D03*
118 | X76677100Y-102590600D03*
119 | X76677100Y-103540600D03*
120 | X74402100Y-103540600D03*
121 | X74402100Y-101640600D03*
122 | D10*
123 | X63042800Y-79296800D03*
124 | X63042800Y-80316800D03*
125 | D19*
126 | X78359000Y-120753600D03*
127 | X78359000Y-119733600D03*
128 | D17*
129 | X71579800Y-119151400D03*
130 | X72539800Y-119151400D03*
131 | D20*
132 | X75667000Y-105370600D03*
133 | X75667000Y-107670600D03*
134 | D21*
135 | X69367000Y-107670600D03*
136 | D20*
137 | X75667000Y-109970600D03*
138 | D10*
139 | X65074800Y-79296800D03*
140 | X65074800Y-80316800D03*
141 | M02*
142 |
--------------------------------------------------------------------------------
/Board/Rev0/Output Files/Gerbers/pico-ice-Edge_Cuts.gbr:
--------------------------------------------------------------------------------
1 | G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,(6.0.5)*
2 | G04 #@! TF.CreationDate,2022-08-24T15:32:52-07:00*
3 | G04 #@! TF.ProjectId,pico-ice,7069636f-2d69-4636-952e-6b696361645f,REV1*
4 | G04 #@! TF.SameCoordinates,Original*
5 | G04 #@! TF.FileFunction,Profile,NP*
6 | %FSLAX46Y46*%
7 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
8 | G04 Created by KiCad (PCBNEW (6.0.5)) date 2022-08-24 15:32:52*
9 | %MOMM*%
10 | %LPD*%
11 | G01*
12 | G04 APERTURE LIST*
13 | G04 #@! TA.AperFunction,Profile*
14 | %ADD10C,0.127000*%
15 | G04 #@! TD*
16 | G04 APERTURE END LIST*
17 | D10*
18 | X80010000Y-134620000D02*
19 | X64770000Y-134620000D01*
20 | X83820000Y-77470000D02*
21 | X83820000Y-130810000D01*
22 | X64770000Y-73660000D02*
23 | X80010000Y-73660000D01*
24 | X60960000Y-130810000D02*
25 | X60960000Y-77470000D01*
26 | X60960000Y-130810000D02*
27 | G75*
28 | G03*
29 | X64770000Y-134620000I3919500J109500D01*
30 | G01*
31 | X64770000Y-73660000D02*
32 | G75*
33 | G03*
34 | X60960000Y-77470000I-55700J-3754300D01*
35 | G01*
36 | X83820000Y-77470000D02*
37 | G75*
38 | G03*
39 | X80010000Y-73660000I-3754300J55700D01*
40 | G01*
41 | X80010000Y-134620000D02*
42 | G75*
43 | G03*
44 | X83820000Y-130810000I-109500J3919500D01*
45 | G01*
46 | M02*
47 |
--------------------------------------------------------------------------------
/Board/Rev0/Output Files/Gerbers/pico-ice-NPTH.drl:
--------------------------------------------------------------------------------
1 | M48
2 | ; DRILL file {KiCad (6.0.5)} date Wed Aug 24 15:33:05 2022
3 | ; FORMAT={-:-/ absolute / inch / decimal}
4 | ; #@! TF.CreationDate,2022-08-24T15:33:05-07:00
5 | ; #@! TF.GenerationSoftware,Kicad,Pcbnew,(6.0.5)
6 | ; #@! TF.FileFunction,NonPlated,1,4,NPTH
7 | FMAT,2
8 | INCH
9 | ; #@! TA.AperFunction,NonPlated,NPTH,ComponentDrill
10 | T1C0.0256
11 | ; #@! TA.AperFunction,NonPlated,NPTH,ComponentDrill
12 | T2C0.1063
13 | %
14 | G90
15 | G05
16 | T1
17 | X2.7362Y-5.0526
18 | X2.9638Y-5.0526
19 | T2
20 | X2.5Y-3.0
21 | X2.5Y-5.2
22 | X3.2Y-3.0
23 | X3.2Y-5.2
24 | T0
25 | M30
26 |
--------------------------------------------------------------------------------
/Board/Rev0/RP2040_minimal.pretty/Crystal_SMD_HC49-US.kicad_mod:
--------------------------------------------------------------------------------
1 | (module Crystal_SMD_HC49-US (layer F.Cu) (tedit 5F0C7995)
2 | (descr "SMD Crystal HC-49-SD http://cdn-reichelt.de/documents/datenblatt/B400/xxx-HC49-SMD.pdf, 11.4x4.7mm^2 package")
3 | (tags "SMD SMT crystal")
4 | (attr smd)
5 | (fp_text reference Y1 (at 0 -3.55) (layer F.SilkS)
6 | (effects (font (size 1 1) (thickness 0.15)))
7 | )
8 | (fp_text value ABLS-12.000MHZ-B4-T (at 0 3.55) (layer F.Fab)
9 | (effects (font (size 1 1) (thickness 0.15)))
10 | )
11 | (fp_arc (start 3.015 0) (end 3.015 -2.115) (angle 180) (layer F.Fab) (width 0.1))
12 | (fp_arc (start -3.015 0) (end -3.015 -2.115) (angle -180) (layer F.Fab) (width 0.1))
13 | (fp_line (start 6.8 -2.6) (end -6.8 -2.6) (layer F.CrtYd) (width 0.05))
14 | (fp_line (start 6.8 2.6) (end 6.8 -2.6) (layer F.CrtYd) (width 0.05))
15 | (fp_line (start -6.8 2.6) (end 6.8 2.6) (layer F.CrtYd) (width 0.05))
16 | (fp_line (start -6.8 -2.6) (end -6.8 2.6) (layer F.CrtYd) (width 0.05))
17 | (fp_line (start -6.7 2.55) (end 5.9 2.55) (layer F.SilkS) (width 0.12))
18 | (fp_line (start -6.7 -2.55) (end -6.7 -1.3) (layer F.SilkS) (width 0.12))
19 | (fp_line (start 5.9 -2.55) (end -6.7 -2.55) (layer F.SilkS) (width 0.12))
20 | (fp_line (start -3.015 2.115) (end 3.015 2.115) (layer F.Fab) (width 0.1))
21 | (fp_line (start -3.015 -2.115) (end 3.015 -2.115) (layer F.Fab) (width 0.1))
22 | (fp_line (start 5.7 -2.35) (end -5.7 -2.35) (layer F.Fab) (width 0.1))
23 | (fp_line (start 5.7 2.35) (end 5.7 -2.35) (layer F.Fab) (width 0.1))
24 | (fp_line (start -5.7 2.35) (end 5.7 2.35) (layer F.Fab) (width 0.1))
25 | (fp_line (start -5.7 -2.35) (end -5.7 2.35) (layer F.Fab) (width 0.1))
26 | (fp_text user %R (at 0 0) (layer F.Fab)
27 | (effects (font (size 1 1) (thickness 0.15)))
28 | )
29 | (fp_line (start -6.7 1.3) (end -6.7 2.55) (layer F.SilkS) (width 0.12))
30 | (pad 2 smd rect (at 4.5 0) (size 5.6 2.1) (layers F.Cu F.Paste F.Mask))
31 | (pad 1 smd rect (at -4.5 0) (size 5.6 2.1) (layers F.Cu F.Paste F.Mask))
32 | (model ${KISYS3DMOD}/Crystal.3dshapes/Crystal_SMD_HC49-SD.wrl
33 | (at (xyz 0 0 0))
34 | (scale (xyz 1 1 1))
35 | (rotate (xyz 0 0 0))
36 | )
37 | )
38 |
--------------------------------------------------------------------------------
/Board/Rev0/RP2040_minimal.pretty/USB_Micro-B_Amphenol_10103594-0001LF_Horizontal_modified.kicad_mod:
--------------------------------------------------------------------------------
1 | (module USB_Micro-B_Amphenol_10103594-0001LF_Horizontal_modified (layer F.Cu) (tedit 5F0317C2)
2 | (descr "Micro USB Type B 10103594-0001LF, http://cdn.amphenol-icc.com/media/wysiwyg/files/drawing/10103594.pdf")
3 | (tags "USB USB_B USB_micro USB_OTG")
4 | (attr smd)
5 | (fp_text reference J5 (at -5.365 -2.58 -180) (layer F.SilkS)
6 | (effects (font (size 1 1) (thickness 0.15)))
7 | )
8 | (fp_text value USB_B_Micro (at -0.025 3.32 -180) (layer F.Fab)
9 | (effects (font (size 1 1) (thickness 0.15)))
10 | )
11 | (fp_line (start 4.14 1.7) (end -4.13 1.7) (layer F.CrtYd) (width 0.05))
12 | (fp_line (start 4.14 1.7) (end 4.14 -3.995) (layer F.CrtYd) (width 0.05))
13 | (fp_line (start -4.13 -3.995) (end -4.13 1.7) (layer F.CrtYd) (width 0.05))
14 | (fp_line (start -4.13 -3.995) (end 4.14 -3.995) (layer F.CrtYd) (width 0.05))
15 | (fp_line (start -4.02 1.7) (end 4.02 1.7) (layer Dwgs.User) (width 0.1))
16 | (fp_line (start -3.775 2.22) (end -3.775 -1.98) (layer F.Fab) (width 0.12))
17 | (fp_line (start -2.975 -2.73) (end 3.725 -2.73) (layer F.Fab) (width 0.12))
18 | (fp_line (start 3.725 -2.73) (end 3.725 2.22) (layer F.Fab) (width 0.12))
19 | (fp_line (start 3.725 2.22) (end -3.775 2.22) (layer F.Fab) (width 0.12))
20 | (fp_line (start -3.775 -1.98) (end -2.975 -2.73) (layer F.Fab) (width 0.12))
21 | (fp_line (start -1.325 -3.98) (end -1.725 -4.43) (layer F.SilkS) (width 0.12))
22 | (fp_line (start -1.725 -4.43) (end -0.925 -4.43) (layer F.SilkS) (width 0.12))
23 | (fp_line (start -0.925 -4.43) (end -1.325 -3.98) (layer F.SilkS) (width 0.12))
24 | (fp_line (start 3.825 1.62) (end 3.825 -1.18) (layer F.SilkS) (width 0.12))
25 | (fp_line (start 3.825 -1.18) (end 4.125 -1.18) (layer F.SilkS) (width 0.12))
26 | (fp_line (start 4.125 -1.18) (end 4.125 -2.73) (layer F.SilkS) (width 0.12))
27 | (fp_line (start -3.875 1.62) (end -3.875 -1.18) (layer F.SilkS) (width 0.12))
28 | (fp_line (start -4.175 -1.18) (end -3.875 -1.18) (layer F.SilkS) (width 0.12))
29 | (fp_line (start -4.175 -1.18) (end -4.175 -2.73) (layer F.SilkS) (width 0.12))
30 | (fp_text user %R (at -0.025 -1.13 -180) (layer F.Fab)
31 | (effects (font (size 1 1) (thickness 0.15)))
32 | )
33 | (fp_text user "PCB edge" (at -0.025 1.12 -180) (layer Dwgs.User)
34 | (effects (font (size 0.5 0.5) (thickness 0.075)))
35 | )
36 | (pad 6 smd rect (at 0.9625 0.25 90) (size 2.5 1.425) (layers F.Cu F.Paste F.Mask))
37 | (pad 6 smd rect (at -0.9625 0.25 90) (size 2.5 1.425) (layers F.Cu F.Paste F.Mask))
38 | (pad 6 thru_hole oval (at 2.725 0 90) (size 1.8 1.3) (drill oval 1.2 0.7) (layers *.Cu *.Mask))
39 | (pad 6 thru_hole oval (at -2.725 0 90) (size 1.8 1.3) (drill oval 1.2 0.7) (layers *.Cu *.Mask))
40 | (pad 6 thru_hole oval (at -2.425 -3.03 90) (size 1.45 1.05) (drill oval 1.05 0.65) (layers *.Cu *.Mask))
41 | (pad 5 smd rect (at 1.3 -2.825 90) (size 1.75 0.4) (layers F.Cu F.Paste F.Mask))
42 | (pad 4 smd rect (at 0.65 -2.825 90) (size 1.75 0.4) (layers F.Cu F.Paste F.Mask))
43 | (pad 3 smd rect (at 0 -2.825 90) (size 1.75 0.4) (layers F.Cu F.Paste F.Mask))
44 | (pad 2 smd rect (at -0.65 -2.825 90) (size 1.75 0.4) (layers F.Cu F.Paste F.Mask))
45 | (pad 1 smd rect (at -1.3 -2.825 90) (size 1.75 0.4) (layers F.Cu F.Paste F.Mask))
46 | (pad 6 smd rect (at 2.9 -3.03) (size 2 1.46) (layers F.Cu F.Paste F.Mask))
47 | (pad 6 smd rect (at -2.9 -3.03) (size 2 1.46) (layers F.Cu F.Paste F.Mask))
48 | (pad 6 smd rect (at -2.9875 -1.7) (size 1.825 0.7) (layers F.Cu F.Paste F.Mask))
49 | (pad 6 smd roundrect (at -2.725 -0.425) (size 1.3 3.25) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.296))
50 | (pad 6 smd roundrect (at 2.725 -0.425) (size 1.3 3.25) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.296))
51 | (pad 6 smd rect (at 2.9875 -1.7) (size 1.825 0.7) (layers F.Cu F.Paste F.Mask))
52 | (pad 6 thru_hole oval (at 2.425 -3.03 90) (size 1.45 1.05) (drill oval 1.05 0.65) (layers *.Cu *.Mask))
53 | (model 10103594.stp
54 | (offset (xyz 0 0.2 2.2))
55 | (scale (xyz 1 1 1))
56 | (rotate (xyz 90 0 180))
57 | )
58 | )
59 |
--------------------------------------------------------------------------------
/Board/Rev0/bom.ini:
--------------------------------------------------------------------------------
1 | [BOM_OPTIONS]
2 | ; General BoM options here
3 | ; If 'ignore_dnf' option is set to 1, rows that are not to be fitted on the PCB will not be written to the BoM file
4 | ignore_dnf = 1
5 | ; If 'html_generate_dnf' option is set to 1, also generate a list of components not fitted on the PCB (HTML only)
6 | html_generate_dnf = 1
7 | ; If 'use_alt' option is set to 1, grouped references will be printed in the alternate compressed style eg: R1-R7,R18
8 | use_alt = 0
9 | ; If 'number_rows' option is set to 1, each row in the BoM will be prepended with an incrementing row number
10 | number_rows = 1
11 | ; If 'group_connectors' option is set to 1, connectors with the same footprints will be grouped together, independent of the name of the connector
12 | group_connectors = 1
13 | ; If 'test_regex' option is set to 1, each component group will be tested against a number of regular-expressions (specified, per column, below). If any matches are found, the row is ignored in the output file
14 | test_regex = 1
15 | ; If 'merge_blank_fields' option is set to 1, component groups with blank fields will be merged into the most compatible group, where possible
16 | merge_blank_fields = 1
17 | ; Specify output file name format, %O is the defined output name, %v is the version, %V is the variant name which will be ammended according to 'variant_file_name_format'.
18 | output_file_name = %O_bom_%v%V
19 | ; Specify the variant file name format, this is a unique field as the variant is not always used/specified. When it is unused you will want to strip all of this.
20 | variant_file_name_format = _(%V)
21 | ; Field name used to determine if a particular part is to be fitted
22 | fit_field = Config
23 | ; Complex variant processing (disabled by default)
24 | complex_variant = False
25 | ; Character used to separate reference designators in output
26 | ref_separator = ' '
27 | ; Make a backup of the bom before generating the new one, using the following template
28 | make_backup = %O.tmp
29 | ; Default number of boards to produce if none given on CLI with -n
30 | number_boards = 1
31 | ; Default PCB variant if none given on CLI with -r
32 | board_variant = ['default']
33 | ; Whether to hide headers from output file
34 | hide_headers = False
35 | ; Whether to hide PCB info from output file
36 | hide_pcb_info = False
37 | ; Interpret as a Digikey P/N and link the following field
38 | digikey_link = False
39 |
40 | [IGNORE_COLUMNS]
41 | ; Any column heading that appears here will be excluded from the Generated BoM
42 | ; Titles are case-insensitive
43 | part lib
44 | footprint lib
45 | sheetpath
46 |
47 | [COLUMN_ORDER]
48 | ; Columns will apear in the order they are listed here
49 | ; Titles are case-insensitive
50 | Description
51 | Part
52 | Part Lib
53 | References
54 | Value
55 | Footprint
56 | Footprint Lib
57 | Sheetpath
58 | Quantity Per PCB
59 | Build Quantity
60 | Datasheet
61 |
62 | [GROUP_FIELDS]
63 | ; List of fields used for sorting individual components into groups
64 | ; Components which match (comparing *all* fields) will be grouped together
65 | ; Field names are case-insensitive
66 | Part
67 | Part Lib
68 | Value
69 | Footprint
70 | Footprint Lib
71 |
72 | [COMPONENT_ALIASES]
73 | ; A series of values which are considered to be equivalent for the part name
74 | ; Each line represents a list of equivalent component name values separated by a tab character
75 | ; e.g. 'c c_small cap' will ensure the equivalent capacitor symbols can be grouped together
76 | ; Aliases are case-insensitive
77 | c c_small cap capacitor
78 | r r_small res resistor
79 | sw switch
80 | l l_small inductor
81 | zener zenersmall
82 | d diode d_small
83 |
84 | [JOIN]
85 | ; A list of rules to join the content of fields
86 | ; Each line is a rule, the first name is the field that will receive the data
87 | ; from the other fields
88 | ; Use tab (ASCII 9) as separator
89 | ; Field names are case sensitive
90 |
91 | [REGEX_INCLUDE]
92 | ; A series of regular expressions used to include parts in the BoM
93 | ; If there are any regex defined here, only components that match against ANY of them will be included in the BOM
94 | ; Column names are case-insensitive
95 | ; Format is: "[ColumName] [Regex]" (separated by a tab)
96 |
97 | [COLUMN_RENAME]
98 | ; A list of columns to be renamed
99 | ; Format is: "[ColumName] [NewName]" (separated by a tab)
100 |
101 | [REGEX_EXCLUDE]
102 | ; A series of regular expressions used to exclude parts from the BoM
103 | ; If a component matches ANY of these, it will be excluded from the BoM
104 | ; Column names are case-insensitive
105 | ; Format is: "[ColumName] [Regex]" (separated by a tab
106 | References ^TP[0-9]*
107 | References ^FID
108 | References ^SJ[0-9]*
109 | Part mount.*hole
110 | Part solder.*bridge
111 | Part test.*point
112 | Footprint test.*point
113 | Footprint mount.*hole
114 | Footprint fiducial
115 |
116 |
--------------------------------------------------------------------------------
/Board/Rev0/fp-lib-table:
--------------------------------------------------------------------------------
1 | (fp_lib_table
2 | (lib (name RP2040_minimal)(type KiCad)(uri ${KIPRJMOD}/RP2040_minimal.pretty)(options "")(descr ""))
3 | )
4 |
--------------------------------------------------------------------------------
/Board/Rev0/pico-ice-rescue.dcm:
--------------------------------------------------------------------------------
1 | EESchema-DOCLIB Version 2.0
2 | #
3 | #End Doc Library
4 |
--------------------------------------------------------------------------------
/Board/Rev0/pico-ice-rescue.lib:
--------------------------------------------------------------------------------
1 | EESchema-LIBRARY Version 2.4
2 | #encoding utf-8
3 | #
4 | # USB_B_Micro-Connector
5 | #
6 | DEF USB_B_Micro-Connector J 0 40 Y Y 1 F N
7 | F0 "J" -200 450 50 H V L CNN
8 | F1 "USB_B_Micro-Connector" -200 350 50 H V L CNN
9 | F2 "" 150 -50 50 H I C CNN
10 | F3 "" 150 -50 50 H I C CNN
11 | $FPLIST
12 | USB*
13 | $ENDFPLIST
14 | DRAW
15 | C -150 85 25 0 1 10 F
16 | C -25 135 15 0 1 10 F
17 | S -200 -300 200 300 0 1 10 f
18 | S -5 -300 5 -270 0 1 0 N
19 | S 10 50 -20 20 0 1 10 F
20 | S 200 -205 170 -195 0 1 0 N
21 | S 200 -105 170 -95 0 1 0 N
22 | S 200 -5 170 5 0 1 0 N
23 | S 200 195 170 205 0 1 0 N
24 | P 2 0 1 10 -75 85 25 85 N
25 | P 4 0 1 10 -125 85 -100 85 -50 135 -25 135 N
26 | P 4 0 1 10 -100 85 -75 85 -50 35 0 35 N
27 | P 4 0 1 10 25 110 25 60 75 85 25 110 F
28 | P 5 0 1 0 -170 220 -70 220 -80 190 -160 190 -170 220 F
29 | P 9 0 1 0 -185 230 -185 220 -175 190 -175 180 -65 180 -65 190 -55 220 -55 230 -185 230 N
30 | X VBUS 1 300 200 100 L 50 50 1 1 w
31 | X D- 2 300 -100 100 L 50 50 1 1 P
32 | X D+ 3 300 0 100 L 50 50 1 1 P
33 | X ID 4 300 -200 100 L 50 50 1 1 P
34 | X GND 5 0 -400 100 U 50 50 1 1 w
35 | X Shield 6 -100 -400 100 U 50 50 1 1 P
36 | ENDDRAW
37 | ENDDEF
38 | #
39 | #End Library
40 |
--------------------------------------------------------------------------------
/Board/Rev0/pico-ice.kicad_prl:
--------------------------------------------------------------------------------
1 | {
2 | "board": {
3 | "active_layer": 0,
4 | "active_layer_preset": "",
5 | "auto_track_width": true,
6 | "hidden_nets": [],
7 | "high_contrast_mode": 0,
8 | "net_color_mode": 1,
9 | "opacity": {
10 | "pads": 1.0,
11 | "tracks": 1.0,
12 | "vias": 1.0,
13 | "zones": 1.0
14 | },
15 | "ratsnest_display_mode": 0,
16 | "selection_filter": {
17 | "dimensions": true,
18 | "footprints": true,
19 | "graphics": true,
20 | "keepouts": true,
21 | "lockedItems": true,
22 | "otherItems": true,
23 | "pads": true,
24 | "text": true,
25 | "tracks": true,
26 | "vias": true,
27 | "zones": true
28 | },
29 | "visible_items": [
30 | 0,
31 | 1,
32 | 2,
33 | 3,
34 | 4,
35 | 5,
36 | 8,
37 | 9,
38 | 10,
39 | 12,
40 | 13,
41 | 14,
42 | 15,
43 | 16,
44 | 17,
45 | 18,
46 | 19,
47 | 20,
48 | 21,
49 | 22,
50 | 23,
51 | 24,
52 | 25,
53 | 26,
54 | 27,
55 | 28,
56 | 29,
57 | 30,
58 | 32,
59 | 33,
60 | 34,
61 | 35,
62 | 36
63 | ],
64 | "visible_layers": "0001000_80000000",
65 | "zone_display_mode": 0
66 | },
67 | "meta": {
68 | "filename": "pico-ice.kicad_prl",
69 | "version": 3
70 | },
71 | "project": {
72 | "files": []
73 | }
74 | }
75 |
--------------------------------------------------------------------------------
/Board/Rev0/pico-ice.lib:
--------------------------------------------------------------------------------
1 | EESchema-LIBRARY Version 2.4
2 | #encoding utf-8
3 | #
4 | # RP2040
5 | #
6 | DEF RP2040 U 0 40 Y Y 1 F N
7 | F0 "U" -1150 1950 50 H V C CNN
8 | F1 "RP2040" 950 -1950 50 H V C CNN
9 | F2 "RP2040_minimal:RP2040-QFN-56" -750 0 50 H I C CNN
10 | F3 "" -750 0 50 H I C CNN
11 | DRAW
12 | T 0 0 200 100 0 0 0 "Raspberry Pi" Normal 0 C C
13 | T 0 0 0 100 0 0 0 RP2040 Normal 0 C C
14 | S 1150 1900 -1150 -1900 0 1 10 f
15 | X IOVDD 1 350 2000 100 D 50 50 1 1 W
16 | X IOVDD 10 250 2000 100 D 50 50 1 1 W
17 | X GPIO8 11 1250 500 100 L 50 50 1 1 B
18 | X GPIO9 12 1250 400 100 L 50 50 1 1 B
19 | X GPIO10 13 1250 300 100 L 50 50 1 1 B
20 | X GPIO11 14 1250 200 100 L 50 50 1 1 B
21 | X GPIO12 15 1250 100 100 L 50 50 1 1 B
22 | X GPIO13 16 1250 0 100 L 50 50 1 1 B
23 | X GPIO14 17 1250 -100 100 L 50 50 1 1 B
24 | X GPIO15 18 1250 -200 100 L 50 50 1 1 B
25 | X TESTEN 19 -500 -2000 100 U 50 50 1 1 P
26 | X GPIO0 2 1250 1300 100 L 50 50 1 1 B
27 | X XIN 20 -1250 -100 100 R 50 50 1 1 I
28 | X XOUT 21 -1250 -300 100 R 50 50 1 1 P
29 | X IOVDD 22 150 2000 100 D 50 50 1 1 W
30 | X DVDD 23 -700 2000 100 D 50 50 1 1 W
31 | X SWCLK 24 -1250 -1250 100 R 50 50 1 1 O
32 | X SWD 25 -1250 -1350 100 R 50 50 1 1 B
33 | X RUN 26 -1250 -800 100 R 50 50 1 1 I
34 | X GPIO16 27 1250 -300 100 L 50 50 1 1 B
35 | X GPIO17 28 1250 -400 100 L 50 50 1 1 B
36 | X GPIO18 29 1250 -500 100 L 50 50 1 1 B
37 | X GPIO1 3 1250 1200 100 L 50 50 1 1 B
38 | X GPIO19 30 1250 -600 100 L 50 50 1 1 B
39 | X GPIO20 31 1250 -700 100 L 50 50 1 1 B
40 | X GPIO21 32 1250 -800 100 L 50 50 1 1 B
41 | X IOVDD 33 50 2000 100 D 50 50 1 1 W
42 | X GPIO22 34 1250 -900 100 L 50 50 1 1 B
43 | X GPIO23 35 1250 -1000 100 L 50 50 1 1 B
44 | X GPIO24 36 1250 -1100 100 L 50 50 1 1 B
45 | X GPIO25 37 1250 -1200 100 L 50 50 1 1 B
46 | X GPIO26_ADC0 38 1250 -1400 100 L 50 50 1 1 B
47 | X GPIO27_ADC1 39 1250 -1500 100 L 50 50 1 1 B
48 | X GPIO2 4 1250 1100 100 L 50 50 1 1 B
49 | X GPIO28_ADC2 40 1250 -1600 100 L 50 50 1 1 B
50 | X GPIO29_ADC3 41 1250 -1700 100 L 50 50 1 1 B
51 | X IOVDD 42 -50 2000 100 D 50 50 1 1 W
52 | X ADC_AVDD 43 650 2000 100 D 50 50 1 1 W
53 | X VREG_IN 44 -350 2000 100 D 50 50 1 1 W
54 | X VREG_VOUT 45 -500 2000 100 D 50 50 1 1 w
55 | X USB_DM 46 1250 1600 100 L 50 50 1 1 B
56 | X USB_DP 47 1250 1700 100 L 50 50 1 1 B
57 | X USB_VDD 48 500 2000 100 D 50 50 1 1 W
58 | X IOVDD 49 -150 2000 100 D 50 50 1 1 W
59 | X GPIO3 5 1250 1000 100 L 50 50 1 1 B
60 | X DVDD 50 -800 2000 100 D 50 50 1 1 W
61 | X QSPI_SD3 51 -1250 800 100 R 50 50 1 1 B
62 | X QSPI_SCLK 52 -1250 650 100 R 50 50 1 1 O
63 | X QSPI_SD0 53 -1250 1100 100 R 50 50 1 1 B
64 | X QSPI_SD2 54 -1250 900 100 R 50 50 1 1 B
65 | X QSPI_SD1 55 -1250 1000 100 R 50 50 1 1 B
66 | X QSPI_SS 56 -1250 1250 100 R 50 50 1 1 B
67 | X GND 57 0 -2000 100 U 50 50 1 1 W
68 | X GPIO4 6 1250 900 100 L 50 50 1 1 B
69 | X GPIO5 7 1250 800 100 L 50 50 1 1 B
70 | X GPIO6 8 1250 700 100 L 50 50 1 1 B
71 | X GPIO7 9 1250 600 100 L 50 50 1 1 B
72 | ENDDRAW
73 | ENDDEF
74 | #
75 | #End Library
76 |
--------------------------------------------------------------------------------
/Board/Rev0/pico-ice.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Board/Rev0/pico-ice.pdf
--------------------------------------------------------------------------------
/Board/Rev0/pico-ice.pro:
--------------------------------------------------------------------------------
1 | update=15/01/2021 11:42:37
2 | version=1
3 | last_client=kicad
4 | [general]
5 | version=1
6 | RootSch=
7 | BoardNm=
8 | [pcbnew]
9 | version=1
10 | LastNetListRead=
11 | UseCmpFile=1
12 | PadDrill=0.600000000000
13 | PadDrillOvalY=0.600000000000
14 | PadSizeH=1.500000000000
15 | PadSizeV=1.500000000000
16 | PcbTextSizeV=1.500000000000
17 | PcbTextSizeH=1.500000000000
18 | PcbTextThickness=0.300000000000
19 | ModuleTextSizeV=1.000000000000
20 | ModuleTextSizeH=1.000000000000
21 | ModuleTextSizeThickness=0.150000000000
22 | SolderMaskClearance=0.000000000000
23 | SolderMaskMinWidth=0.000000000000
24 | DrawSegmentWidth=0.200000000000
25 | BoardOutlineThickness=0.100000000000
26 | ModuleOutlineThickness=0.150000000000
27 | [cvpcb]
28 | version=1
29 | NetIExt=net
30 | [eeschema]
31 | version=1
32 | LibDir=
33 | [eeschema/libraries]
34 | [schematic_editor]
35 | version=1
36 | PageLayoutDescrFile=
37 | PlotDirectoryName=
38 | SubpartIdSeparator=0
39 | SubpartFirstId=65
40 | NetFmtName=
41 | SpiceAjustPassiveValues=0
42 | LabSize=50
43 | ERC_TestSimilarLabels=1
44 |
--------------------------------------------------------------------------------
/Board/Rev0/sym-lib-table:
--------------------------------------------------------------------------------
1 | (sym_lib_table
2 | (lib (name "pico-ice")(type "Legacy")(uri "E:/Data/local_github/pico-ice/Board/Rev0/pico-ice.lib")(options "")(descr ""))
3 | (lib (name "pico-ice_minimal")(type "Legacy")(uri "E:/Data/local_github/pico-ice/Board/Rev0/pico-ice_minimal.lib")(options "")(descr ""))
4 | (lib (name "UPduino_v3.0")(type "Legacy")(uri "E:/Data/local_github/UPduino-v3.0/Board/v3.01/UPduino_v3.0.lib")(options "")(descr ""))
5 | )
6 |
--------------------------------------------------------------------------------
/Board/Rev1/Fabrication/Gerber/pico-ice-B_Paste.gbr:
--------------------------------------------------------------------------------
1 | G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,(6.0.5)*
2 | G04 #@! TF.CreationDate,2022-10-28T12:11:28-07:00*
3 | G04 #@! TF.ProjectId,pico-ice,7069636f-2d69-4636-952e-6b696361645f,REV1*
4 | G04 #@! TF.SameCoordinates,Original*
5 | G04 #@! TF.FileFunction,Paste,Bot*
6 | G04 #@! TF.FilePolarity,Positive*
7 | %FSLAX46Y46*%
8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
9 | G04 Created by KiCad (PCBNEW (6.0.5)) date 2022-10-28 12:11:28*
10 | %MOMM*%
11 | %LPD*%
12 | G01*
13 | G04 APERTURE LIST*
14 | G04 Aperture macros list*
15 | %AMRoundRect*
16 | 0 Rectangle with rounded corners*
17 | 0 $1 Rounding radius*
18 | 0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
19 | 0 Add a 4 corners polygon primitive as box body*
20 | 4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
21 | 0 Add four circle primitives for the rounded corners*
22 | 1,1,$1+$1,$2,$3*
23 | 1,1,$1+$1,$4,$5*
24 | 1,1,$1+$1,$6,$7*
25 | 1,1,$1+$1,$8,$9*
26 | 0 Add four rect primitives between the rounded corners*
27 | 20,1,$1+$1,$2,$3,$4,$5,0*
28 | 20,1,$1+$1,$4,$5,$6,$7,0*
29 | 20,1,$1+$1,$6,$7,$8,$9,0*
30 | 20,1,$1+$1,$8,$9,$2,$3,0*%
31 | G04 Aperture macros list end*
32 | %ADD10RoundRect,0.135000X-0.185000X0.135000X-0.185000X-0.135000X0.185000X-0.135000X0.185000X0.135000X0*%
33 | %ADD11RoundRect,0.140000X-0.170000X0.140000X-0.170000X-0.140000X0.170000X-0.140000X0.170000X0.140000X0*%
34 | %ADD12R,0.600000X0.450000*%
35 | %ADD13RoundRect,0.135000X-0.135000X-0.185000X0.135000X-0.185000X0.135000X0.185000X-0.135000X0.185000X0*%
36 | %ADD14RoundRect,0.140000X0.170000X-0.140000X0.170000X0.140000X-0.170000X0.140000X-0.170000X-0.140000X0*%
37 | %ADD15RoundRect,0.140000X0.140000X0.170000X-0.140000X0.170000X-0.140000X-0.170000X0.140000X-0.170000X0*%
38 | %ADD16RoundRect,0.140000X-0.140000X-0.170000X0.140000X-0.170000X0.140000X0.170000X-0.140000X0.170000X0*%
39 | %ADD17RoundRect,0.150000X-0.150000X0.650000X-0.150000X-0.650000X0.150000X-0.650000X0.150000X0.650000X0*%
40 | %ADD18RoundRect,0.150000X0.650000X0.150000X-0.650000X0.150000X-0.650000X-0.150000X0.650000X-0.150000X0*%
41 | %ADD19RoundRect,0.150000X-0.150000X0.825000X-0.150000X-0.825000X0.150000X-0.825000X0.150000X0.825000X0*%
42 | %ADD20RoundRect,0.135000X0.185000X-0.135000X0.185000X0.135000X-0.185000X0.135000X-0.185000X-0.135000X0*%
43 | %ADD21RoundRect,0.150000X0.150000X-0.512500X0.150000X0.512500X-0.150000X0.512500X-0.150000X-0.512500X0*%
44 | %ADD22R,0.600000X0.700000*%
45 | %ADD23RoundRect,0.150000X-0.150000X0.587500X-0.150000X-0.587500X0.150000X-0.587500X0.150000X0.587500X0*%
46 | %ADD24RoundRect,0.150000X-0.150000X0.512500X-0.150000X-0.512500X0.150000X-0.512500X0.150000X0.512500X0*%
47 | G04 APERTURE END LIST*
48 | D10*
49 | X78054200Y-119731600D03*
50 | X78054200Y-120751600D03*
51 | D11*
52 | X66710718Y-87691471D03*
53 | X66710718Y-88651471D03*
54 | D12*
55 | X73549800Y-90678000D03*
56 | X75649800Y-90678000D03*
57 | D13*
58 | X72779312Y-79840277D03*
59 | X73799312Y-79840277D03*
60 | D14*
61 | X72567800Y-117370800D03*
62 | X72567800Y-116410800D03*
63 | D15*
64 | X77340400Y-104495600D03*
65 | X76380400Y-104495600D03*
66 | D11*
67 | X74828400Y-103253600D03*
68 | X74828400Y-104213600D03*
69 | D16*
70 | X70640000Y-101955600D03*
71 | X71600000Y-101955600D03*
72 | D17*
73 | X67818000Y-80474000D03*
74 | X69088000Y-80474000D03*
75 | X70358000Y-80474000D03*
76 | X71628000Y-80474000D03*
77 | X71628000Y-87674000D03*
78 | X70358000Y-87674000D03*
79 | X69088000Y-87674000D03*
80 | X67818000Y-87674000D03*
81 | D18*
82 | X75659800Y-120751600D03*
83 | X75659800Y-122021600D03*
84 | X75659800Y-123291600D03*
85 | X75659800Y-124561600D03*
86 | X68459800Y-124561600D03*
87 | X68459800Y-123291600D03*
88 | X68459800Y-122021600D03*
89 | X68459800Y-120751600D03*
90 | D15*
91 | X73530400Y-89204800D03*
92 | X72570400Y-89204800D03*
93 | D11*
94 | X70586600Y-99418200D03*
95 | X70586600Y-100378200D03*
96 | D15*
97 | X77315000Y-97993200D03*
98 | X76355000Y-97993200D03*
99 | D19*
100 | X73533000Y-82320000D03*
101 | X74803000Y-82320000D03*
102 | X76073000Y-82320000D03*
103 | X77343000Y-82320000D03*
104 | X77343000Y-87270000D03*
105 | X76073000Y-87270000D03*
106 | X74803000Y-87270000D03*
107 | X73533000Y-87270000D03*
108 | D20*
109 | X67818000Y-78310200D03*
110 | X67818000Y-77290200D03*
111 | D21*
112 | X77327800Y-101619900D03*
113 | X76377800Y-101619900D03*
114 | X75427800Y-101619900D03*
115 | X75427800Y-99344900D03*
116 | X77327800Y-99344900D03*
117 | D20*
118 | X73837800Y-104243600D03*
119 | X73837800Y-103223600D03*
120 | X77139800Y-120753600D03*
121 | X77139800Y-119733600D03*
122 | D16*
123 | X68531800Y-119278400D03*
124 | X69491800Y-119278400D03*
125 | D22*
126 | X77306400Y-103251000D03*
127 | X75906400Y-103251000D03*
128 | D23*
129 | X75148400Y-76608700D03*
130 | X77048400Y-76608700D03*
131 | X76098400Y-78483700D03*
132 | D24*
133 | X70652600Y-103408900D03*
134 | X71602600Y-103408900D03*
135 | X72552600Y-103408900D03*
136 | X72552600Y-105683900D03*
137 | X70652600Y-105683900D03*
138 | D14*
139 | X69392800Y-106144000D03*
140 | X69392800Y-105184000D03*
141 | D10*
142 | X73507600Y-76147200D03*
143 | X73507600Y-77167200D03*
144 | M02*
145 |
--------------------------------------------------------------------------------
/Board/Rev1/Fabrication/Gerber/pico-ice-Edge_Cuts.gbr:
--------------------------------------------------------------------------------
1 | G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,(6.0.5)*
2 | G04 #@! TF.CreationDate,2022-10-28T12:11:28-07:00*
3 | G04 #@! TF.ProjectId,pico-ice,7069636f-2d69-4636-952e-6b696361645f,REV1*
4 | G04 #@! TF.SameCoordinates,Original*
5 | G04 #@! TF.FileFunction,Profile,NP*
6 | %FSLAX46Y46*%
7 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
8 | G04 Created by KiCad (PCBNEW (6.0.5)) date 2022-10-28 12:11:28*
9 | %MOMM*%
10 | %LPD*%
11 | G01*
12 | G04 APERTURE LIST*
13 | G04 #@! TA.AperFunction,Profile*
14 | %ADD10C,0.127000*%
15 | G04 #@! TD*
16 | G04 APERTURE END LIST*
17 | D10*
18 | X80010000Y-134620000D02*
19 | X64770000Y-134620000D01*
20 | X83820000Y-77470000D02*
21 | X83820000Y-130810000D01*
22 | X64770000Y-73660000D02*
23 | X80010000Y-73660000D01*
24 | X60960000Y-130810000D02*
25 | X60960000Y-77470000D01*
26 | X60960000Y-130810000D02*
27 | G75*
28 | G03*
29 | X64770000Y-134620000I3919500J109500D01*
30 | G01*
31 | X64770000Y-73660000D02*
32 | G75*
33 | G03*
34 | X60960000Y-77470000I-55700J-3754300D01*
35 | G01*
36 | X83820000Y-77470000D02*
37 | G75*
38 | G03*
39 | X80010000Y-73660000I-3754300J55700D01*
40 | G01*
41 | X80010000Y-134620000D02*
42 | G75*
43 | G03*
44 | X83820000Y-130810000I-109500J3919500D01*
45 | G01*
46 | M02*
47 |
--------------------------------------------------------------------------------
/Board/Rev1/Fabrication/Gerber/pico-ice-NPTH.drl:
--------------------------------------------------------------------------------
1 | M48
2 | ; DRILL file {KiCad (6.0.5)} date Fri Oct 28 12:11:35 2022
3 | ; FORMAT={-:-/ absolute / inch / decimal}
4 | ; #@! TF.CreationDate,2022-10-28T12:11:35-07:00
5 | ; #@! TF.GenerationSoftware,Kicad,Pcbnew,(6.0.5)
6 | ; #@! TF.FileFunction,NonPlated,1,4,NPTH
7 | FMAT,2
8 | INCH
9 | ; #@! TA.AperFunction,NonPlated,NPTH,ComponentDrill
10 | T1C0.0256
11 | ; #@! TA.AperFunction,NonPlated,NPTH,ComponentDrill
12 | T2C0.1063
13 | %
14 | G90
15 | G05
16 | T1
17 | X2.7362Y-5.0526
18 | X2.9638Y-5.0526
19 | T2
20 | X2.5Y-3.0
21 | X2.5Y-5.2
22 | X3.2Y-3.0
23 | X3.2Y-5.2
24 | T0
25 | M30
26 |
--------------------------------------------------------------------------------
/Board/Rev1/Fabrication/pico-ice-B_Fab.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Board/Rev1/Fabrication/pico-ice-B_Fab.pdf
--------------------------------------------------------------------------------
/Board/Rev1/Fabrication/pico-ice-F_Cu.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Board/Rev1/Fabrication/pico-ice-F_Cu.pdf
--------------------------------------------------------------------------------
/Board/Rev1/Fabrication/pico-ice-F_Fab.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Board/Rev1/Fabrication/pico-ice-F_Fab.pdf
--------------------------------------------------------------------------------
/Board/Rev1/Fabrication/pico-ice-all-pos.csv:
--------------------------------------------------------------------------------
1 | Designator,Mid X,Mid Y,Layer,Rotation
2 | C4,-11.6078,15.1892,bottom,90
3 | C7,-10.16,30.1244,bottom,0
4 | C8,-8.0518,12.8016,bottom,0
5 | C9,-15.9004,27.5844,bottom,180
6 | C13,-15.875,34.0868,bottom,180
7 | C26,-5.750718,43.908529,bottom,-90
8 | C27,-9.6266,32.1818,bottom,-90
9 | C36,-13.8684,28.3464,bottom,-90
10 | C37,-8.4328,26.416,bottom,90
11 | C42,-12.0904,42.8752,bottom,180
12 | D4,-13.6398,41.402,bottom,0
13 | D6,-15.6464,28.829,bottom,180
14 | FID2,-9.255918,54.830529,bottom,180
15 | FID4,-17.526,-0.762,bottom,180
16 | FID6,-5.334,-0.762,bottom,180
17 | Q1,-15.1384,54.5338,bottom,-90
18 | R2,-16.1798,11.8364,bottom,90
19 | R3,-17.0942,11.8384,bottom,-90
20 | R6,-12.8778,28.3464,bottom,90
21 | R8,-6.858,54.2798,bottom,90
22 | R13,-12.5476,55.4228,bottom,-90
23 | R15,-12.329312,52.239723,bottom,0
24 | U1,-10.6426,27.5336,bottom,-90
25 | U2,-11.0998,9.4234,bottom,180
26 | U4,-15.4178,31.5976,bottom,90
27 | U5,-14.478,47.285,bottom,-90
28 | U8,-8.763,48.006,bottom,-90
29 | C1,14.6558,26.7208,top,90
30 | C2,9.8298,27.9908,top,90
31 | C3,16.1798,13.335,top,0
32 | C5,10.541,24.384,top,90
33 | C6,9.6774,24.384,top,90
34 | C10,8.128,13.2842,top,-90
35 | C11,7.239,13.2842,top,-90
36 | C12,16.1036,15.3416,top,-90
37 | C15,16.7132,19.2024,top,-90
38 | C16,11.4046,24.384,top,90
39 | C17,6.1976,19.7612,top,180
40 | C18,6.6548,15.4178,top,-90
41 | C19,9.017,13.2842,top,-90
42 | C21,8.636,42.8752,top,180
43 | C22,8.636,43.815,top,180
44 | C24,15.758318,39.057129,top,-90
45 | C25,16.723518,39.057129,top,-90
46 | C28,16.0528,43.18,top,180
47 | C29,7.0866,33.147,top,180
48 | C30,7.0866,32.1818,top,180
49 | C31,15.494,41.3232,top,90
50 | C32,12.192,53.7972,top,0
51 | C33,11.6052,42.8752,top,0
52 | C34,11.5824,43.8404,top,0
53 | D1,16.6878,41.5544,top,90
54 | D2,9.779,55.88,top,0
55 | D3,6.604,55.88,top,-90
56 | D5,16.1544,8.128,top,-90
57 | FID1,13.243718,45.330929,top,0
58 | FID3,17.526,-0.762,top,0
59 | FID5,5.334,-0.762,top,0
60 | J1,11.43,1.143,top,0
61 | J2,1.27,52.07,top,0
62 | J3,19.05,52.07,top,0
63 | PTC1,16.1544,11.2776,top,-90
64 | R1,9.8298,26.162,top,90
65 | R4,11.0744,12.7,top,90
66 | R5,10.166401,12.7,top,90
67 | R7,11.643518,32.199129,top,0
68 | R9,16.7132,21.4122,top,-90
69 | R10,13.6906,11.0998,top,0
70 | R11,11.110118,45.254729,top,90
71 | R12,6.1976,18.8722,top,0
72 | R14,5.207,55.88,top,90
73 | R16,8.1534,24.384,top,90
74 | R17,10.5156,53.8226,top,90
75 | R18,9.398,53.8226,top,90
76 | R19,8.3058,53.8226,top,90
77 | R20,13.6906,8.6614,top,180
78 | R21,15.6718,52.5272,top,0
79 | R22,13.6906,9.8806,top,180
80 | R23,6.1956,17.9578,top,0
81 | R24,13.6887,7.4422,top,0
82 | R25,15.150718,32.4612,top,0
83 | RN1,8.874918,48.328129,top,90
84 | SW1,7.366,9.271,top,-90
85 | SW2,15.621,55.626,top,0
86 | U3,11.4046,18.6944,top,180
87 | U6,10.3632,37.7952,top,90
88 | Y1,12.1666,27.1272,top,-90
89 |
--------------------------------------------------------------------------------
/Board/Rev1/RP2040_minimal.pretty/Crystal_SMD_HC49-US.kicad_mod:
--------------------------------------------------------------------------------
1 | (module Crystal_SMD_HC49-US (layer F.Cu) (tedit 5F0C7995)
2 | (descr "SMD Crystal HC-49-SD http://cdn-reichelt.de/documents/datenblatt/B400/xxx-HC49-SMD.pdf, 11.4x4.7mm^2 package")
3 | (tags "SMD SMT crystal")
4 | (attr smd)
5 | (fp_text reference Y1 (at 0 -3.55) (layer F.SilkS)
6 | (effects (font (size 1 1) (thickness 0.15)))
7 | )
8 | (fp_text value ABLS-12.000MHZ-B4-T (at 0 3.55) (layer F.Fab)
9 | (effects (font (size 1 1) (thickness 0.15)))
10 | )
11 | (fp_arc (start 3.015 0) (end 3.015 -2.115) (angle 180) (layer F.Fab) (width 0.1))
12 | (fp_arc (start -3.015 0) (end -3.015 -2.115) (angle -180) (layer F.Fab) (width 0.1))
13 | (fp_line (start 6.8 -2.6) (end -6.8 -2.6) (layer F.CrtYd) (width 0.05))
14 | (fp_line (start 6.8 2.6) (end 6.8 -2.6) (layer F.CrtYd) (width 0.05))
15 | (fp_line (start -6.8 2.6) (end 6.8 2.6) (layer F.CrtYd) (width 0.05))
16 | (fp_line (start -6.8 -2.6) (end -6.8 2.6) (layer F.CrtYd) (width 0.05))
17 | (fp_line (start -6.7 2.55) (end 5.9 2.55) (layer F.SilkS) (width 0.12))
18 | (fp_line (start -6.7 -2.55) (end -6.7 -1.3) (layer F.SilkS) (width 0.12))
19 | (fp_line (start 5.9 -2.55) (end -6.7 -2.55) (layer F.SilkS) (width 0.12))
20 | (fp_line (start -3.015 2.115) (end 3.015 2.115) (layer F.Fab) (width 0.1))
21 | (fp_line (start -3.015 -2.115) (end 3.015 -2.115) (layer F.Fab) (width 0.1))
22 | (fp_line (start 5.7 -2.35) (end -5.7 -2.35) (layer F.Fab) (width 0.1))
23 | (fp_line (start 5.7 2.35) (end 5.7 -2.35) (layer F.Fab) (width 0.1))
24 | (fp_line (start -5.7 2.35) (end 5.7 2.35) (layer F.Fab) (width 0.1))
25 | (fp_line (start -5.7 -2.35) (end -5.7 2.35) (layer F.Fab) (width 0.1))
26 | (fp_text user %R (at 0 0) (layer F.Fab)
27 | (effects (font (size 1 1) (thickness 0.15)))
28 | )
29 | (fp_line (start -6.7 1.3) (end -6.7 2.55) (layer F.SilkS) (width 0.12))
30 | (pad 2 smd rect (at 4.5 0) (size 5.6 2.1) (layers F.Cu F.Paste F.Mask))
31 | (pad 1 smd rect (at -4.5 0) (size 5.6 2.1) (layers F.Cu F.Paste F.Mask))
32 | (model ${KISYS3DMOD}/Crystal.3dshapes/Crystal_SMD_HC49-SD.wrl
33 | (at (xyz 0 0 0))
34 | (scale (xyz 1 1 1))
35 | (rotate (xyz 0 0 0))
36 | )
37 | )
38 |
--------------------------------------------------------------------------------
/Board/Rev1/RP2040_minimal.pretty/USB_Micro-B_Amphenol_10103594-0001LF_Horizontal_modified.kicad_mod:
--------------------------------------------------------------------------------
1 | (module USB_Micro-B_Amphenol_10103594-0001LF_Horizontal_modified (layer F.Cu) (tedit 5F0317C2)
2 | (descr "Micro USB Type B 10103594-0001LF, http://cdn.amphenol-icc.com/media/wysiwyg/files/drawing/10103594.pdf")
3 | (tags "USB USB_B USB_micro USB_OTG")
4 | (attr smd)
5 | (fp_text reference J5 (at -5.365 -2.58 -180) (layer F.SilkS)
6 | (effects (font (size 1 1) (thickness 0.15)))
7 | )
8 | (fp_text value USB_B_Micro (at -0.025 3.32 -180) (layer F.Fab)
9 | (effects (font (size 1 1) (thickness 0.15)))
10 | )
11 | (fp_line (start 4.14 1.7) (end -4.13 1.7) (layer F.CrtYd) (width 0.05))
12 | (fp_line (start 4.14 1.7) (end 4.14 -3.995) (layer F.CrtYd) (width 0.05))
13 | (fp_line (start -4.13 -3.995) (end -4.13 1.7) (layer F.CrtYd) (width 0.05))
14 | (fp_line (start -4.13 -3.995) (end 4.14 -3.995) (layer F.CrtYd) (width 0.05))
15 | (fp_line (start -4.02 1.7) (end 4.02 1.7) (layer Dwgs.User) (width 0.1))
16 | (fp_line (start -3.775 2.22) (end -3.775 -1.98) (layer F.Fab) (width 0.12))
17 | (fp_line (start -2.975 -2.73) (end 3.725 -2.73) (layer F.Fab) (width 0.12))
18 | (fp_line (start 3.725 -2.73) (end 3.725 2.22) (layer F.Fab) (width 0.12))
19 | (fp_line (start 3.725 2.22) (end -3.775 2.22) (layer F.Fab) (width 0.12))
20 | (fp_line (start -3.775 -1.98) (end -2.975 -2.73) (layer F.Fab) (width 0.12))
21 | (fp_line (start -1.325 -3.98) (end -1.725 -4.43) (layer F.SilkS) (width 0.12))
22 | (fp_line (start -1.725 -4.43) (end -0.925 -4.43) (layer F.SilkS) (width 0.12))
23 | (fp_line (start -0.925 -4.43) (end -1.325 -3.98) (layer F.SilkS) (width 0.12))
24 | (fp_line (start 3.825 1.62) (end 3.825 -1.18) (layer F.SilkS) (width 0.12))
25 | (fp_line (start 3.825 -1.18) (end 4.125 -1.18) (layer F.SilkS) (width 0.12))
26 | (fp_line (start 4.125 -1.18) (end 4.125 -2.73) (layer F.SilkS) (width 0.12))
27 | (fp_line (start -3.875 1.62) (end -3.875 -1.18) (layer F.SilkS) (width 0.12))
28 | (fp_line (start -4.175 -1.18) (end -3.875 -1.18) (layer F.SilkS) (width 0.12))
29 | (fp_line (start -4.175 -1.18) (end -4.175 -2.73) (layer F.SilkS) (width 0.12))
30 | (fp_text user %R (at -0.025 -1.13 -180) (layer F.Fab)
31 | (effects (font (size 1 1) (thickness 0.15)))
32 | )
33 | (fp_text user "PCB edge" (at -0.025 1.12 -180) (layer Dwgs.User)
34 | (effects (font (size 0.5 0.5) (thickness 0.075)))
35 | )
36 | (pad 6 smd rect (at 0.9625 0.25 90) (size 2.5 1.425) (layers F.Cu F.Paste F.Mask))
37 | (pad 6 smd rect (at -0.9625 0.25 90) (size 2.5 1.425) (layers F.Cu F.Paste F.Mask))
38 | (pad 6 thru_hole oval (at 2.725 0 90) (size 1.8 1.3) (drill oval 1.2 0.7) (layers *.Cu *.Mask))
39 | (pad 6 thru_hole oval (at -2.725 0 90) (size 1.8 1.3) (drill oval 1.2 0.7) (layers *.Cu *.Mask))
40 | (pad 6 thru_hole oval (at -2.425 -3.03 90) (size 1.45 1.05) (drill oval 1.05 0.65) (layers *.Cu *.Mask))
41 | (pad 5 smd rect (at 1.3 -2.825 90) (size 1.75 0.4) (layers F.Cu F.Paste F.Mask))
42 | (pad 4 smd rect (at 0.65 -2.825 90) (size 1.75 0.4) (layers F.Cu F.Paste F.Mask))
43 | (pad 3 smd rect (at 0 -2.825 90) (size 1.75 0.4) (layers F.Cu F.Paste F.Mask))
44 | (pad 2 smd rect (at -0.65 -2.825 90) (size 1.75 0.4) (layers F.Cu F.Paste F.Mask))
45 | (pad 1 smd rect (at -1.3 -2.825 90) (size 1.75 0.4) (layers F.Cu F.Paste F.Mask))
46 | (pad 6 smd rect (at 2.9 -3.03) (size 2 1.46) (layers F.Cu F.Paste F.Mask))
47 | (pad 6 smd rect (at -2.9 -3.03) (size 2 1.46) (layers F.Cu F.Paste F.Mask))
48 | (pad 6 smd rect (at -2.9875 -1.7) (size 1.825 0.7) (layers F.Cu F.Paste F.Mask))
49 | (pad 6 smd roundrect (at -2.725 -0.425) (size 1.3 3.25) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.296))
50 | (pad 6 smd roundrect (at 2.725 -0.425) (size 1.3 3.25) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.296))
51 | (pad 6 smd rect (at 2.9875 -1.7) (size 1.825 0.7) (layers F.Cu F.Paste F.Mask))
52 | (pad 6 thru_hole oval (at 2.425 -3.03 90) (size 1.45 1.05) (drill oval 1.05 0.65) (layers *.Cu *.Mask))
53 | (model 10103594.stp
54 | (offset (xyz 0 0.2 2.2))
55 | (scale (xyz 1 1 1))
56 | (rotate (xyz 90 0 180))
57 | )
58 | )
59 |
--------------------------------------------------------------------------------
/Board/Rev1/bom.ini:
--------------------------------------------------------------------------------
1 | [BOM_OPTIONS]
2 | ; General BoM options here
3 | ; If 'ignore_dnf' option is set to 1, rows that are not to be fitted on the PCB will not be written to the BoM file
4 | ignore_dnf = 1
5 | ; If 'html_generate_dnf' option is set to 1, also generate a list of components not fitted on the PCB (HTML only)
6 | html_generate_dnf = 1
7 | ; If 'use_alt' option is set to 1, grouped references will be printed in the alternate compressed style eg: R1-R7,R18
8 | use_alt = 0
9 | ; If 'number_rows' option is set to 1, each row in the BoM will be prepended with an incrementing row number
10 | number_rows = 1
11 | ; If 'group_connectors' option is set to 1, connectors with the same footprints will be grouped together, independent of the name of the connector
12 | group_connectors = 1
13 | ; If 'test_regex' option is set to 1, each component group will be tested against a number of regular-expressions (specified, per column, below). If any matches are found, the row is ignored in the output file
14 | test_regex = 1
15 | ; If 'merge_blank_fields' option is set to 1, component groups with blank fields will be merged into the most compatible group, where possible
16 | merge_blank_fields = 1
17 | ; Specify output file name format, %O is the defined output name, %v is the version, %V is the variant name which will be ammended according to 'variant_file_name_format'.
18 | output_file_name = %O_bom_%v%V
19 | ; Specify the variant file name format, this is a unique field as the variant is not always used/specified. When it is unused you will want to strip all of this.
20 | variant_file_name_format = _(%V)
21 | ; Field name used to determine if a particular part is to be fitted
22 | fit_field = Config
23 | ; Complex variant processing (disabled by default)
24 | complex_variant = False
25 | ; Character used to separate reference designators in output
26 | ref_separator = ' '
27 | ; Make a backup of the bom before generating the new one, using the following template
28 | make_backup = %O.tmp
29 | ; Default number of boards to produce if none given on CLI with -n
30 | number_boards = 1
31 | ; Default PCB variant if none given on CLI with -r
32 | board_variant = ['default']
33 | ; Whether to hide headers from output file
34 | hide_headers = False
35 | ; Whether to hide PCB info from output file
36 | hide_pcb_info = False
37 | ; Interpret as a Digikey P/N and link the following field
38 | digikey_link = False
39 |
40 | [IGNORE_COLUMNS]
41 | ; Any column heading that appears here will be excluded from the Generated BoM
42 | ; Titles are case-insensitive
43 | part lib
44 | footprint lib
45 | sheetpath
46 | Digi-Key Part Number
47 | Comment
48 | part
49 |
50 | [COLUMN_ORDER]
51 | ; Columns will apear in the order they are listed here
52 | ; Titles are case-insensitive
53 | ;Description
54 | ;ki_description
55 | References
56 | ;Part
57 | ;Part Lib
58 | Value
59 | Footprint
60 | Footprint Lib
61 | Sheetpath
62 | Quantity Per PCB
63 | ;Build Quantity
64 | Datasheet
65 |
66 | [GROUP_FIELDS]
67 | ; List of fields used for sorting individual components into groups
68 | ; Components which match (comparing *all* fields) will be grouped together
69 | ; Field names are case-insensitive
70 | Part
71 | Part Lib
72 | Value
73 | Footprint
74 | Footprint Lib
75 |
76 | [COMPONENT_ALIASES]
77 | ; A series of values which are considered to be equivalent for the part name
78 | ; Each line represents a list of equivalent component name values separated by a tab character
79 | ; e.g. 'c c_small cap' will ensure the equivalent capacitor symbols can be grouped together
80 | ; Aliases are case-insensitive
81 | c c_small cap capacitor
82 | r r_small res resistor
83 | sw switch
84 | l l_small inductor
85 | zener zenersmall
86 | d diode d_small
87 |
88 | [JOIN]
89 | ; A list of rules to join the content of fields
90 | ; Each line is a rule, the first name is the field that will receive the data
91 | ; from the other fields
92 | ; Use tab (ASCII 9) as separator
93 | ; Field names are case sensitive
94 |
95 | [REGEX_INCLUDE]
96 | ; A series of regular expressions used to include parts in the BoM
97 | ; If there are any regex defined here, only components that match against ANY of them will be included in the BOM
98 | ; Column names are case-insensitive
99 | ; Format is: "[ColumName] [Regex]" (separated by a tab)
100 |
101 | [COLUMN_RENAME]
102 | ; A list of columns to be renamed
103 | ; Format is: "[ColumName] [NewName]" (separated by a tab)
104 |
105 | [REGEX_EXCLUDE]
106 | ; A series of regular expressions used to exclude parts from the BoM
107 | ; If a component matches ANY of these, it will be excluded from the BoM
108 | ; Column names are case-insensitive
109 | ; Format is: "[ColumName] [Regex]" (separated by a tab
110 | References ^TP[0-9]*
111 | References ^FID
112 | References ^SJ[0-9]*
113 | Part mount.*hole
114 | Part solder.*bridge
115 | Part test.*point
116 | Footprint test.*point
117 | Footprint mount.*hole
118 | Footprint fiducial
119 |
120 |
--------------------------------------------------------------------------------
/Board/Rev1/bom/BoM_pico-ice.csv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Board/Rev1/bom/BoM_pico-ice.csv
--------------------------------------------------------------------------------
/Board/Rev1/fp-lib-table:
--------------------------------------------------------------------------------
1 | (fp_lib_table
2 | (lib (name RP2040_minimal)(type KiCad)(uri ${KIPRJMOD}/RP2040_minimal.pretty)(options "")(descr ""))
3 | )
4 |
--------------------------------------------------------------------------------
/Board/Rev1/pico-ice-rescue.dcm:
--------------------------------------------------------------------------------
1 | EESchema-DOCLIB Version 2.0
2 | #
3 | #End Doc Library
4 |
--------------------------------------------------------------------------------
/Board/Rev1/pico-ice-rescue.lib:
--------------------------------------------------------------------------------
1 | EESchema-LIBRARY Version 2.4
2 | #encoding utf-8
3 | #
4 | # USB_B_Micro-Connector
5 | #
6 | DEF USB_B_Micro-Connector J 0 40 Y Y 1 F N
7 | F0 "J" -200 450 50 H V L CNN
8 | F1 "USB_B_Micro-Connector" -200 350 50 H V L CNN
9 | F2 "" 150 -50 50 H I C CNN
10 | F3 "" 150 -50 50 H I C CNN
11 | $FPLIST
12 | USB*
13 | $ENDFPLIST
14 | DRAW
15 | C -150 85 25 0 1 10 F
16 | C -25 135 15 0 1 10 F
17 | S -200 -300 200 300 0 1 10 f
18 | S -5 -300 5 -270 0 1 0 N
19 | S 10 50 -20 20 0 1 10 F
20 | S 200 -205 170 -195 0 1 0 N
21 | S 200 -105 170 -95 0 1 0 N
22 | S 200 -5 170 5 0 1 0 N
23 | S 200 195 170 205 0 1 0 N
24 | P 2 0 1 10 -75 85 25 85 N
25 | P 4 0 1 10 -125 85 -100 85 -50 135 -25 135 N
26 | P 4 0 1 10 -100 85 -75 85 -50 35 0 35 N
27 | P 4 0 1 10 25 110 25 60 75 85 25 110 F
28 | P 5 0 1 0 -170 220 -70 220 -80 190 -160 190 -170 220 F
29 | P 9 0 1 0 -185 230 -185 220 -175 190 -175 180 -65 180 -65 190 -55 220 -55 230 -185 230 N
30 | X VBUS 1 300 200 100 L 50 50 1 1 w
31 | X D- 2 300 -100 100 L 50 50 1 1 P
32 | X D+ 3 300 0 100 L 50 50 1 1 P
33 | X ID 4 300 -200 100 L 50 50 1 1 P
34 | X GND 5 0 -400 100 U 50 50 1 1 w
35 | X Shield 6 -100 -400 100 U 50 50 1 1 P
36 | ENDDRAW
37 | ENDDEF
38 | #
39 | #End Library
40 |
--------------------------------------------------------------------------------
/Board/Rev1/pico-ice.kicad_prl:
--------------------------------------------------------------------------------
1 | {
2 | "board": {
3 | "active_layer": 36,
4 | "active_layer_preset": "",
5 | "auto_track_width": true,
6 | "hidden_nets": [],
7 | "high_contrast_mode": 0,
8 | "net_color_mode": 1,
9 | "opacity": {
10 | "pads": 1.0,
11 | "tracks": 1.0,
12 | "vias": 1.0,
13 | "zones": 0.49000000953674316
14 | },
15 | "ratsnest_display_mode": 0,
16 | "selection_filter": {
17 | "dimensions": true,
18 | "footprints": true,
19 | "graphics": true,
20 | "keepouts": true,
21 | "lockedItems": true,
22 | "otherItems": true,
23 | "pads": true,
24 | "text": true,
25 | "tracks": true,
26 | "vias": true,
27 | "zones": true
28 | },
29 | "visible_items": [
30 | 0,
31 | 1,
32 | 2,
33 | 3,
34 | 4,
35 | 5,
36 | 8,
37 | 9,
38 | 10,
39 | 11,
40 | 12,
41 | 13,
42 | 14,
43 | 15,
44 | 16,
45 | 17,
46 | 18,
47 | 19,
48 | 20,
49 | 21,
50 | 22,
51 | 23,
52 | 24,
53 | 25,
54 | 26,
55 | 27,
56 | 28,
57 | 29,
58 | 30,
59 | 32,
60 | 33,
61 | 34,
62 | 35,
63 | 36
64 | ],
65 | "visible_layers": "0001010_80000000",
66 | "zone_display_mode": 0
67 | },
68 | "meta": {
69 | "filename": "pico-ice.kicad_prl",
70 | "version": 3
71 | },
72 | "project": {
73 | "files": []
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/Board/Rev1/pico-ice.lib:
--------------------------------------------------------------------------------
1 | EESchema-LIBRARY Version 2.4
2 | #encoding utf-8
3 | #
4 | # RP2040
5 | #
6 | DEF RP2040 U 0 40 Y Y 1 F N
7 | F0 "U" -1150 1950 50 H V C CNN
8 | F1 "RP2040" 950 -1950 50 H V C CNN
9 | F2 "RP2040_minimal:RP2040-QFN-56" -750 0 50 H I C CNN
10 | F3 "" -750 0 50 H I C CNN
11 | DRAW
12 | T 0 0 200 100 0 0 0 "Raspberry Pi" Normal 0 C C
13 | T 0 0 0 100 0 0 0 RP2040 Normal 0 C C
14 | S 1150 1900 -1150 -1900 0 1 10 f
15 | X IOVDD 1 350 2000 100 D 50 50 1 1 W
16 | X IOVDD 10 250 2000 100 D 50 50 1 1 W
17 | X GPIO8 11 1250 500 100 L 50 50 1 1 B
18 | X GPIO9 12 1250 400 100 L 50 50 1 1 B
19 | X GPIO10 13 1250 300 100 L 50 50 1 1 B
20 | X GPIO11 14 1250 200 100 L 50 50 1 1 B
21 | X GPIO12 15 1250 100 100 L 50 50 1 1 B
22 | X GPIO13 16 1250 0 100 L 50 50 1 1 B
23 | X GPIO14 17 1250 -100 100 L 50 50 1 1 B
24 | X GPIO15 18 1250 -200 100 L 50 50 1 1 B
25 | X TESTEN 19 -500 -2000 100 U 50 50 1 1 P
26 | X GPIO0 2 1250 1300 100 L 50 50 1 1 B
27 | X XIN 20 -1250 -100 100 R 50 50 1 1 I
28 | X XOUT 21 -1250 -300 100 R 50 50 1 1 P
29 | X IOVDD 22 150 2000 100 D 50 50 1 1 W
30 | X DVDD 23 -700 2000 100 D 50 50 1 1 W
31 | X SWCLK 24 -1250 -1250 100 R 50 50 1 1 O
32 | X SWD 25 -1250 -1350 100 R 50 50 1 1 B
33 | X RUN 26 -1250 -800 100 R 50 50 1 1 I
34 | X GPIO16 27 1250 -300 100 L 50 50 1 1 B
35 | X GPIO17 28 1250 -400 100 L 50 50 1 1 B
36 | X GPIO18 29 1250 -500 100 L 50 50 1 1 B
37 | X GPIO1 3 1250 1200 100 L 50 50 1 1 B
38 | X GPIO19 30 1250 -600 100 L 50 50 1 1 B
39 | X GPIO20 31 1250 -700 100 L 50 50 1 1 B
40 | X GPIO21 32 1250 -800 100 L 50 50 1 1 B
41 | X IOVDD 33 50 2000 100 D 50 50 1 1 W
42 | X GPIO22 34 1250 -900 100 L 50 50 1 1 B
43 | X GPIO23 35 1250 -1000 100 L 50 50 1 1 B
44 | X GPIO24 36 1250 -1100 100 L 50 50 1 1 B
45 | X GPIO25 37 1250 -1200 100 L 50 50 1 1 B
46 | X GPIO26_ADC0 38 1250 -1400 100 L 50 50 1 1 B
47 | X GPIO27_ADC1 39 1250 -1500 100 L 50 50 1 1 B
48 | X GPIO2 4 1250 1100 100 L 50 50 1 1 B
49 | X GPIO28_ADC2 40 1250 -1600 100 L 50 50 1 1 B
50 | X GPIO29_ADC3 41 1250 -1700 100 L 50 50 1 1 B
51 | X IOVDD 42 -50 2000 100 D 50 50 1 1 W
52 | X ADC_AVDD 43 650 2000 100 D 50 50 1 1 W
53 | X VREG_IN 44 -350 2000 100 D 50 50 1 1 W
54 | X VREG_VOUT 45 -500 2000 100 D 50 50 1 1 w
55 | X USB_DM 46 1250 1600 100 L 50 50 1 1 B
56 | X USB_DP 47 1250 1700 100 L 50 50 1 1 B
57 | X USB_VDD 48 500 2000 100 D 50 50 1 1 W
58 | X IOVDD 49 -150 2000 100 D 50 50 1 1 W
59 | X GPIO3 5 1250 1000 100 L 50 50 1 1 B
60 | X DVDD 50 -800 2000 100 D 50 50 1 1 W
61 | X QSPI_SD3 51 -1250 800 100 R 50 50 1 1 B
62 | X QSPI_SCLK 52 -1250 650 100 R 50 50 1 1 O
63 | X QSPI_SD0 53 -1250 1100 100 R 50 50 1 1 B
64 | X QSPI_SD2 54 -1250 900 100 R 50 50 1 1 B
65 | X QSPI_SD1 55 -1250 1000 100 R 50 50 1 1 B
66 | X QSPI_SS 56 -1250 1250 100 R 50 50 1 1 B
67 | X GND 57 0 -2000 100 U 50 50 1 1 W
68 | X GPIO4 6 1250 900 100 L 50 50 1 1 B
69 | X GPIO5 7 1250 800 100 L 50 50 1 1 B
70 | X GPIO6 8 1250 700 100 L 50 50 1 1 B
71 | X GPIO7 9 1250 600 100 L 50 50 1 1 B
72 | ENDDRAW
73 | ENDDEF
74 | #
75 | #End Library
76 |
--------------------------------------------------------------------------------
/Board/Rev1/pico-ice.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Board/Rev1/pico-ice.pdf
--------------------------------------------------------------------------------
/Board/Rev1/pico-ice.pro:
--------------------------------------------------------------------------------
1 | update=15/01/2021 11:42:37
2 | version=1
3 | last_client=kicad
4 | [general]
5 | version=1
6 | RootSch=
7 | BoardNm=
8 | [pcbnew]
9 | version=1
10 | LastNetListRead=
11 | UseCmpFile=1
12 | PadDrill=0.600000000000
13 | PadDrillOvalY=0.600000000000
14 | PadSizeH=1.500000000000
15 | PadSizeV=1.500000000000
16 | PcbTextSizeV=1.500000000000
17 | PcbTextSizeH=1.500000000000
18 | PcbTextThickness=0.300000000000
19 | ModuleTextSizeV=1.000000000000
20 | ModuleTextSizeH=1.000000000000
21 | ModuleTextSizeThickness=0.150000000000
22 | SolderMaskClearance=0.000000000000
23 | SolderMaskMinWidth=0.000000000000
24 | DrawSegmentWidth=0.200000000000
25 | BoardOutlineThickness=0.100000000000
26 | ModuleOutlineThickness=0.150000000000
27 | [cvpcb]
28 | version=1
29 | NetIExt=net
30 | [eeschema]
31 | version=1
32 | LibDir=
33 | [eeschema/libraries]
34 | [schematic_editor]
35 | version=1
36 | PageLayoutDescrFile=
37 | PlotDirectoryName=
38 | SubpartIdSeparator=0
39 | SubpartFirstId=65
40 | NetFmtName=
41 | SpiceAjustPassiveValues=0
42 | LabSize=50
43 | ERC_TestSimilarLabels=1
44 |
--------------------------------------------------------------------------------
/Board/Rev1/pico-ice_back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Board/Rev1/pico-ice_back.png
--------------------------------------------------------------------------------
/Board/Rev1/pico-ice_front.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Board/Rev1/pico-ice_front.png
--------------------------------------------------------------------------------
/Board/Rev1/sym-lib-table:
--------------------------------------------------------------------------------
1 | (sym_lib_table
2 | (lib (name "pico-ice")(type "Legacy")(uri "E:/Data/local_github/pico-ice/Board/Rev0/pico-ice.lib")(options "")(descr ""))
3 | (lib (name "pico-ice_minimal")(type "Legacy")(uri "E:/Data/local_github/pico-ice/Board/Rev0/pico-ice_minimal.lib")(options "")(descr ""))
4 | (lib (name "UPduino_v3.0")(type "Legacy")(uri "E:/Data/local_github/UPduino-v3.0/Board/v3.01/UPduino_v3.0.lib")(options "")(descr ""))
5 | )
6 |
--------------------------------------------------------------------------------
/Board/Rev2/Fabrication/Gerber/pico-ice-B_Fab.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Board/Rev2/Fabrication/Gerber/pico-ice-B_Fab.pdf
--------------------------------------------------------------------------------
/Board/Rev2/Fabrication/Gerber/pico-ice-B_Paste.gbr:
--------------------------------------------------------------------------------
1 | G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,(6.0.5)*
2 | G04 #@! TF.CreationDate,2022-12-13T18:03:46-08:00*
3 | G04 #@! TF.ProjectId,pico-ice,7069636f-2d69-4636-952e-6b696361645f,REV1*
4 | G04 #@! TF.SameCoordinates,Original*
5 | G04 #@! TF.FileFunction,Paste,Bot*
6 | G04 #@! TF.FilePolarity,Positive*
7 | %FSLAX46Y46*%
8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
9 | G04 Created by KiCad (PCBNEW (6.0.5)) date 2022-12-13 18:03:46*
10 | %MOMM*%
11 | %LPD*%
12 | G01*
13 | G04 APERTURE LIST*
14 | G04 Aperture macros list*
15 | %AMRoundRect*
16 | 0 Rectangle with rounded corners*
17 | 0 $1 Rounding radius*
18 | 0 $2 $3 $4 $5 $6 $7 $8 $9 X,Y pos of 4 corners*
19 | 0 Add a 4 corners polygon primitive as box body*
20 | 4,1,4,$2,$3,$4,$5,$6,$7,$8,$9,$2,$3,0*
21 | 0 Add four circle primitives for the rounded corners*
22 | 1,1,$1+$1,$2,$3*
23 | 1,1,$1+$1,$4,$5*
24 | 1,1,$1+$1,$6,$7*
25 | 1,1,$1+$1,$8,$9*
26 | 0 Add four rect primitives between the rounded corners*
27 | 20,1,$1+$1,$2,$3,$4,$5,0*
28 | 20,1,$1+$1,$4,$5,$6,$7,0*
29 | 20,1,$1+$1,$6,$7,$8,$9,0*
30 | 20,1,$1+$1,$8,$9,$2,$3,0*%
31 | G04 Aperture macros list end*
32 | %ADD10RoundRect,0.135000X-0.185000X0.135000X-0.185000X-0.135000X0.185000X-0.135000X0.185000X0.135000X0*%
33 | %ADD11RoundRect,0.140000X-0.170000X0.140000X-0.170000X-0.140000X0.170000X-0.140000X0.170000X0.140000X0*%
34 | %ADD12R,0.600000X0.450000*%
35 | %ADD13RoundRect,0.135000X-0.135000X-0.185000X0.135000X-0.185000X0.135000X0.185000X-0.135000X0.185000X0*%
36 | %ADD14RoundRect,0.140000X0.170000X-0.140000X0.170000X0.140000X-0.170000X0.140000X-0.170000X-0.140000X0*%
37 | %ADD15RoundRect,0.140000X0.140000X0.170000X-0.140000X0.170000X-0.140000X-0.170000X0.140000X-0.170000X0*%
38 | %ADD16RoundRect,0.140000X-0.140000X-0.170000X0.140000X-0.170000X0.140000X0.170000X-0.140000X0.170000X0*%
39 | %ADD17RoundRect,0.150000X-0.150000X0.650000X-0.150000X-0.650000X0.150000X-0.650000X0.150000X0.650000X0*%
40 | %ADD18RoundRect,0.150000X0.650000X0.150000X-0.650000X0.150000X-0.650000X-0.150000X0.650000X-0.150000X0*%
41 | %ADD19RoundRect,0.150000X-0.150000X0.825000X-0.150000X-0.825000X0.150000X-0.825000X0.150000X0.825000X0*%
42 | %ADD20RoundRect,0.135000X0.185000X-0.135000X0.185000X0.135000X-0.185000X0.135000X-0.185000X-0.135000X0*%
43 | %ADD21RoundRect,0.150000X0.150000X-0.512500X0.150000X0.512500X-0.150000X0.512500X-0.150000X-0.512500X0*%
44 | %ADD22R,0.600000X0.700000*%
45 | %ADD23RoundRect,0.150000X-0.150000X0.587500X-0.150000X-0.587500X0.150000X-0.587500X0.150000X0.587500X0*%
46 | %ADD24RoundRect,0.150000X-0.150000X0.512500X-0.150000X-0.512500X0.150000X-0.512500X0.150000X0.512500X0*%
47 | G04 APERTURE END LIST*
48 | D10*
49 | X78054200Y-119731600D03*
50 | X78054200Y-120751600D03*
51 | D11*
52 | X66710718Y-87691471D03*
53 | X66710718Y-88651471D03*
54 | D12*
55 | X73549800Y-90678000D03*
56 | X75649800Y-90678000D03*
57 | D13*
58 | X72779312Y-79840277D03*
59 | X73799312Y-79840277D03*
60 | D14*
61 | X72567800Y-117370800D03*
62 | X72567800Y-116410800D03*
63 | D15*
64 | X77340400Y-104495600D03*
65 | X76380400Y-104495600D03*
66 | D11*
67 | X74828400Y-103253600D03*
68 | X74828400Y-104213600D03*
69 | D16*
70 | X70640000Y-101955600D03*
71 | X71600000Y-101955600D03*
72 | D17*
73 | X67818000Y-80474000D03*
74 | X69088000Y-80474000D03*
75 | X70358000Y-80474000D03*
76 | X71628000Y-80474000D03*
77 | X71628000Y-87674000D03*
78 | X70358000Y-87674000D03*
79 | X69088000Y-87674000D03*
80 | X67818000Y-87674000D03*
81 | D18*
82 | X75659800Y-120751600D03*
83 | X75659800Y-122021600D03*
84 | X75659800Y-123291600D03*
85 | X75659800Y-124561600D03*
86 | X68459800Y-124561600D03*
87 | X68459800Y-123291600D03*
88 | X68459800Y-122021600D03*
89 | X68459800Y-120751600D03*
90 | D15*
91 | X73530400Y-89204800D03*
92 | X72570400Y-89204800D03*
93 | D11*
94 | X70586600Y-99418200D03*
95 | X70586600Y-100378200D03*
96 | D15*
97 | X77315000Y-97993200D03*
98 | X76355000Y-97993200D03*
99 | D19*
100 | X73533000Y-82320000D03*
101 | X74803000Y-82320000D03*
102 | X76073000Y-82320000D03*
103 | X77343000Y-82320000D03*
104 | X77343000Y-87270000D03*
105 | X76073000Y-87270000D03*
106 | X74803000Y-87270000D03*
107 | X73533000Y-87270000D03*
108 | D20*
109 | X67818000Y-78310200D03*
110 | X67818000Y-77290200D03*
111 | D21*
112 | X77327800Y-101619900D03*
113 | X76377800Y-101619900D03*
114 | X75427800Y-101619900D03*
115 | X75427800Y-99344900D03*
116 | X77327800Y-99344900D03*
117 | D20*
118 | X73837800Y-104243600D03*
119 | X73837800Y-103223600D03*
120 | X77139800Y-120753600D03*
121 | X77139800Y-119733600D03*
122 | D16*
123 | X68531800Y-119278400D03*
124 | X69491800Y-119278400D03*
125 | D22*
126 | X77306400Y-103251000D03*
127 | X75906400Y-103251000D03*
128 | D23*
129 | X75148400Y-76608700D03*
130 | X77048400Y-76608700D03*
131 | X76098400Y-78483700D03*
132 | D24*
133 | X70652600Y-103408900D03*
134 | X71602600Y-103408900D03*
135 | X72552600Y-103408900D03*
136 | X72552600Y-105683900D03*
137 | X70652600Y-105683900D03*
138 | D14*
139 | X69392800Y-106144000D03*
140 | X69392800Y-105184000D03*
141 | D10*
142 | X73507600Y-76147200D03*
143 | X73507600Y-77167200D03*
144 | M02*
145 |
--------------------------------------------------------------------------------
/Board/Rev2/Fabrication/Gerber/pico-ice-F_Fab.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Board/Rev2/Fabrication/Gerber/pico-ice-F_Fab.pdf
--------------------------------------------------------------------------------
/Board/Rev2/Fabrication/Gerber/pico-ice-Margin.gbr:
--------------------------------------------------------------------------------
1 | G04 #@! TF.GenerationSoftware,KiCad,Pcbnew,(6.0.5)*
2 | G04 #@! TF.CreationDate,2022-12-13T18:03:46-08:00*
3 | G04 #@! TF.ProjectId,pico-ice,7069636f-2d69-4636-952e-6b696361645f,REV1*
4 | G04 #@! TF.SameCoordinates,Original*
5 | G04 #@! TF.FileFunction,Other,User*
6 | %FSLAX46Y46*%
7 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
8 | G04 Created by KiCad (PCBNEW (6.0.5)) date 2022-12-13 18:03:46*
9 | %MOMM*%
10 | %LPD*%
11 | G01*
12 | G04 APERTURE LIST*
13 | G04 APERTURE END LIST*
14 | M02*
15 |
--------------------------------------------------------------------------------
/Board/Rev2/Fabrication/Gerber/pico-ice-NPTH-drl.gbr:
--------------------------------------------------------------------------------
1 | %TF.GenerationSoftware,KiCad,Pcbnew,(6.0.5)*%
2 | %TF.CreationDate,2022-12-13T18:03:39-08:00*%
3 | %TF.ProjectId,pico-ice,7069636f-2d69-4636-952e-6b696361645f,REV1*%
4 | %TF.SameCoordinates,Original*%
5 | %TF.FileFunction,NonPlated,1,4,NPTH,Drill*%
6 | %TF.FilePolarity,Positive*%
7 | %FSLAX46Y46*%
8 | G04 Gerber Fmt 4.6, Leading zero omitted, Abs format (unit mm)*
9 | G04 Created by KiCad (PCBNEW (6.0.5)) date 2022-12-13 18:03:39*
10 | %MOMM*%
11 | %LPD*%
12 | G01*
13 | G04 APERTURE LIST*
14 | %TA.AperFunction,ComponentDrill*%
15 | %ADD10C,0.650000*%
16 | %TD*%
17 | %TA.AperFunction,ComponentDrill*%
18 | %ADD11C,2.700000*%
19 | %TD*%
20 | G04 APERTURE END LIST*
21 | D10*
22 | %TO.C,J1*%
23 | X69500000Y-128337000D03*
24 | X75280000Y-128337000D03*
25 | D11*
26 | %TO.C,H1*%
27 | X63500000Y-76200000D03*
28 | %TO.C,H4*%
29 | X63500000Y-132080000D03*
30 | %TO.C,H2*%
31 | X81280000Y-76200000D03*
32 | %TO.C,H3*%
33 | X81280000Y-132080000D03*
34 | M02*
35 |
--------------------------------------------------------------------------------
/Board/Rev2/RP2040_minimal.pretty/Crystal_SMD_HC49-US.kicad_mod:
--------------------------------------------------------------------------------
1 | (module Crystal_SMD_HC49-US (layer F.Cu) (tedit 5F0C7995)
2 | (descr "SMD Crystal HC-49-SD http://cdn-reichelt.de/documents/datenblatt/B400/xxx-HC49-SMD.pdf, 11.4x4.7mm^2 package")
3 | (tags "SMD SMT crystal")
4 | (attr smd)
5 | (fp_text reference Y1 (at 0 -3.55) (layer F.SilkS)
6 | (effects (font (size 1 1) (thickness 0.15)))
7 | )
8 | (fp_text value ABLS-12.000MHZ-B4-T (at 0 3.55) (layer F.Fab)
9 | (effects (font (size 1 1) (thickness 0.15)))
10 | )
11 | (fp_arc (start 3.015 0) (end 3.015 -2.115) (angle 180) (layer F.Fab) (width 0.1))
12 | (fp_arc (start -3.015 0) (end -3.015 -2.115) (angle -180) (layer F.Fab) (width 0.1))
13 | (fp_line (start 6.8 -2.6) (end -6.8 -2.6) (layer F.CrtYd) (width 0.05))
14 | (fp_line (start 6.8 2.6) (end 6.8 -2.6) (layer F.CrtYd) (width 0.05))
15 | (fp_line (start -6.8 2.6) (end 6.8 2.6) (layer F.CrtYd) (width 0.05))
16 | (fp_line (start -6.8 -2.6) (end -6.8 2.6) (layer F.CrtYd) (width 0.05))
17 | (fp_line (start -6.7 2.55) (end 5.9 2.55) (layer F.SilkS) (width 0.12))
18 | (fp_line (start -6.7 -2.55) (end -6.7 -1.3) (layer F.SilkS) (width 0.12))
19 | (fp_line (start 5.9 -2.55) (end -6.7 -2.55) (layer F.SilkS) (width 0.12))
20 | (fp_line (start -3.015 2.115) (end 3.015 2.115) (layer F.Fab) (width 0.1))
21 | (fp_line (start -3.015 -2.115) (end 3.015 -2.115) (layer F.Fab) (width 0.1))
22 | (fp_line (start 5.7 -2.35) (end -5.7 -2.35) (layer F.Fab) (width 0.1))
23 | (fp_line (start 5.7 2.35) (end 5.7 -2.35) (layer F.Fab) (width 0.1))
24 | (fp_line (start -5.7 2.35) (end 5.7 2.35) (layer F.Fab) (width 0.1))
25 | (fp_line (start -5.7 -2.35) (end -5.7 2.35) (layer F.Fab) (width 0.1))
26 | (fp_text user %R (at 0 0) (layer F.Fab)
27 | (effects (font (size 1 1) (thickness 0.15)))
28 | )
29 | (fp_line (start -6.7 1.3) (end -6.7 2.55) (layer F.SilkS) (width 0.12))
30 | (pad 2 smd rect (at 4.5 0) (size 5.6 2.1) (layers F.Cu F.Paste F.Mask))
31 | (pad 1 smd rect (at -4.5 0) (size 5.6 2.1) (layers F.Cu F.Paste F.Mask))
32 | (model ${KISYS3DMOD}/Crystal.3dshapes/Crystal_SMD_HC49-SD.wrl
33 | (at (xyz 0 0 0))
34 | (scale (xyz 1 1 1))
35 | (rotate (xyz 0 0 0))
36 | )
37 | )
38 |
--------------------------------------------------------------------------------
/Board/Rev2/RP2040_minimal.pretty/USB_Micro-B_Amphenol_10103594-0001LF_Horizontal_modified.kicad_mod:
--------------------------------------------------------------------------------
1 | (module USB_Micro-B_Amphenol_10103594-0001LF_Horizontal_modified (layer F.Cu) (tedit 5F0317C2)
2 | (descr "Micro USB Type B 10103594-0001LF, http://cdn.amphenol-icc.com/media/wysiwyg/files/drawing/10103594.pdf")
3 | (tags "USB USB_B USB_micro USB_OTG")
4 | (attr smd)
5 | (fp_text reference J5 (at -5.365 -2.58 -180) (layer F.SilkS)
6 | (effects (font (size 1 1) (thickness 0.15)))
7 | )
8 | (fp_text value USB_B_Micro (at -0.025 3.32 -180) (layer F.Fab)
9 | (effects (font (size 1 1) (thickness 0.15)))
10 | )
11 | (fp_line (start 4.14 1.7) (end -4.13 1.7) (layer F.CrtYd) (width 0.05))
12 | (fp_line (start 4.14 1.7) (end 4.14 -3.995) (layer F.CrtYd) (width 0.05))
13 | (fp_line (start -4.13 -3.995) (end -4.13 1.7) (layer F.CrtYd) (width 0.05))
14 | (fp_line (start -4.13 -3.995) (end 4.14 -3.995) (layer F.CrtYd) (width 0.05))
15 | (fp_line (start -4.02 1.7) (end 4.02 1.7) (layer Dwgs.User) (width 0.1))
16 | (fp_line (start -3.775 2.22) (end -3.775 -1.98) (layer F.Fab) (width 0.12))
17 | (fp_line (start -2.975 -2.73) (end 3.725 -2.73) (layer F.Fab) (width 0.12))
18 | (fp_line (start 3.725 -2.73) (end 3.725 2.22) (layer F.Fab) (width 0.12))
19 | (fp_line (start 3.725 2.22) (end -3.775 2.22) (layer F.Fab) (width 0.12))
20 | (fp_line (start -3.775 -1.98) (end -2.975 -2.73) (layer F.Fab) (width 0.12))
21 | (fp_line (start -1.325 -3.98) (end -1.725 -4.43) (layer F.SilkS) (width 0.12))
22 | (fp_line (start -1.725 -4.43) (end -0.925 -4.43) (layer F.SilkS) (width 0.12))
23 | (fp_line (start -0.925 -4.43) (end -1.325 -3.98) (layer F.SilkS) (width 0.12))
24 | (fp_line (start 3.825 1.62) (end 3.825 -1.18) (layer F.SilkS) (width 0.12))
25 | (fp_line (start 3.825 -1.18) (end 4.125 -1.18) (layer F.SilkS) (width 0.12))
26 | (fp_line (start 4.125 -1.18) (end 4.125 -2.73) (layer F.SilkS) (width 0.12))
27 | (fp_line (start -3.875 1.62) (end -3.875 -1.18) (layer F.SilkS) (width 0.12))
28 | (fp_line (start -4.175 -1.18) (end -3.875 -1.18) (layer F.SilkS) (width 0.12))
29 | (fp_line (start -4.175 -1.18) (end -4.175 -2.73) (layer F.SilkS) (width 0.12))
30 | (fp_text user %R (at -0.025 -1.13 -180) (layer F.Fab)
31 | (effects (font (size 1 1) (thickness 0.15)))
32 | )
33 | (fp_text user "PCB edge" (at -0.025 1.12 -180) (layer Dwgs.User)
34 | (effects (font (size 0.5 0.5) (thickness 0.075)))
35 | )
36 | (pad 6 smd rect (at 0.9625 0.25 90) (size 2.5 1.425) (layers F.Cu F.Paste F.Mask))
37 | (pad 6 smd rect (at -0.9625 0.25 90) (size 2.5 1.425) (layers F.Cu F.Paste F.Mask))
38 | (pad 6 thru_hole oval (at 2.725 0 90) (size 1.8 1.3) (drill oval 1.2 0.7) (layers *.Cu *.Mask))
39 | (pad 6 thru_hole oval (at -2.725 0 90) (size 1.8 1.3) (drill oval 1.2 0.7) (layers *.Cu *.Mask))
40 | (pad 6 thru_hole oval (at -2.425 -3.03 90) (size 1.45 1.05) (drill oval 1.05 0.65) (layers *.Cu *.Mask))
41 | (pad 5 smd rect (at 1.3 -2.825 90) (size 1.75 0.4) (layers F.Cu F.Paste F.Mask))
42 | (pad 4 smd rect (at 0.65 -2.825 90) (size 1.75 0.4) (layers F.Cu F.Paste F.Mask))
43 | (pad 3 smd rect (at 0 -2.825 90) (size 1.75 0.4) (layers F.Cu F.Paste F.Mask))
44 | (pad 2 smd rect (at -0.65 -2.825 90) (size 1.75 0.4) (layers F.Cu F.Paste F.Mask))
45 | (pad 1 smd rect (at -1.3 -2.825 90) (size 1.75 0.4) (layers F.Cu F.Paste F.Mask))
46 | (pad 6 smd rect (at 2.9 -3.03) (size 2 1.46) (layers F.Cu F.Paste F.Mask))
47 | (pad 6 smd rect (at -2.9 -3.03) (size 2 1.46) (layers F.Cu F.Paste F.Mask))
48 | (pad 6 smd rect (at -2.9875 -1.7) (size 1.825 0.7) (layers F.Cu F.Paste F.Mask))
49 | (pad 6 smd roundrect (at -2.725 -0.425) (size 1.3 3.25) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.296))
50 | (pad 6 smd roundrect (at 2.725 -0.425) (size 1.3 3.25) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.296))
51 | (pad 6 smd rect (at 2.9875 -1.7) (size 1.825 0.7) (layers F.Cu F.Paste F.Mask))
52 | (pad 6 thru_hole oval (at 2.425 -3.03 90) (size 1.45 1.05) (drill oval 1.05 0.65) (layers *.Cu *.Mask))
53 | (model 10103594.stp
54 | (offset (xyz 0 0.2 2.2))
55 | (scale (xyz 1 1 1))
56 | (rotate (xyz 90 0 180))
57 | )
58 | )
59 |
--------------------------------------------------------------------------------
/Board/Rev2/bom.ini:
--------------------------------------------------------------------------------
1 | [BOM_OPTIONS]
2 | ; General BoM options here
3 | ; If 'ignore_dnf' option is set to 1, rows that are not to be fitted on the PCB will not be written to the BoM file
4 | ignore_dnf = 1
5 | ; If 'html_generate_dnf' option is set to 1, also generate a list of components not fitted on the PCB (HTML only)
6 | html_generate_dnf = 1
7 | ; If 'use_alt' option is set to 1, grouped references will be printed in the alternate compressed style eg: R1-R7,R18
8 | use_alt = 0
9 | ; If 'number_rows' option is set to 1, each row in the BoM will be prepended with an incrementing row number
10 | number_rows = 1
11 | ; If 'group_connectors' option is set to 1, connectors with the same footprints will be grouped together, independent of the name of the connector
12 | group_connectors = 1
13 | ; If 'test_regex' option is set to 1, each component group will be tested against a number of regular-expressions (specified, per column, below). If any matches are found, the row is ignored in the output file
14 | test_regex = 1
15 | ; If 'merge_blank_fields' option is set to 1, component groups with blank fields will be merged into the most compatible group, where possible
16 | merge_blank_fields = 1
17 | ; Specify output file name format, %O is the defined output name, %v is the version, %V is the variant name which will be ammended according to 'variant_file_name_format'.
18 | output_file_name = %O_bom_%v%V
19 | ; Specify the variant file name format, this is a unique field as the variant is not always used/specified. When it is unused you will want to strip all of this.
20 | variant_file_name_format = _(%V)
21 | ; Field name used to determine if a particular part is to be fitted
22 | fit_field = Config
23 | ; Complex variant processing (disabled by default)
24 | complex_variant = False
25 | ; Character used to separate reference designators in output
26 | ref_separator = ' '
27 | ; Make a backup of the bom before generating the new one, using the following template
28 | make_backup = %O.tmp
29 | ; Default number of boards to produce if none given on CLI with -n
30 | number_boards = 1
31 | ; Default PCB variant if none given on CLI with -r
32 | board_variant = ['default']
33 | ; Whether to hide headers from output file
34 | hide_headers = False
35 | ; Whether to hide PCB info from output file
36 | hide_pcb_info = False
37 | ; Interpret as a Digikey P/N and link the following field
38 | digikey_link = False
39 |
40 | [IGNORE_COLUMNS]
41 | ; Any column heading that appears here will be excluded from the Generated BoM
42 | ; Titles are case-insensitive
43 | part lib
44 | footprint lib
45 | sheetpath
46 | Digi-Key Part Number
47 | Comment
48 | part
49 |
50 | [COLUMN_ORDER]
51 | ; Columns will apear in the order they are listed here
52 | ; Titles are case-insensitive
53 | ;Description
54 | ;ki_description
55 | References
56 | ;Part
57 | ;Part Lib
58 | Value
59 | Footprint
60 | Footprint Lib
61 | Sheetpath
62 | Quantity Per PCB
63 | ;Build Quantity
64 | Datasheet
65 |
66 | [GROUP_FIELDS]
67 | ; List of fields used for sorting individual components into groups
68 | ; Components which match (comparing *all* fields) will be grouped together
69 | ; Field names are case-insensitive
70 | Part
71 | Part Lib
72 | Value
73 | Footprint
74 | Footprint Lib
75 |
76 | [COMPONENT_ALIASES]
77 | ; A series of values which are considered to be equivalent for the part name
78 | ; Each line represents a list of equivalent component name values separated by a tab character
79 | ; e.g. 'c c_small cap' will ensure the equivalent capacitor symbols can be grouped together
80 | ; Aliases are case-insensitive
81 | c c_small cap capacitor
82 | r r_small res resistor
83 | sw switch
84 | l l_small inductor
85 | zener zenersmall
86 | d diode d_small
87 |
88 | [JOIN]
89 | ; A list of rules to join the content of fields
90 | ; Each line is a rule, the first name is the field that will receive the data
91 | ; from the other fields
92 | ; Use tab (ASCII 9) as separator
93 | ; Field names are case sensitive
94 |
95 | [REGEX_INCLUDE]
96 | ; A series of regular expressions used to include parts in the BoM
97 | ; If there are any regex defined here, only components that match against ANY of them will be included in the BOM
98 | ; Column names are case-insensitive
99 | ; Format is: "[ColumName] [Regex]" (separated by a tab)
100 |
101 | [COLUMN_RENAME]
102 | ; A list of columns to be renamed
103 | ; Format is: "[ColumName] [NewName]" (separated by a tab)
104 |
105 | [REGEX_EXCLUDE]
106 | ; A series of regular expressions used to exclude parts from the BoM
107 | ; If a component matches ANY of these, it will be excluded from the BoM
108 | ; Column names are case-insensitive
109 | ; Format is: "[ColumName] [Regex]" (separated by a tab
110 | References ^TP[0-9]*
111 | References ^FID
112 | References ^SJ[0-9]*
113 | Part mount.*hole
114 | Part solder.*bridge
115 | Part test.*point
116 | Footprint test.*point
117 | Footprint mount.*hole
118 | Footprint fiducial
119 |
120 |
--------------------------------------------------------------------------------
/Board/Rev2/fp-lib-table:
--------------------------------------------------------------------------------
1 | (fp_lib_table
2 | (lib (name RP2040_minimal)(type KiCad)(uri ${KIPRJMOD}/RP2040_minimal.pretty)(options "")(descr ""))
3 | )
4 |
--------------------------------------------------------------------------------
/Board/Rev2/pico-ice-rescue.dcm:
--------------------------------------------------------------------------------
1 | EESchema-DOCLIB Version 2.0
2 | #
3 | #End Doc Library
4 |
--------------------------------------------------------------------------------
/Board/Rev2/pico-ice-rescue.lib:
--------------------------------------------------------------------------------
1 | EESchema-LIBRARY Version 2.4
2 | #encoding utf-8
3 | #
4 | # USB_B_Micro-Connector
5 | #
6 | DEF USB_B_Micro-Connector J 0 40 Y Y 1 F N
7 | F0 "J" -200 450 50 H V L CNN
8 | F1 "USB_B_Micro-Connector" -200 350 50 H V L CNN
9 | F2 "" 150 -50 50 H I C CNN
10 | F3 "" 150 -50 50 H I C CNN
11 | $FPLIST
12 | USB*
13 | $ENDFPLIST
14 | DRAW
15 | C -150 85 25 0 1 10 F
16 | C -25 135 15 0 1 10 F
17 | S -200 -300 200 300 0 1 10 f
18 | S -5 -300 5 -270 0 1 0 N
19 | S 10 50 -20 20 0 1 10 F
20 | S 200 -205 170 -195 0 1 0 N
21 | S 200 -105 170 -95 0 1 0 N
22 | S 200 -5 170 5 0 1 0 N
23 | S 200 195 170 205 0 1 0 N
24 | P 2 0 1 10 -75 85 25 85 N
25 | P 4 0 1 10 -125 85 -100 85 -50 135 -25 135 N
26 | P 4 0 1 10 -100 85 -75 85 -50 35 0 35 N
27 | P 4 0 1 10 25 110 25 60 75 85 25 110 F
28 | P 5 0 1 0 -170 220 -70 220 -80 190 -160 190 -170 220 F
29 | P 9 0 1 0 -185 230 -185 220 -175 190 -175 180 -65 180 -65 190 -55 220 -55 230 -185 230 N
30 | X VBUS 1 300 200 100 L 50 50 1 1 w
31 | X D- 2 300 -100 100 L 50 50 1 1 P
32 | X D+ 3 300 0 100 L 50 50 1 1 P
33 | X ID 4 300 -200 100 L 50 50 1 1 P
34 | X GND 5 0 -400 100 U 50 50 1 1 w
35 | X Shield 6 -100 -400 100 U 50 50 1 1 P
36 | ENDDRAW
37 | ENDDEF
38 | #
39 | #End Library
40 |
--------------------------------------------------------------------------------
/Board/Rev2/pico-ice.kicad_prl:
--------------------------------------------------------------------------------
1 | {
2 | "board": {
3 | "active_layer": 0,
4 | "active_layer_preset": "",
5 | "auto_track_width": true,
6 | "hidden_netclasses": [],
7 | "hidden_nets": [],
8 | "high_contrast_mode": 0,
9 | "net_color_mode": 1,
10 | "opacity": {
11 | "images": 0.6,
12 | "pads": 1.0,
13 | "tracks": 1.0,
14 | "vias": 1.0,
15 | "zones": 0.49000000953674316
16 | },
17 | "ratsnest_display_mode": 0,
18 | "selection_filter": {
19 | "dimensions": true,
20 | "footprints": true,
21 | "graphics": true,
22 | "keepouts": true,
23 | "lockedItems": true,
24 | "otherItems": true,
25 | "pads": true,
26 | "text": true,
27 | "tracks": true,
28 | "vias": true,
29 | "zones": true
30 | },
31 | "visible_items": [
32 | 0,
33 | 1,
34 | 2,
35 | 3,
36 | 4,
37 | 5,
38 | 8,
39 | 9,
40 | 10,
41 | 11,
42 | 12,
43 | 13,
44 | 14,
45 | 15,
46 | 16,
47 | 17,
48 | 18,
49 | 19,
50 | 20,
51 | 21,
52 | 22,
53 | 23,
54 | 24,
55 | 25,
56 | 26,
57 | 27,
58 | 28,
59 | 29,
60 | 30,
61 | 32,
62 | 33,
63 | 34,
64 | 35,
65 | 36
66 | ],
67 | "visible_layers": "0001000_00000001",
68 | "zone_display_mode": 0
69 | },
70 | "meta": {
71 | "filename": "pico-ice.kicad_prl",
72 | "version": 3
73 | },
74 | "project": {
75 | "files": []
76 | }
77 | }
78 |
--------------------------------------------------------------------------------
/Board/Rev2/pico-ice.lib:
--------------------------------------------------------------------------------
1 | EESchema-LIBRARY Version 2.4
2 | #encoding utf-8
3 | #
4 | # RP2040
5 | #
6 | DEF RP2040 U 0 40 Y Y 1 F N
7 | F0 "U" -1150 1950 50 H V C CNN
8 | F1 "RP2040" 950 -1950 50 H V C CNN
9 | F2 "RP2040_minimal:RP2040-QFN-56" -750 0 50 H I C CNN
10 | F3 "" -750 0 50 H I C CNN
11 | DRAW
12 | T 0 0 200 100 0 0 0 "Raspberry Pi" Normal 0 C C
13 | T 0 0 0 100 0 0 0 RP2040 Normal 0 C C
14 | S 1150 1900 -1150 -1900 0 1 10 f
15 | X IOVDD 1 350 2000 100 D 50 50 1 1 W
16 | X IOVDD 10 250 2000 100 D 50 50 1 1 W
17 | X GPIO8 11 1250 500 100 L 50 50 1 1 B
18 | X GPIO9 12 1250 400 100 L 50 50 1 1 B
19 | X GPIO10 13 1250 300 100 L 50 50 1 1 B
20 | X GPIO11 14 1250 200 100 L 50 50 1 1 B
21 | X GPIO12 15 1250 100 100 L 50 50 1 1 B
22 | X GPIO13 16 1250 0 100 L 50 50 1 1 B
23 | X GPIO14 17 1250 -100 100 L 50 50 1 1 B
24 | X GPIO15 18 1250 -200 100 L 50 50 1 1 B
25 | X TESTEN 19 -500 -2000 100 U 50 50 1 1 P
26 | X GPIO0 2 1250 1300 100 L 50 50 1 1 B
27 | X XIN 20 -1250 -100 100 R 50 50 1 1 I
28 | X XOUT 21 -1250 -300 100 R 50 50 1 1 P
29 | X IOVDD 22 150 2000 100 D 50 50 1 1 W
30 | X DVDD 23 -700 2000 100 D 50 50 1 1 W
31 | X SWCLK 24 -1250 -1250 100 R 50 50 1 1 O
32 | X SWD 25 -1250 -1350 100 R 50 50 1 1 B
33 | X RUN 26 -1250 -800 100 R 50 50 1 1 I
34 | X GPIO16 27 1250 -300 100 L 50 50 1 1 B
35 | X GPIO17 28 1250 -400 100 L 50 50 1 1 B
36 | X GPIO18 29 1250 -500 100 L 50 50 1 1 B
37 | X GPIO1 3 1250 1200 100 L 50 50 1 1 B
38 | X GPIO19 30 1250 -600 100 L 50 50 1 1 B
39 | X GPIO20 31 1250 -700 100 L 50 50 1 1 B
40 | X GPIO21 32 1250 -800 100 L 50 50 1 1 B
41 | X IOVDD 33 50 2000 100 D 50 50 1 1 W
42 | X GPIO22 34 1250 -900 100 L 50 50 1 1 B
43 | X GPIO23 35 1250 -1000 100 L 50 50 1 1 B
44 | X GPIO24 36 1250 -1100 100 L 50 50 1 1 B
45 | X GPIO25 37 1250 -1200 100 L 50 50 1 1 B
46 | X GPIO26_ADC0 38 1250 -1400 100 L 50 50 1 1 B
47 | X GPIO27_ADC1 39 1250 -1500 100 L 50 50 1 1 B
48 | X GPIO2 4 1250 1100 100 L 50 50 1 1 B
49 | X GPIO28_ADC2 40 1250 -1600 100 L 50 50 1 1 B
50 | X GPIO29_ADC3 41 1250 -1700 100 L 50 50 1 1 B
51 | X IOVDD 42 -50 2000 100 D 50 50 1 1 W
52 | X ADC_AVDD 43 650 2000 100 D 50 50 1 1 W
53 | X VREG_IN 44 -350 2000 100 D 50 50 1 1 W
54 | X VREG_VOUT 45 -500 2000 100 D 50 50 1 1 w
55 | X USB_DM 46 1250 1600 100 L 50 50 1 1 B
56 | X USB_DP 47 1250 1700 100 L 50 50 1 1 B
57 | X USB_VDD 48 500 2000 100 D 50 50 1 1 W
58 | X IOVDD 49 -150 2000 100 D 50 50 1 1 W
59 | X GPIO3 5 1250 1000 100 L 50 50 1 1 B
60 | X DVDD 50 -800 2000 100 D 50 50 1 1 W
61 | X QSPI_SD3 51 -1250 800 100 R 50 50 1 1 B
62 | X QSPI_SCLK 52 -1250 650 100 R 50 50 1 1 O
63 | X QSPI_SD0 53 -1250 1100 100 R 50 50 1 1 B
64 | X QSPI_SD2 54 -1250 900 100 R 50 50 1 1 B
65 | X QSPI_SD1 55 -1250 1000 100 R 50 50 1 1 B
66 | X QSPI_SS 56 -1250 1250 100 R 50 50 1 1 B
67 | X GND 57 0 -2000 100 U 50 50 1 1 W
68 | X GPIO4 6 1250 900 100 L 50 50 1 1 B
69 | X GPIO5 7 1250 800 100 L 50 50 1 1 B
70 | X GPIO6 8 1250 700 100 L 50 50 1 1 B
71 | X GPIO7 9 1250 600 100 L 50 50 1 1 B
72 | ENDDRAW
73 | ENDDEF
74 | #
75 | #End Library
76 |
--------------------------------------------------------------------------------
/Board/Rev2/pico-ice.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Board/Rev2/pico-ice.pdf
--------------------------------------------------------------------------------
/Board/Rev2/pico-ice.pro:
--------------------------------------------------------------------------------
1 | update=15/01/2021 11:42:37
2 | version=1
3 | last_client=kicad
4 | [general]
5 | version=1
6 | RootSch=
7 | BoardNm=
8 | [pcbnew]
9 | version=1
10 | LastNetListRead=
11 | UseCmpFile=1
12 | PadDrill=0.600000000000
13 | PadDrillOvalY=0.600000000000
14 | PadSizeH=1.500000000000
15 | PadSizeV=1.500000000000
16 | PcbTextSizeV=1.500000000000
17 | PcbTextSizeH=1.500000000000
18 | PcbTextThickness=0.300000000000
19 | ModuleTextSizeV=1.000000000000
20 | ModuleTextSizeH=1.000000000000
21 | ModuleTextSizeThickness=0.150000000000
22 | SolderMaskClearance=0.000000000000
23 | SolderMaskMinWidth=0.000000000000
24 | DrawSegmentWidth=0.200000000000
25 | BoardOutlineThickness=0.100000000000
26 | ModuleOutlineThickness=0.150000000000
27 | [cvpcb]
28 | version=1
29 | NetIExt=net
30 | [eeschema]
31 | version=1
32 | LibDir=
33 | [eeschema/libraries]
34 | [schematic_editor]
35 | version=1
36 | PageLayoutDescrFile=
37 | PlotDirectoryName=
38 | SubpartIdSeparator=0
39 | SubpartFirstId=65
40 | NetFmtName=
41 | SpiceAjustPassiveValues=0
42 | LabSize=50
43 | ERC_TestSimilarLabels=1
44 |
--------------------------------------------------------------------------------
/Board/Rev2/sym-lib-table:
--------------------------------------------------------------------------------
1 | (sym_lib_table
2 | (lib (name "pico-ice")(type "Legacy")(uri "E:/Data/local_github/pico-ice/Board/Rev0/pico-ice.lib")(options "")(descr ""))
3 | (lib (name "pico-ice_minimal")(type "Legacy")(uri "E:/Data/local_github/pico-ice/Board/Rev0/pico-ice_minimal.lib")(options "")(descr ""))
4 | (lib (name "UPduino_v3.0")(type "Legacy")(uri "E:/Data/local_github/UPduino-v3.0/Board/v3.01/UPduino_v3.0.lib")(options "")(descr ""))
5 | )
6 |
--------------------------------------------------------------------------------
/Board/Rev3/CUSTOM.pretty/LED_Cree-PLCC4_1x1mm_CW.kicad_mod:
--------------------------------------------------------------------------------
1 | (footprint "LED_Cree-PLCC4_1x1mm_CW" (version 20221018) (generator pcbnew)
2 | (layer "F.Cu")
3 | (descr "2.0mm x 2.0mm PLCC4 LED, http://www.cree.com/~/media/Files/Cree/LED-Components-and-Modules/HB/Data-Sheets/CLMVBFKA.pdf")
4 | (tags "LED Cree PLCC-4")
5 | (property "Description" "Common anode RGB 120° SMD,1x1x0.6mm LED")
6 | (property "Digi-Key Part Number" "LCSC")
7 | (property "MPN" "MHPA1010RGBDT")
8 | (property "Manufacturer" "MEIHUA")
9 | (property "Sheetfile" "pico-ice.kicad_sch")
10 | (property "Sheetname" "")
11 | (property "Supplier" "LCSC")
12 | (attr smd)
13 | (fp_text reference "D2" (at 0.010318 -1.490529) (layer "F.SilkS")
14 | (effects (font (size 0.889 0.889) (thickness 0.127)))
15 | (tstamp 0a2b9e71-9695-472a-9a7d-32d62444f774)
16 | )
17 | (fp_text value "MHPA1010RGBDT" (at 0 2.25) (layer "F.Fab") hide
18 | (effects (font (size 1 1) (thickness 0.15)))
19 | (tstamp 14b08bc2-c475-4bc7-84f5-e21cd2be9d19)
20 | )
21 | (fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab")
22 | (effects (font (size 0.5 0.5) (thickness 0.075)))
23 | (tstamp 32a606fe-2dc3-4d87-91ef-c40108e759ec)
24 | )
25 | (fp_circle (center 0.925 -0.375) (end 1.025 -0.3)
26 | (stroke (width 0.12) (type solid)) (fill none) (layer "F.SilkS") (tstamp 7456b0c1-1442-4f2f-b4fb-3d078234f5f1))
27 | (fp_line (start -1.7 -1.4) (end -1.7 1.4)
28 | (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 2d41119b-8304-4a25-932b-0425f9f69c6f))
29 | (fp_line (start -1.7 1.4) (end 1.7 1.4)
30 | (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 066172a9-0d34-4637-a056-76f1affaca6c))
31 | (fp_line (start 1.7 -1.4) (end -1.7 -1.4)
32 | (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 1e738589-521f-4f33-a2a1-c91a1ba691ae))
33 | (fp_line (start 1.7 1.4) (end 1.7 -1.4)
34 | (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 9ae7ba34-3e5f-4d2a-9734-79670dd25a16))
35 | (fp_line (start -0.5 -0.5) (end -0.5 0.5)
36 | (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 6f313659-19b2-4662-82a3-84b09a8ccab6))
37 | (fp_line (start -0.5 0.5) (end 0.5 0.5)
38 | (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 36f0d4f2-0ce1-49c6-bc2c-4e85523005b9))
39 | (fp_line (start 0 -0.5) (end -0.5 0)
40 | (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp cf54ffba-3969-4735-9a0b-c6526ba9dca3))
41 | (fp_line (start 0.5 -0.5) (end -0.5 -0.5)
42 | (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 5df567ad-d14c-4d3d-a064-4a9f704a85ef))
43 | (fp_line (start 0.5 0.5) (end 0.5 -0.5)
44 | (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp ad5c4805-39ab-4d7c-8990-5995f4d12473))
45 | (pad "1" smd rect (at 0.385 -0.385) (size 0.43 0.43) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 493b1671-e969-43ed-9249-be4403ebbf9f))
46 | (pad "2" smd rect (at 0.385 0.385) (size 0.43 0.43) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 1221a77e-5270-4117-8862-c567c8966da7))
47 | (pad "3" smd rect (at -0.385 0.385) (size 0.43 0.43) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp afd12868-772c-43aa-8fcf-ac03b57d77f1))
48 | (pad "4" smd rect (at -0.385 -0.385) (size 0.43 0.43) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 014af43a-34d6-467b-9e60-130390f8ae3d))
49 | (model "${KICAD6_3DMODEL_DIR}/LED_SMD.3dshapes/LED_Cree-PLCC4_2x2mm_CW.wrl"
50 | (offset (xyz 0 0 0))
51 | (scale (xyz 1 1 1))
52 | (rotate (xyz 0 0 0))
53 | )
54 | )
55 |
--------------------------------------------------------------------------------
/Board/Rev3/CUSTOM.pretty/PTS820J25KSMTRLFS.kicad_mod:
--------------------------------------------------------------------------------
1 | (footprint "PTS820J25KSMTRLFS" (version 20221018) (generator pcbnew)
2 | (layer "F.Cu")
3 | (descr "PTS820J25KSMTRLFS-2")
4 | (tags "Switch")
5 | (property "Comment" "SW_Push")
6 | (property "Description" "SWITCH TACTILE SPST-NO 0.05A 12V")
7 | (property "Digi-Key Part Number" "")
8 | (property "MPN" "PTS820 J25K SMTR LFS")
9 | (property "Manufacturer" "C&K")
10 | (property "Sheetfile" "pico-ice.kicad_sch")
11 | (property "Sheetname" "")
12 | (property "Supplier" "Mouser")
13 | (property "ki_description" "Push button switch, generic, two pins")
14 | (property "ki_keywords" "switch normally-open pushbutton push-button")
15 | (attr smd)
16 | (fp_text reference "SW2" (at -3.3 0 90) (layer "F.SilkS")
17 | (effects (font (size 0.889 0.889) (thickness 0.127)))
18 | (tstamp ee816e44-454b-4cd1-b6ec-762bae90aeb9)
19 | )
20 | (fp_text value "PTS820 J25K SMTR LFS" (at 0 0) (layer "F.SilkS") hide
21 | (effects (font (size 1.27 1.27) (thickness 0.254)))
22 | (tstamp a73a48cf-593b-42d3-8042-28a2dbf5f25c)
23 | )
24 | (fp_text user "${REFERENCE}" (at 0 0) (layer "F.Fab")
25 | (effects (font (size 1.27 1.27) (thickness 0.254)))
26 | (tstamp a248b09b-37f8-46c2-973f-bbc7e386982e)
27 | )
28 | (fp_line (start -0.6 -1.45) (end 0.6 -1.45)
29 | (stroke (width 0.2) (type solid)) (layer "F.SilkS") (tstamp 3f89c285-0c61-4da2-b92b-20b67c9d04a4))
30 | (fp_line (start -0.6 1.45) (end 0.6 1.45)
31 | (stroke (width 0.2) (type solid)) (layer "F.SilkS") (tstamp 98e24c88-f500-48eb-82c5-2fcfeb6f98a5))
32 | (fp_line (start -3.55 -2.9) (end 3.55 -2.9)
33 | (stroke (width 0.1) (type solid)) (layer "F.CrtYd") (tstamp 6cc43da9-9583-4399-a5f8-a02b27569907))
34 | (fp_line (start -3.55 2.9) (end -3.55 -2.9)
35 | (stroke (width 0.1) (type solid)) (layer "F.CrtYd") (tstamp 6070a1cc-189a-4cf5-a94e-cc07410d33b8))
36 | (fp_line (start 3.55 -2.9) (end 3.55 2.9)
37 | (stroke (width 0.1) (type solid)) (layer "F.CrtYd") (tstamp 5b8ccf16-173a-41bd-95d2-c4d5ec9d67b9))
38 | (fp_line (start 3.55 2.9) (end -3.55 2.9)
39 | (stroke (width 0.1) (type solid)) (layer "F.CrtYd") (tstamp d518e8bc-29d9-41f7-be23-d2139828d40a))
40 | (fp_line (start -1.95 -1.45) (end 1.95 -1.45)
41 | (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 3d7a737e-0001-4b43-b8a4-367c6445cad2))
42 | (fp_line (start -1.95 1.45) (end -1.95 -1.45)
43 | (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp df4decef-0e70-46fd-9ad0-2e89b2f13884))
44 | (fp_line (start 1.95 -1.45) (end 1.95 1.45)
45 | (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp f12504c9-5cca-4130-8ad3-da36c273c650))
46 | (fp_line (start 1.95 1.45) (end -1.95 1.45)
47 | (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 11bd7e2e-3151-4ec7-9a4b-46c65f42b2c9))
48 | (pad "1" smd rect (at -2.075 0) (size 0.95 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp ac532d80-73cf-488e-a0b1-633231d2c52f))
49 | (pad "2" smd rect (at 2.075 0) (size 0.95 1.4) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 3c22af54-2432-4c0e-94cb-82ba060b90c6))
50 | (pad "SH1" smd rect (at -1.575 -1.525 90) (size 0.75 1.15) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 21376457-7e5f-4ef3-a1f1-9cfd1cb6aa40))
51 | (pad "SH1" smd rect (at -1.575 1.525 90) (size 0.75 1.15) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp 89195bed-151c-44b6-b1d3-504fe606643e))
52 | (pad "SH2" smd rect (at 1.575 -1.525 90) (size 0.75 1.15) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp e96273eb-eea4-491e-a56e-bdf697b3937b))
53 | (pad "SH2" smd rect (at 1.575 1.525 90) (size 0.75 1.15) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp aff7f976-8b60-4601-bb1e-fd657abe8df2))
54 | (model "E:/KICAD_LIB/3D STEP/PTS820J25KSMTRLFS.stp"
55 | (offset (xyz 0 0 0))
56 | (scale (xyz 1 1 1))
57 | (rotate (xyz 0 0 0))
58 | )
59 | )
60 |
--------------------------------------------------------------------------------
/Board/Rev3/Fabrication/pico-ice-B_Fab.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Board/Rev3/Fabrication/pico-ice-B_Fab.pdf
--------------------------------------------------------------------------------
/Board/Rev3/Fabrication/pico-ice-F_Fab.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Board/Rev3/Fabrication/pico-ice-F_Fab.pdf
--------------------------------------------------------------------------------
/Board/Rev3/RP2040_minimal.pretty/Crystal_SMD_HC49-US.kicad_mod:
--------------------------------------------------------------------------------
1 | (module Crystal_SMD_HC49-US (layer F.Cu) (tedit 5F0C7995)
2 | (descr "SMD Crystal HC-49-SD http://cdn-reichelt.de/documents/datenblatt/B400/xxx-HC49-SMD.pdf, 11.4x4.7mm^2 package")
3 | (tags "SMD SMT crystal")
4 | (attr smd)
5 | (fp_text reference Y1 (at 0 -3.55) (layer F.SilkS)
6 | (effects (font (size 1 1) (thickness 0.15)))
7 | )
8 | (fp_text value ABLS-12.000MHZ-B4-T (at 0 3.55) (layer F.Fab)
9 | (effects (font (size 1 1) (thickness 0.15)))
10 | )
11 | (fp_arc (start 3.015 0) (end 3.015 -2.115) (angle 180) (layer F.Fab) (width 0.1))
12 | (fp_arc (start -3.015 0) (end -3.015 -2.115) (angle -180) (layer F.Fab) (width 0.1))
13 | (fp_line (start 6.8 -2.6) (end -6.8 -2.6) (layer F.CrtYd) (width 0.05))
14 | (fp_line (start 6.8 2.6) (end 6.8 -2.6) (layer F.CrtYd) (width 0.05))
15 | (fp_line (start -6.8 2.6) (end 6.8 2.6) (layer F.CrtYd) (width 0.05))
16 | (fp_line (start -6.8 -2.6) (end -6.8 2.6) (layer F.CrtYd) (width 0.05))
17 | (fp_line (start -6.7 2.55) (end 5.9 2.55) (layer F.SilkS) (width 0.12))
18 | (fp_line (start -6.7 -2.55) (end -6.7 -1.3) (layer F.SilkS) (width 0.12))
19 | (fp_line (start 5.9 -2.55) (end -6.7 -2.55) (layer F.SilkS) (width 0.12))
20 | (fp_line (start -3.015 2.115) (end 3.015 2.115) (layer F.Fab) (width 0.1))
21 | (fp_line (start -3.015 -2.115) (end 3.015 -2.115) (layer F.Fab) (width 0.1))
22 | (fp_line (start 5.7 -2.35) (end -5.7 -2.35) (layer F.Fab) (width 0.1))
23 | (fp_line (start 5.7 2.35) (end 5.7 -2.35) (layer F.Fab) (width 0.1))
24 | (fp_line (start -5.7 2.35) (end 5.7 2.35) (layer F.Fab) (width 0.1))
25 | (fp_line (start -5.7 -2.35) (end -5.7 2.35) (layer F.Fab) (width 0.1))
26 | (fp_text user %R (at 0 0) (layer F.Fab)
27 | (effects (font (size 1 1) (thickness 0.15)))
28 | )
29 | (fp_line (start -6.7 1.3) (end -6.7 2.55) (layer F.SilkS) (width 0.12))
30 | (pad 2 smd rect (at 4.5 0) (size 5.6 2.1) (layers F.Cu F.Paste F.Mask))
31 | (pad 1 smd rect (at -4.5 0) (size 5.6 2.1) (layers F.Cu F.Paste F.Mask))
32 | (model ${KISYS3DMOD}/Crystal.3dshapes/Crystal_SMD_HC49-SD.wrl
33 | (at (xyz 0 0 0))
34 | (scale (xyz 1 1 1))
35 | (rotate (xyz 0 0 0))
36 | )
37 | )
38 |
--------------------------------------------------------------------------------
/Board/Rev3/RP2040_minimal.pretty/Onsemi_XDFN-1EP_1X1MM.pretty/OnSemi_XDFN4-1EP_1.0x1.0mm_EP0.52x0.52mm.kicad_mod:
--------------------------------------------------------------------------------
1 | (footprint "OnSemi_XDFN4-1EP_1.0x1.0mm_EP0.52x0.52mm" (version 20221018) (generator pcbnew)
2 | (layer "F.Cu")
3 | (descr "XDFN4 footprint (as found on the https://www.onsemi.com/pub/Collateral/NCP115-D.PDF)")
4 | (tags "OnSemi XDFN4")
5 | (attr smd)
6 | (fp_text reference "REF**" (at 0.04 2.38) (layer "F.SilkS")
7 | (effects (font (size 1 1) (thickness 0.15)))
8 | (tstamp 5831c002-47eb-43e3-ba80-dd279fecaa9c)
9 | )
10 | (fp_text value "OnSemi_XDFN4-1EP_1.0x1.0mm_EP0.52x0.52mm" (at 0.11 -1.78) (layer "F.Fab")
11 | (effects (font (size 1 1) (thickness 0.15)))
12 | (tstamp 3e18b36a-eca5-41b8-b2c5-c5a6ba6db341)
13 | )
14 | (fp_text user "${REFERENCE}" (at 0.01 1.26) (layer "F.Fab")
15 | (effects (font (size 0.5 0.5) (thickness 0.125)))
16 | (tstamp 907a17d8-7c69-4493-91ab-d7df8bb73a2f)
17 | )
18 | (fp_line (start -0.72 -0.86) (end -0.72 0.86)
19 | (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp ac171e64-9f55-4785-ae0a-3eaeed1f5569))
20 | (fp_line (start -0.72 0.86) (end 0.3 0.86)
21 | (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 4603f535-a138-47ef-8bb0-e18a22f8bc92))
22 | (fp_line (start 0.72 -0.86) (end -0.72 -0.86)
23 | (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 223ad6c1-81bd-4b6d-aa63-bfa68305ba4f))
24 | (fp_line (start 0.72 0.3) (end 0.72 -0.86)
25 | (stroke (width 0.12) (type solid)) (layer "F.SilkS") (tstamp 8351203e-90b8-4649-8b9a-ca1d92f9e58d))
26 | (fp_line (start -0.73 -0.85) (end 0.73 -0.85)
27 | (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 008196a9-32fa-4d07-a601-216ec29e3cde))
28 | (fp_line (start -0.73 0.87) (end -0.73 -0.85)
29 | (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 114c000c-98c6-402c-b9e7-97237eda839c))
30 | (fp_line (start 0.73 -0.85) (end 0.73 0.87)
31 | (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 86604b7f-524d-4217-bf45-88bd3f861c1a))
32 | (fp_line (start 0.73 0.87) (end -0.73 0.87)
33 | (stroke (width 0.05) (type solid)) (layer "F.CrtYd") (tstamp 6efc55ac-fff8-4611-807c-c091ea7bfb05))
34 | (fp_line (start -0.5 -0.5) (end 0.5 -0.5)
35 | (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp fc635145-e799-4f65-ae50-bb3e22ba2f88))
36 | (fp_line (start -0.5 0.5) (end -0.5 -0.5)
37 | (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp aa3f6219-24c1-4f2a-a59e-f3bc0dc6c6b3))
38 | (fp_line (start 0.25 0.5) (end -0.5 0.5)
39 | (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 85358420-2fcf-4825-80ec-ab3bc82db96f))
40 | (fp_line (start 0.5 -0.5) (end 0.5 0.25)
41 | (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp 3347bbff-b44a-49d0-8136-6636601ab5a7))
42 | (fp_line (start 0.5 0.25) (end 0.25 0.5)
43 | (stroke (width 0.1) (type solid)) (layer "F.Fab") (tstamp cccef342-87dd-4330-9010-f8a3478b3002))
44 | (pad "1" smd custom (at -0.325 0.485) (size 0.26 0.23) (layers "F.Cu" "F.Paste" "F.Mask")
45 | (zone_connect 0) (thermal_bridge_angle 45)
46 | (options (clearance outline) (anchor rect))
47 | (primitives
48 | (gr_poly
49 | (pts
50 | (xy 0.13 -0.115)
51 | (xy -0.13 -0.115)
52 | (xy -0.13 -0.275)
53 | (xy -0.02 -0.275)
54 | )
55 | (width 0) (fill yes))
56 | ) (tstamp b05ff933-e469-4574-8eb8-23bffc1244ec))
57 | (pad "2" smd custom (at 0.325 0.485) (size 0.26 0.23) (layers "F.Cu" "F.Paste" "F.Mask")
58 | (zone_connect 0) (thermal_bridge_angle 45)
59 | (options (clearance outline) (anchor rect))
60 | (primitives
61 | (gr_poly
62 | (pts
63 | (xy 0.13 -0.115)
64 | (xy -0.13 -0.115)
65 | (xy 0.02 -0.275)
66 | (xy 0.13 -0.275)
67 | )
68 | (width 0) (fill yes))
69 | ) (tstamp d194cd47-72af-4cf9-98b8-4ce8c5cfa9b3))
70 | (pad "3" smd custom (at 0.325 -0.485 180) (size 0.26 0.23) (layers "F.Cu" "F.Paste" "F.Mask")
71 | (zone_connect 0) (thermal_bridge_angle 45)
72 | (options (clearance outline) (anchor rect))
73 | (primitives
74 | (gr_poly
75 | (pts
76 | (xy 0.13 -0.115)
77 | (xy -0.13 -0.115)
78 | (xy -0.13 -0.275)
79 | (xy -0.02 -0.275)
80 | )
81 | (width 0) (fill yes))
82 | ) (tstamp 5f512be9-6fce-4561-8bd6-c51830f9a69b))
83 | (pad "4" smd custom (at -0.325 -0.485 180) (size 0.26 0.23) (layers "F.Cu" "F.Paste" "F.Mask")
84 | (zone_connect 0) (thermal_bridge_angle 45)
85 | (options (clearance outline) (anchor rect))
86 | (primitives
87 | (gr_poly
88 | (pts
89 | (xy 0.13 -0.115)
90 | (xy -0.13 -0.115)
91 | (xy 0.02 -0.275)
92 | (xy 0.13 -0.275)
93 | )
94 | (width 0) (fill yes))
95 | ) (tstamp a7e21854-19bb-4ee8-8fdd-3fea638d5ad2))
96 | (pad "5" smd rect (at 0 0 225) (size 0.52 0.52) (layers "F.Cu" "F.Paste" "F.Mask") (tstamp ce8d3bd9-5d3f-45e3-a6f1-7848c33ef7a0))
97 | (model "${KICAD6_3DMODEL_DIR}/Package_DFN_QFN.3dshapes/OnSemi_XDFN4-1EP_1.0x1.0mm_EP0.52x0.52mm.wrl"
98 | (offset (xyz 0 0 0))
99 | (scale (xyz 1 1 1))
100 | (rotate (xyz 0 0 0))
101 | )
102 | )
103 |
--------------------------------------------------------------------------------
/Board/Rev3/RP2040_minimal.pretty/USB_Micro-B_Amphenol_10103594-0001LF_Horizontal_modified.kicad_mod:
--------------------------------------------------------------------------------
1 | (module USB_Micro-B_Amphenol_10103594-0001LF_Horizontal_modified (layer F.Cu) (tedit 5F0317C2)
2 | (descr "Micro USB Type B 10103594-0001LF, http://cdn.amphenol-icc.com/media/wysiwyg/files/drawing/10103594.pdf")
3 | (tags "USB USB_B USB_micro USB_OTG")
4 | (attr smd)
5 | (fp_text reference J5 (at -5.365 -2.58 -180) (layer F.SilkS)
6 | (effects (font (size 1 1) (thickness 0.15)))
7 | )
8 | (fp_text value USB_B_Micro (at -0.025 3.32 -180) (layer F.Fab)
9 | (effects (font (size 1 1) (thickness 0.15)))
10 | )
11 | (fp_line (start 4.14 1.7) (end -4.13 1.7) (layer F.CrtYd) (width 0.05))
12 | (fp_line (start 4.14 1.7) (end 4.14 -3.995) (layer F.CrtYd) (width 0.05))
13 | (fp_line (start -4.13 -3.995) (end -4.13 1.7) (layer F.CrtYd) (width 0.05))
14 | (fp_line (start -4.13 -3.995) (end 4.14 -3.995) (layer F.CrtYd) (width 0.05))
15 | (fp_line (start -4.02 1.7) (end 4.02 1.7) (layer Dwgs.User) (width 0.1))
16 | (fp_line (start -3.775 2.22) (end -3.775 -1.98) (layer F.Fab) (width 0.12))
17 | (fp_line (start -2.975 -2.73) (end 3.725 -2.73) (layer F.Fab) (width 0.12))
18 | (fp_line (start 3.725 -2.73) (end 3.725 2.22) (layer F.Fab) (width 0.12))
19 | (fp_line (start 3.725 2.22) (end -3.775 2.22) (layer F.Fab) (width 0.12))
20 | (fp_line (start -3.775 -1.98) (end -2.975 -2.73) (layer F.Fab) (width 0.12))
21 | (fp_line (start -1.325 -3.98) (end -1.725 -4.43) (layer F.SilkS) (width 0.12))
22 | (fp_line (start -1.725 -4.43) (end -0.925 -4.43) (layer F.SilkS) (width 0.12))
23 | (fp_line (start -0.925 -4.43) (end -1.325 -3.98) (layer F.SilkS) (width 0.12))
24 | (fp_line (start 3.825 1.62) (end 3.825 -1.18) (layer F.SilkS) (width 0.12))
25 | (fp_line (start 3.825 -1.18) (end 4.125 -1.18) (layer F.SilkS) (width 0.12))
26 | (fp_line (start 4.125 -1.18) (end 4.125 -2.73) (layer F.SilkS) (width 0.12))
27 | (fp_line (start -3.875 1.62) (end -3.875 -1.18) (layer F.SilkS) (width 0.12))
28 | (fp_line (start -4.175 -1.18) (end -3.875 -1.18) (layer F.SilkS) (width 0.12))
29 | (fp_line (start -4.175 -1.18) (end -4.175 -2.73) (layer F.SilkS) (width 0.12))
30 | (fp_text user %R (at -0.025 -1.13 -180) (layer F.Fab)
31 | (effects (font (size 1 1) (thickness 0.15)))
32 | )
33 | (fp_text user "PCB edge" (at -0.025 1.12 -180) (layer Dwgs.User)
34 | (effects (font (size 0.5 0.5) (thickness 0.075)))
35 | )
36 | (pad 6 smd rect (at 0.9625 0.25 90) (size 2.5 1.425) (layers F.Cu F.Paste F.Mask))
37 | (pad 6 smd rect (at -0.9625 0.25 90) (size 2.5 1.425) (layers F.Cu F.Paste F.Mask))
38 | (pad 6 thru_hole oval (at 2.725 0 90) (size 1.8 1.3) (drill oval 1.2 0.7) (layers *.Cu *.Mask))
39 | (pad 6 thru_hole oval (at -2.725 0 90) (size 1.8 1.3) (drill oval 1.2 0.7) (layers *.Cu *.Mask))
40 | (pad 6 thru_hole oval (at -2.425 -3.03 90) (size 1.45 1.05) (drill oval 1.05 0.65) (layers *.Cu *.Mask))
41 | (pad 5 smd rect (at 1.3 -2.825 90) (size 1.75 0.4) (layers F.Cu F.Paste F.Mask))
42 | (pad 4 smd rect (at 0.65 -2.825 90) (size 1.75 0.4) (layers F.Cu F.Paste F.Mask))
43 | (pad 3 smd rect (at 0 -2.825 90) (size 1.75 0.4) (layers F.Cu F.Paste F.Mask))
44 | (pad 2 smd rect (at -0.65 -2.825 90) (size 1.75 0.4) (layers F.Cu F.Paste F.Mask))
45 | (pad 1 smd rect (at -1.3 -2.825 90) (size 1.75 0.4) (layers F.Cu F.Paste F.Mask))
46 | (pad 6 smd rect (at 2.9 -3.03) (size 2 1.46) (layers F.Cu F.Paste F.Mask))
47 | (pad 6 smd rect (at -2.9 -3.03) (size 2 1.46) (layers F.Cu F.Paste F.Mask))
48 | (pad 6 smd rect (at -2.9875 -1.7) (size 1.825 0.7) (layers F.Cu F.Paste F.Mask))
49 | (pad 6 smd roundrect (at -2.725 -0.425) (size 1.3 3.25) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.296))
50 | (pad 6 smd roundrect (at 2.725 -0.425) (size 1.3 3.25) (layers F.Cu F.Paste F.Mask) (roundrect_rratio 0.296))
51 | (pad 6 smd rect (at 2.9875 -1.7) (size 1.825 0.7) (layers F.Cu F.Paste F.Mask))
52 | (pad 6 thru_hole oval (at 2.425 -3.03 90) (size 1.45 1.05) (drill oval 1.05 0.65) (layers *.Cu *.Mask))
53 | (model 10103594.stp
54 | (offset (xyz 0 0.2 2.2))
55 | (scale (xyz 1 1 1))
56 | (rotate (xyz 90 0 180))
57 | )
58 | )
59 |
--------------------------------------------------------------------------------
/Board/Rev3/bom.ini:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Board/Rev3/bom.ini
--------------------------------------------------------------------------------
/Board/Rev3/fp-lib-table:
--------------------------------------------------------------------------------
1 | (fp_lib_table
2 | (version 7)
3 | (lib (name "RP2040_minimal")(type "KiCad")(uri "${KIPRJMOD}/RP2040_minimal.pretty")(options "")(descr ""))
4 | (lib (name "Onsemi_XDFN-1EP_1X1MM")(type "KiCad")(uri "${KIPRJMOD}/RP2040_minimal.pretty/Onsemi_XDFN-1EP_1X1MM.pretty")(options "")(descr ""))
5 | (lib (name "CUSTOM")(type "KiCad")(uri "${KIPRJMOD}/CUSTOM.pretty")(options "")(descr ""))
6 | )
7 |
--------------------------------------------------------------------------------
/Board/Rev3/ibom.config.ini:
--------------------------------------------------------------------------------
1 | [html_defaults]
2 | dark_mode=0
3 | show_pads=1
4 | show_fabrication=0
5 | show_silkscreen=1
6 | highlight_pin1=0
7 | redraw_on_drag=1
8 | board_rotation=0
9 | offset_back_rotation=0
10 | checkboxes=Sourced,Placed
11 | bom_view=left-right
12 | layer_view=FB
13 | compression=1
14 | open_browser=1
15 | [general]
16 | bom_dest_dir=bom
17 | bom_name_format=ibom
18 | component_sort_order=C,R,L,D,U,Y,X,F,SW,A,~,HS,CNN,J,P,NT,MH
19 | component_blacklist=
20 | blacklist_virtual=1
21 | blacklist_empty_val=0
22 | include_tracks=1
23 | include_nets=1
24 | [fields]
25 | show_fields=Value,Footprint
26 | group_fields=Value,Footprint
27 | normalize_field_case=0
28 | board_variant_field=
29 | board_variant_whitelist=
30 | board_variant_blacklist=
31 | dnp_field=
32 |
--------------------------------------------------------------------------------
/Board/Rev3/pico-ice-rescue.dcm:
--------------------------------------------------------------------------------
1 | EESchema-DOCLIB Version 2.0
2 | #
3 | #End Doc Library
4 |
--------------------------------------------------------------------------------
/Board/Rev3/pico-ice-rescue.lib:
--------------------------------------------------------------------------------
1 | EESchema-LIBRARY Version 2.4
2 | #encoding utf-8
3 | #
4 | # USB_B_Micro-Connector
5 | #
6 | DEF USB_B_Micro-Connector J 0 40 Y Y 1 F N
7 | F0 "J" -200 450 50 H V L CNN
8 | F1 "USB_B_Micro-Connector" -200 350 50 H V L CNN
9 | F2 "" 150 -50 50 H I C CNN
10 | F3 "" 150 -50 50 H I C CNN
11 | $FPLIST
12 | USB*
13 | $ENDFPLIST
14 | DRAW
15 | C -150 85 25 0 1 10 F
16 | C -25 135 15 0 1 10 F
17 | S -200 -300 200 300 0 1 10 f
18 | S -5 -300 5 -270 0 1 0 N
19 | S 10 50 -20 20 0 1 10 F
20 | S 200 -205 170 -195 0 1 0 N
21 | S 200 -105 170 -95 0 1 0 N
22 | S 200 -5 170 5 0 1 0 N
23 | S 200 195 170 205 0 1 0 N
24 | P 2 0 1 10 -75 85 25 85 N
25 | P 4 0 1 10 -125 85 -100 85 -50 135 -25 135 N
26 | P 4 0 1 10 -100 85 -75 85 -50 35 0 35 N
27 | P 4 0 1 10 25 110 25 60 75 85 25 110 F
28 | P 5 0 1 0 -170 220 -70 220 -80 190 -160 190 -170 220 F
29 | P 9 0 1 0 -185 230 -185 220 -175 190 -175 180 -65 180 -65 190 -55 220 -55 230 -185 230 N
30 | X VBUS 1 300 200 100 L 50 50 1 1 w
31 | X D- 2 300 -100 100 L 50 50 1 1 P
32 | X D+ 3 300 0 100 L 50 50 1 1 P
33 | X ID 4 300 -200 100 L 50 50 1 1 P
34 | X GND 5 0 -400 100 U 50 50 1 1 w
35 | X Shield 6 -100 -400 100 U 50 50 1 1 P
36 | ENDDRAW
37 | ENDDEF
38 | #
39 | #End Library
40 |
--------------------------------------------------------------------------------
/Board/Rev3/pico-ice.kicad_prl:
--------------------------------------------------------------------------------
1 | {
2 | "board": {
3 | "active_layer": 48,
4 | "active_layer_preset": "",
5 | "auto_track_width": true,
6 | "hidden_netclasses": [],
7 | "hidden_nets": [],
8 | "high_contrast_mode": 2,
9 | "net_color_mode": 1,
10 | "opacity": {
11 | "images": 0.6,
12 | "pads": 1.0,
13 | "tracks": 0.4699999988079071,
14 | "vias": 1.0,
15 | "zones": 0.49000000953674316
16 | },
17 | "ratsnest_display_mode": 0,
18 | "selection_filter": {
19 | "dimensions": true,
20 | "footprints": true,
21 | "graphics": true,
22 | "keepouts": true,
23 | "lockedItems": true,
24 | "otherItems": true,
25 | "pads": true,
26 | "text": true,
27 | "tracks": true,
28 | "vias": true,
29 | "zones": true
30 | },
31 | "visible_items": [
32 | 0,
33 | 1,
34 | 2,
35 | 3,
36 | 4,
37 | 5,
38 | 8,
39 | 9,
40 | 10,
41 | 11,
42 | 12,
43 | 13,
44 | 15,
45 | 16,
46 | 17,
47 | 18,
48 | 19,
49 | 20,
50 | 21,
51 | 22,
52 | 23,
53 | 24,
54 | 25,
55 | 26,
56 | 27,
57 | 28,
58 | 29,
59 | 30,
60 | 32,
61 | 33,
62 | 34,
63 | 35,
64 | 36,
65 | 39,
66 | 40
67 | ],
68 | "visible_layers": "0010000_00000000",
69 | "zone_display_mode": 0
70 | },
71 | "git": {
72 | "repo_password": "",
73 | "repo_type": "",
74 | "repo_username": "",
75 | "ssh_key": ""
76 | },
77 | "meta": {
78 | "filename": "pico-ice.kicad_prl",
79 | "version": 3
80 | },
81 | "project": {
82 | "files": []
83 | }
84 | }
85 |
--------------------------------------------------------------------------------
/Board/Rev3/pico-ice.lib:
--------------------------------------------------------------------------------
1 | EESchema-LIBRARY Version 2.4
2 | #encoding utf-8
3 | #
4 | # RP2040
5 | #
6 | DEF RP2040 U 0 40 Y Y 1 F N
7 | F0 "U" -1150 1950 50 H V C CNN
8 | F1 "RP2040" 950 -1950 50 H V C CNN
9 | F2 "RP2040_minimal:RP2040-QFN-56" -750 0 50 H I C CNN
10 | F3 "" -750 0 50 H I C CNN
11 | DRAW
12 | T 0 0 200 100 0 0 0 "Raspberry Pi" Normal 0 C C
13 | T 0 0 0 100 0 0 0 RP2040 Normal 0 C C
14 | S 1150 1900 -1150 -1900 0 1 10 f
15 | X IOVDD 1 350 2000 100 D 50 50 1 1 W
16 | X IOVDD 10 250 2000 100 D 50 50 1 1 W
17 | X GPIO8 11 1250 500 100 L 50 50 1 1 B
18 | X GPIO9 12 1250 400 100 L 50 50 1 1 B
19 | X GPIO10 13 1250 300 100 L 50 50 1 1 B
20 | X GPIO11 14 1250 200 100 L 50 50 1 1 B
21 | X GPIO12 15 1250 100 100 L 50 50 1 1 B
22 | X GPIO13 16 1250 0 100 L 50 50 1 1 B
23 | X GPIO14 17 1250 -100 100 L 50 50 1 1 B
24 | X GPIO15 18 1250 -200 100 L 50 50 1 1 B
25 | X TESTEN 19 -500 -2000 100 U 50 50 1 1 P
26 | X GPIO0 2 1250 1300 100 L 50 50 1 1 B
27 | X XIN 20 -1250 -100 100 R 50 50 1 1 I
28 | X XOUT 21 -1250 -300 100 R 50 50 1 1 P
29 | X IOVDD 22 150 2000 100 D 50 50 1 1 W
30 | X DVDD 23 -700 2000 100 D 50 50 1 1 W
31 | X SWCLK 24 -1250 -1250 100 R 50 50 1 1 O
32 | X SWD 25 -1250 -1350 100 R 50 50 1 1 B
33 | X RUN 26 -1250 -800 100 R 50 50 1 1 I
34 | X GPIO16 27 1250 -300 100 L 50 50 1 1 B
35 | X GPIO17 28 1250 -400 100 L 50 50 1 1 B
36 | X GPIO18 29 1250 -500 100 L 50 50 1 1 B
37 | X GPIO1 3 1250 1200 100 L 50 50 1 1 B
38 | X GPIO19 30 1250 -600 100 L 50 50 1 1 B
39 | X GPIO20 31 1250 -700 100 L 50 50 1 1 B
40 | X GPIO21 32 1250 -800 100 L 50 50 1 1 B
41 | X IOVDD 33 50 2000 100 D 50 50 1 1 W
42 | X GPIO22 34 1250 -900 100 L 50 50 1 1 B
43 | X GPIO23 35 1250 -1000 100 L 50 50 1 1 B
44 | X GPIO24 36 1250 -1100 100 L 50 50 1 1 B
45 | X GPIO25 37 1250 -1200 100 L 50 50 1 1 B
46 | X GPIO26_ADC0 38 1250 -1400 100 L 50 50 1 1 B
47 | X GPIO27_ADC1 39 1250 -1500 100 L 50 50 1 1 B
48 | X GPIO2 4 1250 1100 100 L 50 50 1 1 B
49 | X GPIO28_ADC2 40 1250 -1600 100 L 50 50 1 1 B
50 | X GPIO29_ADC3 41 1250 -1700 100 L 50 50 1 1 B
51 | X IOVDD 42 -50 2000 100 D 50 50 1 1 W
52 | X ADC_AVDD 43 650 2000 100 D 50 50 1 1 W
53 | X VREG_IN 44 -350 2000 100 D 50 50 1 1 W
54 | X VREG_VOUT 45 -500 2000 100 D 50 50 1 1 w
55 | X USB_DM 46 1250 1600 100 L 50 50 1 1 B
56 | X USB_DP 47 1250 1700 100 L 50 50 1 1 B
57 | X USB_VDD 48 500 2000 100 D 50 50 1 1 W
58 | X IOVDD 49 -150 2000 100 D 50 50 1 1 W
59 | X GPIO3 5 1250 1000 100 L 50 50 1 1 B
60 | X DVDD 50 -800 2000 100 D 50 50 1 1 W
61 | X QSPI_SD3 51 -1250 800 100 R 50 50 1 1 B
62 | X QSPI_SCLK 52 -1250 650 100 R 50 50 1 1 O
63 | X QSPI_SD0 53 -1250 1100 100 R 50 50 1 1 B
64 | X QSPI_SD2 54 -1250 900 100 R 50 50 1 1 B
65 | X QSPI_SD1 55 -1250 1000 100 R 50 50 1 1 B
66 | X QSPI_SS 56 -1250 1250 100 R 50 50 1 1 B
67 | X GND 57 0 -2000 100 U 50 50 1 1 W
68 | X GPIO4 6 1250 900 100 L 50 50 1 1 B
69 | X GPIO5 7 1250 800 100 L 50 50 1 1 B
70 | X GPIO6 8 1250 700 100 L 50 50 1 1 B
71 | X GPIO7 9 1250 600 100 L 50 50 1 1 B
72 | ENDDRAW
73 | ENDDEF
74 | #
75 | #End Library
76 |
--------------------------------------------------------------------------------
/Board/Rev3/pico-ice.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Board/Rev3/pico-ice.pdf
--------------------------------------------------------------------------------
/Board/Rev3/pico-ice.pro:
--------------------------------------------------------------------------------
1 | update=15/01/2021 11:42:37
2 | version=1
3 | last_client=kicad
4 | [general]
5 | version=1
6 | RootSch=
7 | BoardNm=
8 | [pcbnew]
9 | version=1
10 | LastNetListRead=
11 | UseCmpFile=1
12 | PadDrill=0.600000000000
13 | PadDrillOvalY=0.600000000000
14 | PadSizeH=1.500000000000
15 | PadSizeV=1.500000000000
16 | PcbTextSizeV=1.500000000000
17 | PcbTextSizeH=1.500000000000
18 | PcbTextThickness=0.300000000000
19 | ModuleTextSizeV=1.000000000000
20 | ModuleTextSizeH=1.000000000000
21 | ModuleTextSizeThickness=0.150000000000
22 | SolderMaskClearance=0.000000000000
23 | SolderMaskMinWidth=0.000000000000
24 | DrawSegmentWidth=0.200000000000
25 | BoardOutlineThickness=0.100000000000
26 | ModuleOutlineThickness=0.150000000000
27 | [cvpcb]
28 | version=1
29 | NetIExt=net
30 | [eeschema]
31 | version=1
32 | LibDir=
33 | [eeschema/libraries]
34 | [schematic_editor]
35 | version=1
36 | PageLayoutDescrFile=
37 | PlotDirectoryName=
38 | SubpartIdSeparator=0
39 | SubpartFirstId=65
40 | NetFmtName=
41 | SpiceAjustPassiveValues=0
42 | LabSize=50
43 | ERC_TestSimilarLabels=1
44 |
--------------------------------------------------------------------------------
/Board/Rev3/sym-lib-table:
--------------------------------------------------------------------------------
1 | (sym_lib_table
2 | (lib (name "pico-ice")(type "Legacy")(uri "E:/Data/local_github/pico-ice/Board/Rev0/pico-ice.lib")(options "")(descr ""))
3 | (lib (name "pico-ice_minimal")(type "Legacy")(uri "E:/Data/local_github/pico-ice/Board/Rev0/pico-ice_minimal.lib")(options "")(descr ""))
4 | (lib (name "UPduino_v3.0")(type "Legacy")(uri "E:/Data/local_github/UPduino-v3.0/Board/v3.01/UPduino_v3.0.lib")(options "")(descr ""))
5 | )
6 |
--------------------------------------------------------------------------------
/CNAME:
--------------------------------------------------------------------------------
1 | pico-ice.tinyvision.ai
--------------------------------------------------------------------------------
/Docs/.gitignore:
--------------------------------------------------------------------------------
1 | html
2 | latex
3 |
--------------------------------------------------------------------------------
/Docs/Doxyfile:
--------------------------------------------------------------------------------
1 | PROJECT_NAME = "pico-ice"
2 | PROJECT_BRIEF = RaspberryPi Pico with an iCE40 FPGA
3 | OPTIMIZE_OUTPUT_FOR_C = YES
4 | SHOW_FILES = NO
5 | SHOW_NAMESPACES = NO
6 | INPUT = ../Firmware/pico-ice-sdk/include/ ./
7 | IMAGE_PATH = images pinout
8 | USE_MDFILE_AS_MAINPAGE = index.md
9 | HTML_EXTRA_STYLESHEET = doxygen-awesome-css/doxygen-awesome.css \
10 | doxygen-awesome-css/doxygen-awesome-sidebar-only.css
11 | HTML_COLORSTYLE = LIGHT
12 | GENERATE_TREEVIEW = YES
13 | DISABLE_INDEX = NO
14 | FULL_SIDEBAR = NO
15 |
--------------------------------------------------------------------------------
/Docs/DoxygenLayout.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/Docs/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Docs/favicon.ico
--------------------------------------------------------------------------------
/Docs/getting_started.md:
--------------------------------------------------------------------------------
1 | # Getting Started
2 |
3 | Once you receive the board, you would be able to plug via USB and see the RGB LED blinking.
4 | You might want to update the default firmware to make sure to have the latest bugfixes:
5 |
6 |
7 | ## Default Firmware
8 |
9 | [source](https://github.com/tinyvision-ai-inc/pico-ice/blob/main/Firmware/pico-ice-default/) -
10 | [download](https://github.com/tinyvision-ai-inc/pico-ice/releases/)
11 |
12 | To provide the various USB programming methods and allow to boot the FPGA, a
13 | default firmware is loaded onto the RP2040 (Pico part of the pico-ice).
14 |
15 | It provides:
16 |
17 | - A first USB-serial (#0) is used for the and a REPL command line interface
18 | for now only showing help message and version information.
19 |
20 | - A second USB-serial (#1) is used for mirroring everything between
21 | this USB interface UART TX on RP0 with ICE27, UART RX on RP1 with ICE25.
22 |
23 | - A third USB-serial (#2) is exchanging data with the main SPI bus onboard
24 | ([doc](https://pico-ice.tinyvision.ai/ice_usb.html#usb-spi-fpgasramflash-forwarding)).
25 |
26 | - A 12 MHz clock is exported from the RP2040 pin 24 toward the iCE40 pin 35.
27 |
28 | - An USB DFU interface allows programming through [dfu-utils](https://dfu-util.sourceforge.net/)
29 | as shipped with [oss-cad-suite](https://github.com/YosysHQ/oss-cad-suite-build).
30 |
31 | - An USB MSC interface allows programming the board by copying a file to an USB device
32 | ([doc](https://pico-ice.tinyvision.ai/programming_the_fpga.html#using-a-drag-drop-or-file-copy-scheme)).
33 |
34 | See [Programming the RP2040](md_programming__the__mcu.html) for how to load this firmware file.
35 |
36 |
37 | ## Soldering the Pmods
38 |
39 | In case you ordered the board without the [Pmod](md_pmods.html) connectors soldered,
40 | you would need to solder them in to plug something onto the board.
41 | For instance like this:
42 |
43 | 
44 |
45 |
46 | ## Using the SDK
47 |
48 | The [RP2040](https://www.raspberrypi.com/products/rp2040/specifications/) on the
49 | pico-ice can be programmed with either custom C firmware, or languages such as
50 | [MicroPython](https://micropython.org/download/RPI_PICO/),
51 | [CircuitPython](https://circuitpython.org/board/raspberry_pi_pico/),
52 | [Go](https://tinygo.org/docs/reference/microcontrollers/pico/),
53 | [Rust](https://docs.rs/rp2040/latest/rp2040/),
54 | [JavaScript](https://kalumajs.org/),
55 | [ZeptoForth](https://github.com/tabemann/zeptoforth),
56 | [Mecrisp Forth](https://wellys.com/posts/rp2040_forth/),
57 | ...
58 |
59 | Currently C/C++ programming is best suported through the pico-ice-sdk:
60 | a Raspberry Pi [pico-sdk](https://github.com/raspberrypi/pico-sdk/) library.
61 |
62 | This is a guide for how to build application running on the RP2040 microcontroller.
63 |
64 | The [pico-ice-sdk](https://github.com/tinyvision-ai-inc/pico-ice-sdk/) provides an API for communicating with the pico-ice hardware, also allowing to use the Raspberry Pi [pico-sdk](https://github.com/raspberrypi/pico-sdk/) directly.
65 |
66 | The pico-ice-sdk is organised as a normal pico-sdk project with `pico_ice` custom board.
67 |
68 | The [examples](https://github.com/tinyvision-ai-inc/pico-ice-sdk/blob/main/examples/) show how everything can be to get started.
69 |
70 | Here is how to turn an example into a new project:
71 |
72 | # copy the whole example directory
73 | cp -r pico-ice-sdk/examples/pico_usb_uart my-new-pico-ice-firmware
74 | cd my-new-pico-ice-firmware
75 |
76 | # turn it into a git repository
77 | git init
78 | git remote add origin git@github.com:your-username/my-new-pico-ice-firmware
79 |
80 | # replace the two symlinks by git submodules
81 | rm pico-sdk pico-ice-sdk
82 | git submodule add https://github.com/raspberrypi/pico-sdk
83 | git submodule add https://github.com/tinyvision-ai-inc/pico-ice-sdk
84 |
85 | # fetch the submodules (using --recursive is very slow)
86 | git -C pico-ice-sdk submodule update --init
87 | git -C pico-sdk submodule update --init lib/tinyusb
88 |
89 | # you can now build it as a CMake project
90 | mkdir build && cd build
91 | cmake .. && make
92 |
93 | You can now edit the name of the project in the CMakeLists.txt, add new sources, and change the code.
94 |
95 |
96 | ## Troubleshooting
97 |
98 | Feel free to join the [chat server](https://discord.gg/sb2kwc66) to ask for help.
99 |
100 |
101 | ### Using some RP2040 peripheral cause various bugs.
102 |
103 | In order to power the FPGA, some peripherals and GPIO pins are in use by the pico-ice-sdk.
104 | In case both the firmware and SDK use the same peripheral, it is possible to use another free peripheral instance, or if none left, disable the feature of the SDK
105 | The `ice_init()` is responsible for setting-up all peripherals used by the SDK.
106 | Instead, calling manually each `ice_init_()` of interest permits to select what to enable or not in the board, and therefore keeping some more peripherals for the user.
107 |
108 |
109 | ### Error: C++ compiler not installed on this system
110 |
111 | The pico-sdk is written in C, but uses a single C++ file to enable C++ support in the SDK.
112 | This means you need a working C++ cross compiler, often named `arm-none-eabi-g++`.
113 |
114 | Even if this binary is present in your system, it might not be a full C++ installation.
115 | If you do not need C++ and want to work around this bug, you can disable the C++ support
116 | in the pico-sdk. From your project repo:
117 |
118 | $ cd build
119 | $ cmake .. # download the SDK if not yet done
120 | $ sed -i '/new_delete.cpp/ d' _deps/pico-sdk-src/src/rp2_common/pico_standard_link/CMakeLists.txt
121 | $ cmake .. # rebuild the Makefile with the fix
122 |
--------------------------------------------------------------------------------
/Docs/images/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Docs/images/favicon.ico
--------------------------------------------------------------------------------
/Docs/images/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Docs/images/favicon.png
--------------------------------------------------------------------------------
/Docs/images/pico_ice.drawio:
--------------------------------------------------------------------------------
1 | 7Vxbd5pKFP41PuoChos+Rk3aniaNJ56mTV+6iIxKi4yBMWp+/RlkkMuMKAoOps1DFmyHEb797cvsPdgAvdnqg2fOp3fIgk5DkaxVA/QbitIxAPkfCNahQJY1NZRMPNsKZVIsGNpvkA6MpAvbgj6VhSKMkIPteVo4Qq4LRzglMz0PLdPDxsixUoK5OYGMYDgyHVb6zbbwNJS2NSmWf4T2ZBp9syzRT2ZmNJgK/KlpoWVCBK4boOchhMOj2aoHnQC8CBfj/unu58L4sXwcopfOJ+T18bgZTnZT5JLtI3jQxeVOTbX7ajoLihdogUciue3f06fG6whKDy1cCwbTyQ3QXU5tDIdzcxR8uiTkIbIpnjn04wPvmT7bK/QwXCU0Rp/hA0QziL01GRIxkmqD8lGLtLOMlWtQ0TShV53KTEqnyXbiGDJyQFErgKDOwAQtQkB6ijw8RRPkms51LO3GQErkLB5zi9CcwvcLYrym1mQuMEqDSzD11t/p9ZuTp+CkpWjReX+V/LS/pmc+Nj18FZgVEYwc0/ftUSS+sZ3t/Csbf08cJ2cnp/HkwUk0dzGN+2jhjWDOOOpmyJ1NYN58WjguQD2XPx50TGy/pt0Cjw6bSwlG5joxYI5sF/sMW7bzH08gWRbCIKphqaUldCznKjhmXUtL8a4c0gniTxSoyiPQSf5EVhiXPBx84lLk1nwmwTqlVtOxJ26AMsEQekQQOFabRMMr+sHMtqyQQdC338znzXyBkijByeRat6H1C+hjlwvfxnT6LamwyXPtTaml6kBP+XeKRjHjna0GwdPEM7eN1KQgfT0aj31CkdNsG/3sd2b/vi2fHu2rf77ojvum6ZFvSuiy56DRb5EGn3bp+R59V5gpFGVc5MKMtb+naHGosXP5oTP8eIARFWvBD+M4ghh/GVKcIZ97+u3r6nUIfigebH58/e9+ojYlkVxI6P/47EAugQrQtTIjiOSsVLHuf83mTy9L/flpaDRBX/32bdKUO2fOPfnRLbsmUnU1yTtmPNBzx5OD8A5KTXNV1tUNFEkld6I7BOPus0eOJsHRnT3yEEkdsIcchyQxtVyGKlIaQ6XNrkNlhbMQlctYiXKDCfi7jqhiHaGxzoALv1KrZQSbedq9a1X6OtA+sxZ3M/hwVU8zU4WaGfcZ2gyyL7sWaGerAiUKP4VD7tkMyTgwAVNrZUgGo271jiAjfbl/IP9vCHjTepqO3NFSpiO8Utqpo+FcgN1EBarSVi6UIFILSIAa24n1FRWkuaaqGRKF906v4qWmpdZicmG8PEsGdet5yKpYq00XG8pqepRttuAi453MtgT7CzO4bHB336+ngWTsY3suzD7Y7DvAsFl7ILVMZQAA0UgKaa8KchjVdDKZYL0NH5GSs9rbEazLaoqICR4n1SkuI+AcusASVuHOve1kw3NKMLGIrPYOEyjpxHdbFjyDw+Qal5jNBKW0gaowFC5Gh66nhCVm3GaDoohV7Qm12rN3dU5Su7BCbt5dJ7zj12G3V09vmMnDgSHYGSoMdu3Nin84fLi6qyeEqiGuasd1O53Ly9bK91THeyIuprWvhPO73awrYrgxIaqfn2gbhfeNZVetqqQwNqNzbEYJmFIRVvJ+rMg09tyH+32N6c/DnfFjexVYVXeMXNxDDvI2E4GbzV8gJ4zlySeeadkwvoay3EOY0Aa5O0meT4PDOxFp9chaBHtCPxqrnsp0w4aFP1c3qlYv3bDVR1Y3TNqY0EcAPw0r8hHA7XW1SVg4LiWSnViiSW9XlTOxPYwvOc2UyC/mT1NemYcPKbvj509UJThSeUASqjy2gn2a8nzsod8w4QClzV9O8WBf7aAgHfZv5pPrwZtI4e3jeJPJhaI10Ll4w+5orow3R2xoL8iZvYl8lEqI5gw/0VLKoVCWiVVTqM0y5ox1LrlxQgnzPMvH+hf6c2874RsGC3/6vMCY5LlZnZP8FWe7cklXQKFOptVUdPg7ULzcPs2kTDa/dT7FNHp8A1ZVFE5CzlvMykYZi1nuOwgcF177EtAJGyLPXq3Ofbegdu+/7khX898p4OwYq/YdhFxMq1n5V+UTgCa3dmyvS+6CNng+oSJXrrDlLbJwl0JPqUi31/2//jxEJdMf5vtzXkG/HH+e1+BKKE9uKZf0ow+qzvL/rE0R5YAylZBSeLZssF0S7MkeQLsipI7vGeQDfzxSApsCVUYfoXXnS28JsB7xj9VMzRoCgvoB9aohv4d2gKBuQL0UeZnNgHfTCzi4FVAP0lx0J+BdNAIO7QMo9SDMe2oDsMXibvBLi1kOXVpZodiqhmXQdp95lWVhchr/rGWo0PjHQcH1/w==
--------------------------------------------------------------------------------
/Docs/images/pico_ice_back.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Docs/images/pico_ice_back.jpg
--------------------------------------------------------------------------------
/Docs/images/pico_ice_blocks.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Docs/images/pico_ice_blocks.png
--------------------------------------------------------------------------------
/Docs/images/pico_ice_front.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Docs/images/pico_ice_front.jpg
--------------------------------------------------------------------------------
/Docs/images/pico_ice_pmod_install.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Docs/images/pico_ice_pmod_install.jpg
--------------------------------------------------------------------------------
/Docs/images/pico_ice_reset_button.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Docs/images/pico_ice_reset_button.jpg
--------------------------------------------------------------------------------
/Docs/index.md:
--------------------------------------------------------------------------------
1 | [Doc](http://pico-ice.tinyvision.ai/)
2 | | [Hardware](https://github.com/tinyvision-ai-inc/pico-ice)
3 | | [SDK](https://github.com/tinyvision-ai-inc/pico-ice-sdk)
4 | | [Schematic](https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/main/Board/Rev3/pico-ice.pdf)
5 | | [Assembly](https://htmlpreview.github.io/?https://github.com/tinyvision-ai-inc/pico-ice/blob/main/Board/Rev3/bom/ibom.html)
6 | | [Discord](https://discord.gg/t2CzbAYeD2)
7 |
8 | [](https://www.elecrow.com/pico-ice-rp2040-plus-lattice-ice40up5k-fpga.html)
9 | [](https://lectronz.com/stores/tinyvision-ai-store)
10 | [](https://www.tindie.com/stores/tinyvision_ai/?ref=offsite_badges&utm_source=sellers_vr2045&utm_medium=badges&utm_campaign=badge_small%22%3E)
11 |
12 | The pico-ice is a small, low cost board with the Raspberry Pi Pico processor ([RP2040](https://www.raspberrypi.com/documentation/microcontrollers/rp2040.html)) and a Lattice Semiconductor [iCE40UP5K](https://www.latticesemi.com/en/Products/FPGAandCPLD/iCE40UltraPlus) FPGA. The board features independent flash for the FPGA and RP2040, low power SSRAM, a couple of pushbuttons and a 3 color LED with _all_ FPGA and RP2040 pins brought out to easy to use 0.1" header pins (arranged as Pmod's) for fast prototyping.
13 |
14 | 
15 | 
16 |
17 | Board Hardware Features:
18 |
19 | * Raspberry Pi RP2040 processor
20 | * Lattice UltraPlus ICE40UP5K FPGA with 5.3k LUTs, 1Mb SPRAM, 120Kb DPRAM, 8 Multipliers
21 | * _ALL_ RP2040 and 32 FPGA GPIO on 0.1” headers
22 | * 4MB SPI Flash
23 | * 8MB low power qSPI SRAM
24 | * RGB LED, shared between the RP2040 and FPGA
25 | * 2 pushbuttons, 1 dedicated and 1 primarily for processor reset during development but can be repurposed for user applications when not used for reset
26 | * On board 3.3V and 1.2V Regulators, can supply 3.3V to your project
27 | * Open source schematic and layout using KiCAD design tools
28 | * 4 layer board with a solid ground plane for good signal integrity
29 |
30 | Board Firmware features:
31 |
32 | * FPGA clock supplied by the RP2040, easy to program FPGA clock under SW control
33 | * RP2040 can program the FPGA in various ways
34 | * Examples for communicating to the FPGA from USB to UART or SPI
35 | * Support for ultra low power sleeep mode: can shut down the RP2040 and FPGA while keeping the SRAM powered
36 |
37 | 
38 |
39 | [OSHW US002140](https://certification.oshwa.org/us002140.html) | Certified open source hardware | oshwa.org/cert
40 |
--------------------------------------------------------------------------------
/Docs/mpy.md:
--------------------------------------------------------------------------------
1 | # Micropython
2 |
3 | Pico-ice and pico2-ice support micropython.
4 |
5 |
6 | ## To install
7 | - Acquire the latest release for the device you have from: https://github.com/tinyvision-ai-inc/pico-ice-micropython/releases
8 | - Flash the device as normal (uf2 pasted in the RP2 disk)
9 |
10 | ## To use
11 | The API to use the FPGA is as follow:
12 | - `ice` is the microypthon module: `import ice`
13 | - `fpga` is the class provided by the module to manage the ICE40 FPGA `ice.fpga(...)`
14 | - `fpga` provides the methods `stop()`, `start()`, and `cram(file)`
15 |
16 | ## How to program a bitstream to the FPGA RAM
17 |
18 | - The Pin class is imported from the machine module to provide interfacing with the hardware.
19 | - The module is imported
20 | - The fpga type is configured with the approriate pins for the device, as well as the frequency (in MHz) that the FPGA will run at.
21 | - The bitstream file is opened, in byte (as opposed to text) mode (`b`), to read (`r`).
22 | - The fpga is brought out of reset with `fpga.start()`
23 | - The bitstream is loaded into the FPGA using `fpga.cram(file)` with the previously opened file as argument.
24 |
25 | ### On pico-ice:
26 |
27 | ```python
28 | from machine import Pin
29 | import ice
30 | fpga = ice.fpga(cdone=Pin(26), clock=Pin(24), creset=Pin(27), cram_cs=Pin(9), cram_mosi=Pin(8), cram_sck=Pin(10), frequency=48)
31 | file = open("bitstream.bin", "br")
32 | fpga.start()
33 | fpga.cram(file)
34 | ```
35 |
36 | ### On pico2-ice:
37 |
38 | ```python
39 | from machine import Pin
40 | import ice
41 | fpga = ice.fpga(cdone=Pin(40), clock=Pin(21), creset=Pin(31), cram_cs=Pin(5), cram_mosi=Pin(4), cram_sck=Pin(6), frequency=48)
42 | file = open("bitstream.bin", "br")
43 | fpga.start()
44 | fpga.cram(file)
45 | ```
46 |
47 | ## How to program a bistream to the FPGA Flash (persistent bitstream)
48 |
49 | ### On pico-ice:
50 |
51 | ```python
52 | from machine import Pin
53 | import ice
54 | file = open("bitstream.bin", "br")
55 | flash = ice.flash(miso=Pin(8), mosi=Pin(11), sck=Pin(10), cs=Pin(9))
56 | flash.erase(4096) # Optional
57 | flash.write(file)
58 | # Optional
59 | fpga = ice.fpga(cdone=Pin(26), clock=Pin(24), creset=Pin(27), cram_cs=Pin(9), cram_mosi=Pin(8), cram_sck=Pin(10), frequency=48)
60 | fpga.start()
61 | ```
62 |
63 | ### On pico2-ice:
64 |
65 | ```python
66 | from machine import Pin
67 | import ice
68 | file = open("bitstream.bin", "br")
69 | flash = ice.flash(miso=Pin(4), mosi=Pin(7), sck=Pin(6), cs=Pin(5))
70 | flash.erase(4096) # Optional
71 | flash.write(file)
72 | # Optional
73 | fpga = ice.fpga(cdone=Pin(40), clock=Pin(21), creset=Pin(31), cram_cs=Pin(5), cram_mosi=Pin(4), cram_sck=Pin(6), frequency=48)
74 | fpga.start()
75 | ```
76 |
--------------------------------------------------------------------------------
/Docs/pinout.md:
--------------------------------------------------------------------------------
1 | # Pinout Diagram
2 |
3 | This diagram shows the ICE40 and RP2040 names for the through holes on the pico-ice board.
4 |
5 |
6 | 
7 |
8 | [SVG](pinout/pinout.svg)
9 | | [PNG](pinout/pinout.png)
10 | | [RP2040](https://www.raspberrypi.com/documentation/pico-sdk/hardware.html#autotoc_md0)
11 | | [ICE40](https://www.latticesemi.com/view_document?document_id=51971)
12 |
13 |
14 | ## With RTL on the iCE40
15 |
16 | To program the FPGA, one needs to tell the synthesis tools which pins to connect to the signals in your RTL. There are two different ways to name the pins. The wafer names are words like `IOB_6a` and `IOT_8b`, and the pin numbers have names like `ICE_2`, `ICE_3`, and `ICE_4`.
17 | Both sets of names can be found in this [PCF file](https://github.com/tinyvision-ai-inc/pico-ice-sdk/blob/main/rtl/pico_ice.pcf).
18 |
19 | For Amaranth, until this gets upstreamed, the various board resources including its pins are defined on
20 | [`pico_ice.py`](https://github.com/tinyvision-ai-inc/pico-ice-sdk/blob/main/amaranth/pico_ice.py).
21 |
22 |
23 | ## With code on the RP2040
24 |
25 | The FPGA pins and other signals are defined in [`pico_ice.h`](https://github.com/tinyvision-ai-inc/pico-ice-sdk/blob/main/include/boards/pico_ice.h).
26 |
27 | The PMOD pins can also be accessed from
28 | [`pmod.h`](https://github.com/tinyvision-ai-inc/pico-ice-sdk/blob/main/include/pmod.h) and
29 | [`ice_pmod.h`](https://github.com/tinyvision-ai-inc/pico-ice-sdk/blob/main/include/ice_pmod.h).
30 |
31 | ## SPI Pinouts
32 |
33 | For debugging the FPGA <-> SPI <-> Flash/RAM interface it is very helpful to use the 4 through holes on the upper right of the FPGA, and to connect a logic analyzer to the upper right PMOD. These two diagrams may help. Remember that the default boot process leaves the Flash switched ``off``. With the Yosys icepack command, the ``-s`` option boots the Flash in the ``on`` state.
34 |
35 | 
36 | 
37 |
38 |
--------------------------------------------------------------------------------
/Docs/pinout/Makefile:
--------------------------------------------------------------------------------
1 | all:
2 | rm -f pinout.svg pinout.png
3 | python3 -m pinout.manager --export pinout_diagram.py pinout.svg
4 | chromium --headless --screenshot --window-size=1112,1010 pinout.svg
5 | mv screenshot.png pinout.png
6 |
--------------------------------------------------------------------------------
/Docs/pinout/pico_ice_front.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Docs/pinout/pico_ice_front.png
--------------------------------------------------------------------------------
/Docs/pinout/pinout.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Docs/pinout/pinout.png
--------------------------------------------------------------------------------
/Docs/pinout/pinout_diagram.py:
--------------------------------------------------------------------------------
1 | from pinout.core import Group, Image
2 | from pinout.components.layout import Diagram_2Rows
3 | from pinout.components.pinlabel import PinLabelGroup, PinLabel
4 | from pinout.components.text import TextBlock
5 | from pinout.components import leaderline as lline
6 | from pinout.components.legend import Legend
7 |
8 |
9 | # Import data for the diagram
10 | import data
11 |
12 | # Create a new diagram
13 | # The Diagram_2Rows class provides 2 panels,
14 | # 'panel_01' and 'panel_02', to insert components into.
15 | diagram = Diagram_2Rows(1112, 1010, 880, "diagram")
16 |
17 | # Add a stylesheet
18 | diagram.add_stylesheet("styles.css", embed=True)
19 |
20 | # Create a group to hold the pinout-diagram components.
21 | graphic = diagram.panel_01.add(Group(400, 42))
22 |
23 | # Add and embed an image
24 | hardware = graphic.add(Image("pico_ice_front.png", x=-50, y=-70, embed=True))
25 |
26 | # Measure and record key locations with the hardware Image instance
27 | pin_pitch_v = 34.9
28 | pin_start_y = 63
29 | hardware.add_coord("left", 100, pin_start_y)
30 | hardware.add_coord("right", 307, pin_start_y)
31 | # Other (x,y) pairs can also be stored here
32 | hardware.add_coord("pin_pitch_v", 0, pin_pitch_v)
33 |
34 | graphic.add(
35 | PinLabel(
36 | content="",
37 | x=hardware.coord("right").x,
38 | y=hardware.coord("right").y,
39 | tag="pmod",
40 | body={"x": 57, "y": 227, "width": 370, "height": 210},
41 | )
42 | )
43 | graphic.add(
44 | PinLabel(
45 | content="",
46 | x=hardware.coord("right").x,
47 | y=hardware.coord("right").y,
48 | tag="pmod",
49 | body={"x": 57, "y": 541, "width": 370, "height": 210},
50 | )
51 | )
52 | graphic.add(
53 | PinLabel(
54 | content="",
55 | x=hardware.coord("left").x,
56 | y=hardware.coord("left").y,
57 | tag="pmod",
58 | body={"x": -(370 + 57), "y": 227, "width": 370, "height": 210},
59 | )
60 | )
61 | graphic.add(
62 | PinLabel(
63 | content="",
64 | x=hardware.coord("left").x,
65 | y=hardware.coord("left").y,
66 | tag="pmod",
67 | body={"x": -(370 + 57), "y": 541, "width": 370, "height": 210},
68 | )
69 | )
70 |
71 | # Create pinlabels on the left header
72 | graphic.add(
73 | PinLabelGroup(
74 | x=hardware.coord("left").x,
75 | y=hardware.coord("left").y,
76 | pin_pitch=hardware.coord("pin_pitch_v", raw=True),
77 | label_start=(60, 0),
78 | label_pitch=(0, pin_pitch_v),
79 | scale=(-1, 1),
80 | labels=data.left_header,
81 | )
82 | )
83 |
84 | # Create pinlabels on the left header
85 | graphic.add(
86 | PinLabelGroup(
87 | x=hardware.coord("right").x,
88 | y=hardware.coord("right").y,
89 | pin_pitch=hardware.coord("pin_pitch_v", raw=True),
90 | label_start=(60, 0),
91 | label_pitch=(0, pin_pitch_v),
92 | scale=(1, 1),
93 | labels=data.right_header,
94 | )
95 | )
96 |
97 |
98 | # Create a title and description text-blocks
99 | title_block = diagram.panel_02.add(
100 | TextBlock(
101 | data.title,
102 | x=20,
103 | y=30,
104 | line_height=18,
105 | tag="panel title_block",
106 | )
107 | )
108 | diagram.panel_02.add(
109 | TextBlock(
110 | data.description,
111 | x=20,
112 | y=60,
113 | width=title_block.width,
114 | height=diagram.panel_02.height - title_block.height,
115 | line_height=18,
116 | tag="panel text_block",
117 | )
118 | )
119 |
120 | # Create a legend
121 | legend = diagram.panel_02.add(
122 | Legend(
123 | data.legend,
124 | x=340,
125 | y=8,
126 | max_height=132,
127 | )
128 | )
129 |
130 | # Export the diagram via commandline:
131 | # >>> py -m pinout.manager --export pinout_diagram.py diagram.svg
132 |
--------------------------------------------------------------------------------
/Docs/pinout/spi_bus_black.odp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Docs/pinout/spi_bus_black.odp
--------------------------------------------------------------------------------
/Docs/pinout/spi_bus_black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Docs/pinout/spi_bus_black.png
--------------------------------------------------------------------------------
/Docs/pinout/spi_bus_white.odp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Docs/pinout/spi_bus_white.odp
--------------------------------------------------------------------------------
/Docs/pinout/spi_bus_white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Docs/pinout/spi_bus_white.png
--------------------------------------------------------------------------------
/Docs/pinout/styles.css:
--------------------------------------------------------------------------------
1 | text {
2 | font-family: Verdana, Georgia, sans-serif;
3 | font-size: 14px;
4 | font-weight: normal;
5 | }
6 |
7 | .pinlabel__leader{
8 | stroke-width: 2;
9 | fill: none;
10 | }
11 | .pinlabel__text{
12 | dominant-baseline: central;
13 | fill: #fff;
14 | font-weight: bold;
15 | stroke-width: 0;
16 | text-anchor: middle;
17 | }
18 |
19 | .pmod .pinlabel__body{
20 | fill: hsl(0 0% 60%);
21 | }
22 | .pmod .swatch__body {
23 | fill: hsl(0 0% 60%);
24 | }
25 |
26 | .pin_rpi .pinlabel__body{
27 | fill: hsl(290 100% 25%);
28 | }
29 | .pin_rpi .pinlabel__leader{
30 | stroke: hsl(290 100% 25%);
31 | }
32 | .pin_rpi .swatch__body {
33 | fill: hsl(290 100% 25%);
34 | }
35 |
36 | .pin_ice .pinlabel__body{
37 | fill: hsl(320 100% 25%);
38 | }
39 | .pin_ice .pinlabel__leader{
40 | stroke: hsl(320 100% 25%);
41 | }
42 | .pin_ice .swatch__body {
43 | fill: hsl(320 100% 25%);
44 | }
45 |
46 | .pwr .pinlabel__body{
47 | fill: hsl(0 100% 25%);
48 | }
49 | .pwr .pinlabel__leader{
50 | stroke: hsl(0 100% 25%);
51 | }
52 | .pwr .swatch__body {
53 | fill: hsl(0 100% 25%);
54 | }
55 |
56 | .gnd .pinlabel__body{
57 | fill: hsl(0 0% 0%);
58 | }
59 | .gnd .pinlabel__leader{
60 | stroke: hsl(0 0% 0%);
61 | }
62 | .gnd .swatch__body {
63 | fill: hsl(0 0% 0%);
64 | }
65 |
66 | .panel__inner {
67 | fill: #fff;
68 | }
69 | .panel__outer {
70 | fill: #333;
71 | }
72 | .panel--info .panel__inner{
73 | fill: #f4f4f4;
74 | }
75 |
76 | .legendentry text {
77 | dominant-baseline: central;
78 | }
79 |
80 | .h1 {
81 | font-size: 26px;
82 | font-weight: bold;
83 | font-style: italic;
84 | }
85 | .italic{
86 | font-style: italic;
87 | }
88 | .strong{
89 | font-weight: bold;
90 | }
91 |
--------------------------------------------------------------------------------
/Docs/pmods.md:
--------------------------------------------------------------------------------
1 | # Using Pmods
2 |
3 | The Pmod Connection system is using a grid of 2 rows and 6 columns of pins.
4 |
5 | It was designed by Digilent to offer something compatible with both classical jumper wires used on breadboards,
6 | and a standardised pinout that supports multiple protocols on the same connector.
7 |
8 | This is popular on FPGA boards as it permits them to support any protocol over
9 | the same connector with the right pinout, rarely possible on MCUs.
10 |
11 | This standard is documented [here](https://reference.digilentinc.com/_media/reference/pmod/pmodoledrgb/pmodoledrgb_sch.pdf).
12 |
13 | ## Pmod in the pico-ice
14 |
15 | Here is an [example of how to solder](md_getting__started.html#autotoc_md2) the Pmod connectors.
16 |
17 | There are 4 Pmod connectors in the pico-ice, numbered clockwise from 1 to 4 starting from the USB connector.
18 |
19 | - 2 connected ot the iCE40
20 | - 1 connected to both the RP2040 and iCE40
21 | - 1 connected to the RP2040
22 |
23 | The pinout of the RP2040 is made to be compatible with SPI0,
24 | with the other protocols that may be bit-banged or implemented with PIO to be pin-compatible.
25 |
26 | For the iCE40, the pin numbers are available from
27 | [pico_ice.pcf](https://github.com/tinyvision-ai-inc/pico-ice-sdk/blob/main/rtl/pico_ice.pcf).
28 |
29 | For the RP2040, the pin numbers are available from
30 | [ice_pmod.h](https://github.com/tinyvision-ai-inc/pico-ice-sdk/blob/main/include/ice_pmod.h).
31 |
32 | You can then use any of the pinout declaration described
33 | [here](https://github.com/tinyvision-ai-inc/pico-ice-sdk/blob/main/include/pmod.h).
34 |
35 | // Use the pins from their GPIO names
36 | gpio_init(ice_pmod_3.gpio.io1);
37 | gpio_init(ice_pmod_3.gpio.io2);
38 | gpio_init(ice_pmod_3.gpio.io3);
39 | gpio_init(ice_pmod_3.gpio.io4);
40 | gpio_init(ice_pmod_3.gpio.io7);
41 | gpio_init(ice_pmod_3.gpio.io8);
42 | gpio_init(ice_pmod_3.gpio.io9);
43 | gpio_init(ice_pmod_3.gpio.io10);
44 |
45 | // Use the pins from their I²C names
46 | gpio_init(ice_pmod_3.i2c.sda);
47 | gpio_init(ice_pmod_3.i2c.scl);
48 |
49 | // Use the pins from their UART names
50 | gpio_init(ice_pmod_3.i2c.tx);
51 | gpio_init(ice_pmod_3.i2c.rx);
52 |
53 | // Use the pins from their SPI names
54 | gpio_set_function(ice_pmod_3.spi.copi, FUNC_SPI);
55 | gpio_set_function(ice_pmod_3.spi.cipo, FUNC_SPI);
56 | gpio_set_function(ice_pmod_3.spi.clk, FUNC_SPI);
57 |
58 | // Access the top or bottom row individually
59 | gpio_set_function(ice_pmod_3.row.top.spi.copi, FUNC_SPI);
60 | gpio_set_function(ice_pmod_3.row.bottom.spi.copi, FUNC_SPI);
61 |
62 | [...]
63 |
64 |
65 | ## Pmod Modules
66 |
67 | There are many Pmod vendors, and this page attempts to enumerate as many as possible.
68 |
69 | If you have made a Pmod module, let us know and we would add it to this list!
70 |
71 | -
72 | -
73 | -
74 | -
75 | -
76 | -
77 | -
78 | -
79 | -
80 | -
81 | -
82 | -
83 | -
84 | -
85 | -
86 | -
87 | -
88 | -
89 |
--------------------------------------------------------------------------------
/Docs/programming_the_mcu.md:
--------------------------------------------------------------------------------
1 | # Programming the RP2040
2 |
3 | To upload a new firmware image on the PR2040 (the "pico" part of "pico-ice"), you need to switch to that RP2040 UF2 bootloader mode instead of the FPGA UF2 mode.
4 |
5 | You can do that by connecting a jumper between the `BT` pin a `Gnd` pin, then press the `RESET` button:
6 |
7 | 1. Connect the `USB_BOOT` pin to ground. For instance with a pair of tweezers, a jumper, or an uncoated paper clip.
8 |
9 | 2. Press and release the "RESET" button. The RP2040 now bypasses its firmware, and runs the RP2040 factory bootloader (from internal ROM) instead.
10 |
11 | 3. Disconnect the `USB_BOOT` pin from ground.
12 |
13 | 4. Look for an USB drive named `RPI-RP2` and mount it, open it, and check that there are only 2 files in it: `INFO.HTML` and `INFO_UF2.TXT`.
14 | If you also have an `CURRENT.UF2`, this means you found the FPGA flashing interface, and need to retry steps 1 and 2.
15 |
16 | 5. Copy the `.uf2` firmware file onto the USB drive.
17 |
18 | 6. Eject the USB drive.
19 | At this step, the firmware should be uploaded and running.
20 |
21 | 
22 |
23 |
24 | Since version [`v1.6.1`](https://github.com/tinyvision-ai-inc/pico-ice/releases),
25 | it is possible to reboot the pico-ice into bootloader "BOOTSEL" mode without jumpers:
26 |
27 | picocom --baud 1200 /dev/ttyACM0
28 |
29 | This uses the [convention established by Arduino boards](https://arduino.github.io/arduino-cli/dev/platform-specification/#1200-bps-bootloader-reset)
30 | which reset into bootloader mode when connecting with baud 1200.
31 |
32 | After this, it becomes possible to use the [picotool](https://github.com/raspberrypi/picotool) to control the firmware (upload, check version, reboot):
33 |
34 | $ sudo picotool info
35 | Program Information
36 | name: pico_ice_default
37 | features: USB stdin / stdout
38 |
39 |
40 | ## Troubleshooting
41 |
42 |
43 | ### RPI-RP2 is still visible after step 6
44 |
45 | This means the device remained in "bootloader" mode.
46 | One thing to check is that the `USB_BOOT` pin (marked `BT` on the board) is not connected to anything anymore,
47 | then try to reset the board.
48 |
--------------------------------------------------------------------------------
/Firmware/pico-ice-default/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/Firmware/pico-ice-default/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.13)
2 |
3 | # import the pico-sdk
4 | set(PICO_SDK_PATH ${CMAKE_CURRENT_SOURCE_DIR}/pico-sdk/)
5 | include(pico_sdk_import.cmake)
6 |
7 | # configure the pico-sdk project
8 | project(pico_ice_default C CXX ASM)
9 | pico_sdk_init()
10 |
11 | # add the pico-ice-sdk
12 | add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/pico-ice-sdk/)
13 | add_compile_definitions(VERSION=\"${PICO_ICE_SDK_VERSION}\")
14 |
15 | # add the local files
16 | add_executable(${CMAKE_PROJECT_NAME}
17 | main.c
18 | usb_descriptors.c
19 | )
20 | target_link_libraries(${CMAKE_PROJECT_NAME}
21 | pico_ice_sdk
22 | pico_ice_usb
23 | pico_stdio_usb
24 | )
25 | target_include_directories(${CMAKE_PROJECT_NAME} PUBLIC
26 | ${CMAKE_CURRENT_LIST_DIR}
27 | )
28 | pico_add_extra_outputs(${CMAKE_PROJECT_NAME})
29 | pico_enable_stdio_usb(${CMAKE_PROJECT_NAME} 0)
30 | pico_enable_stdio_uart(${CMAKE_PROJECT_NAME} 0)
31 |
--------------------------------------------------------------------------------
/Firmware/pico-ice-default/README.md:
--------------------------------------------------------------------------------
1 | # Default Firmware
2 |
3 | Downloads: [releases](https://github.com/tinyvision-ai-inc/pico-ice/releases/)
4 |
5 | - A first USB-UART (#0) is used for the and a REPL command line interface
6 | for now only showing help message and version information.
7 |
8 | - A second USB-UART (#1) is used for mirroring everything between
9 | this USB interface UART TX on RP0 with ICE27, UART RX on RP1 with ICE25.
10 |
11 | - A third USB-UART (#2) is exchanging data with the main SPI bus onboard
12 | ([doc](https://pico-ice.tinyvision.ai/ice_usb.html#usb-spi-fpgasramflash-forwarding)).
13 |
14 | - A 12 MHz clock is exported from the RP2040 pin 24 toward the iCE40 pin 35.
15 |
16 | - An USB DFU interface allows programming through [dfu-utils](https://dfu-util.sourceforge.net/)
17 | as shipped with [oss-cad-suite](https://github.com/YosysHQ/oss-cad-suite-build).
18 |
19 | - An USB MSC interface allows programming the board by copying a file to an USB device
20 | ([doc](https://pico-ice.tinyvision.ai/programming_the_fpga.html#using-a-drag-drop-or-file-copy-scheme)).
21 |
22 | See the [documentation](https://pico-ice.tinyvision.ai/) for how to use them.
23 |
--------------------------------------------------------------------------------
/Firmware/pico-ice-default/main.c:
--------------------------------------------------------------------------------
1 | /*
2 | * MIT License
3 | *
4 | * Copyright (c) 2023 tinyVision.ai
5 | *
6 | * Permission is hereby granted, free of charge, to any person obtaining a copy
7 | * of this software and associated documentation files (the "Software"), to deal
8 | * in the Software without restriction, including without limitation the rights
9 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 | * copies of the Software, and to permit persons to whom the Software is
11 | * furnished to do so, subject to the following conditions:
12 | *
13 | * The above copyright notice and this permission notice shall be included in all
14 | * copies or substantial portions of the Software.
15 | *
16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 | * SOFTWARE.
23 | */
24 |
25 | // pico-sdk
26 | #include "pico/stdio.h"
27 | #include "hardware/irq.h"
28 | #include "hardware/gpio.h"
29 | #include "hardware/uart.h"
30 |
31 | // pico-ice-sdk
32 | #include "ice_usb.h"
33 | #include "ice_fpga.h"
34 | #include "ice_led.h"
35 |
36 | #define UART_TX_PIN 0
37 | #define UART_RX_PIN 1
38 |
39 | #define DOC_FORWARD_SPI \
40 | "https://pico-ice.tinyvision.ai/group__ice__usb.html#autotoc_md2"
41 |
42 | #define DOC_DEFAULT_FIRMWARE \
43 | "https://github.com/tinyvision-ai-inc/pico-ice/tree/main/Firmware/pico-ice-default"
44 |
45 | // for repl_ungetchar() to take back the last character from repl_getchar():
46 | int repl_last_char;
47 | bool repl_last_held;
48 |
49 | static int repl_getchar(void)
50 | {
51 | int c;
52 |
53 | if (repl_last_held) {
54 | repl_last_held = false;
55 | return repl_last_char;
56 | }
57 |
58 | c = getchar_timeout_us(0);
59 | if (c == PICO_ERROR_TIMEOUT)
60 | return c;
61 |
62 | if (c == '\r' || c == '\n') {
63 | printf("\r\n");
64 | } else {
65 | putchar(c);
66 | }
67 | return c;
68 | }
69 |
70 | static void repl_ungetchar(int c)
71 | {
72 | assert(!repl_last_held);
73 | repl_last_char = c;
74 | repl_last_held = true;
75 | }
76 |
77 | static inline bool repl_parse_error(char *msg, char c)
78 | {
79 | // reset whatever was being input
80 | repl_last_held = false;
81 |
82 | printf("\nerror: expected %s got '%c'\n", msg, c);
83 | return false;
84 | }
85 |
86 | static bool repl_parse_newline(void)
87 | {
88 | int c;
89 |
90 | switch (c = repl_getchar()) {
91 | case '\r':
92 | case '\n':
93 | case EOF:
94 | return true;
95 | default:
96 | repl_ungetchar(c);
97 | return repl_parse_error("newline", c);
98 | }
99 | }
100 |
101 | static void repl_command_version(void)
102 | {
103 | if (!repl_parse_newline()) {
104 | return;
105 | }
106 | printf("pico-ice-sdk %s\r\n", VERSION);
107 | }
108 |
109 | static void repl_prompt(void)
110 | {
111 | printf("\x1b[1mpico-ice>\x1b[m ");
112 | }
113 |
114 | int main(void)
115 | {
116 | // Enable USB-CDC #0 (serial console)
117 | stdio_init_all();
118 |
119 | // Enable the physical UART
120 | uart_init(uart0, 115200);
121 | gpio_set_function(UART_TX_PIN, GPIO_FUNC_UART);
122 | gpio_set_function(UART_RX_PIN, GPIO_FUNC_UART);
123 |
124 | // Let the FPGA start
125 | ice_fpga_init(12);
126 | ice_fpga_start();
127 |
128 | // Configure USB as defined in tusb_config.h
129 | ice_usb_init();
130 |
131 | // Prevent the LEDs from glowing slightly
132 | ice_led_init();
133 |
134 | // Print repl prompt
135 | repl_prompt();
136 |
137 | while (true) {
138 | tud_task();
139 |
140 | int chr = repl_getchar();
141 | if (chr == PICO_ERROR_TIMEOUT)
142 | continue;
143 |
144 | // not timeout, something received
145 |
146 | switch (chr) {
147 | case 'v':
148 | repl_command_version();
149 | break;
150 | default:
151 | printf("\r\n");
152 | printf("pico-ice default firmware\r\n", VERSION);
153 | printf(" %s\r\n", DOC_DEFAULT_FIRMWARE);
154 | printf("\r\n");
155 | printf("Serial port #0 - this shell, with commands:\r\n");
156 | printf(" v - print pico-ice-sdk version\r\n");
157 | printf("\r\n");
158 | printf("Serial port #1 - forwarding to UART\r\n");
159 | printf(" UART TX on RP0 = ICE27\r\n");
160 | printf(" UART RX on RP1 = ICE25\r\n");
161 | printf("\r\n");
162 | printf("Serial port #2 - forwarding to SPI:\r\n");
163 | printf(" %s\r\n", DOC_FORWARD_SPI);
164 | printf("\r\n");
165 | break;
166 | }
167 |
168 | // reprint prompt
169 | repl_prompt();
170 | }
171 |
172 | return 0;
173 | }
174 |
--------------------------------------------------------------------------------
/Firmware/pico-ice-default/pico-ice-sdk:
--------------------------------------------------------------------------------
1 | ../pico-ice-sdk
--------------------------------------------------------------------------------
/Firmware/pico-ice-default/pico-sdk:
--------------------------------------------------------------------------------
1 | ../pico-sdk
--------------------------------------------------------------------------------
/Firmware/pico-ice-default/pico_sdk_import.cmake:
--------------------------------------------------------------------------------
1 | # This is a copy of /external/pico_sdk_import.cmake
2 |
3 | # This can be dropped into an external project to help locate this SDK
4 | # It should be include()ed prior to project()
5 |
6 | if (DEFINED ENV{PICO_SDK_PATH} AND (NOT PICO_SDK_PATH))
7 | set(PICO_SDK_PATH $ENV{PICO_SDK_PATH})
8 | message("Using PICO_SDK_PATH from environment ('${PICO_SDK_PATH}')")
9 | endif ()
10 |
11 | if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT} AND (NOT PICO_SDK_FETCH_FROM_GIT))
12 | set(PICO_SDK_FETCH_FROM_GIT $ENV{PICO_SDK_FETCH_FROM_GIT})
13 | message("Using PICO_SDK_FETCH_FROM_GIT from environment ('${PICO_SDK_FETCH_FROM_GIT}')")
14 | endif ()
15 |
16 | if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_PATH} AND (NOT PICO_SDK_FETCH_FROM_GIT_PATH))
17 | set(PICO_SDK_FETCH_FROM_GIT_PATH $ENV{PICO_SDK_FETCH_FROM_GIT_PATH})
18 | message("Using PICO_SDK_FETCH_FROM_GIT_PATH from environment ('${PICO_SDK_FETCH_FROM_GIT_PATH}')")
19 | endif ()
20 |
21 | set(PICO_SDK_PATH "${PICO_SDK_PATH}" CACHE PATH "Path to the Raspberry Pi Pico SDK")
22 | set(PICO_SDK_FETCH_FROM_GIT "${PICO_SDK_FETCH_FROM_GIT}" CACHE BOOL "Set to ON to fetch copy of SDK from git if not otherwise locatable")
23 | set(PICO_SDK_FETCH_FROM_GIT_PATH "${PICO_SDK_FETCH_FROM_GIT_PATH}" CACHE FILEPATH "location to download SDK")
24 |
25 | if (NOT PICO_SDK_PATH)
26 | if (PICO_SDK_FETCH_FROM_GIT)
27 | include(FetchContent)
28 | set(FETCHCONTENT_BASE_DIR_SAVE ${FETCHCONTENT_BASE_DIR})
29 | if (PICO_SDK_FETCH_FROM_GIT_PATH)
30 | get_filename_component(FETCHCONTENT_BASE_DIR "${PICO_SDK_FETCH_FROM_GIT_PATH}" REALPATH BASE_DIR "${CMAKE_SOURCE_DIR}")
31 | endif ()
32 | # GIT_SUBMODULES_RECURSE was added in 3.17
33 | if (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.17.0")
34 | FetchContent_Declare(
35 | pico_sdk
36 | GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk
37 | GIT_TAG master
38 | GIT_SUBMODULES_RECURSE FALSE
39 | )
40 | else ()
41 | FetchContent_Declare(
42 | pico_sdk
43 | GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk
44 | GIT_TAG master
45 | )
46 | endif ()
47 |
48 | if (NOT pico_sdk)
49 | message("Downloading Raspberry Pi Pico SDK")
50 | FetchContent_Populate(pico_sdk)
51 | set(PICO_SDK_PATH ${pico_sdk_SOURCE_DIR})
52 | endif ()
53 | set(FETCHCONTENT_BASE_DIR ${FETCHCONTENT_BASE_DIR_SAVE})
54 | else ()
55 | message(FATAL_ERROR
56 | "SDK location was not specified. Please set PICO_SDK_PATH or set PICO_SDK_FETCH_FROM_GIT to on to fetch from git."
57 | )
58 | endif ()
59 | endif ()
60 |
61 | get_filename_component(PICO_SDK_PATH "${PICO_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}")
62 | if (NOT EXISTS ${PICO_SDK_PATH})
63 | message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' not found")
64 | endif ()
65 |
66 | set(PICO_SDK_INIT_CMAKE_FILE ${PICO_SDK_PATH}/pico_sdk_init.cmake)
67 | if (NOT EXISTS ${PICO_SDK_INIT_CMAKE_FILE})
68 | message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' does not appear to contain the Raspberry Pi Pico SDK")
69 | endif ()
70 |
71 | set(PICO_SDK_PATH ${PICO_SDK_PATH} CACHE PATH "Path to the Raspberry Pi Pico SDK" FORCE)
72 |
73 | include(${PICO_SDK_INIT_CMAKE_FILE})
74 |
--------------------------------------------------------------------------------
/Firmware/pico-ice-default/tusb_config.h:
--------------------------------------------------------------------------------
1 | /*
2 | * The MIT License (MIT)
3 | *
4 | * Copyright (c) 2019 Ha Thach (tinyusb.org)
5 | * Copyright (c) 2022 TinyVision.ai Inc.
6 | *
7 | * Permission is hereby granted, free of charge, to any person obtaining a copy
8 | * of this software and associated documentation files (the "Software"), to deal
9 | * in the Software without restriction, including without limitation the rights
10 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 | * copies of the Software, and to permit persons to whom the Software is
12 | * furnished to do so, subject to the following conditions:
13 | *
14 | * The above copyright notice and this permission notice shall be included in
15 | * all copies or substantial portions of the Software.
16 | *
17 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23 | * THE SOFTWARE.
24 | */
25 | #pragma once
26 |
27 | // pico-ice-sdk
28 | #include "ice_flash.h"
29 | #include "boards/pico_ice.h"
30 |
31 | // RHPort number used for device can be defined by board.mk, port 0 for pico-ice
32 | #define BOARD_DEVICE_RHPORT_NUM 0
33 |
34 | // Device mode with rhport and speed defined by board.mk
35 | #define CFG_TUSB_RHPORT0_MODE OPT_MODE_DEVICE
36 |
37 | // Either full or high speed supported by RP2040
38 | #define BOARD_DEVICE_RHPORT_SPEED OPT_MODE_FULL_SPEED
39 |
40 | // Enable Device stack
41 | #define CFG_TUD_ENABLED 1
42 |
43 | // Default is max speed that hardware controller could support with on-chip PHY
44 | #define CFG_TUD_MAX_SPEED OPT_MODE_FULL_SPEED
45 |
46 | // Device classes
47 | #define CFG_TUD_CDC 3
48 | #define CFG_TUD_MSC 1
49 | #define CFG_TUD_DFU 1
50 | #define CFG_TUD_DFU_ALT 2
51 | #define CFG_TUD_HID 0
52 | #define CFG_TUD_MIDI 0
53 | #define CFG_TUD_VENDOR 0
54 |
55 | // Configure the TinyUF2 drag-and-drop to USB drive for FPGA-programming
56 | #define ICE_USB_USE_TINYUF2_MSC 1
57 |
58 | // Configure 2-way forwarding between USB CDC1 and UART
59 | #define ICE_USB_UART0_CDC 1
60 |
61 | // Configure 2-way forwarding between USB CDC2 and SPI
62 | #define ICE_USB_SPI_CDC 2
63 |
64 | // CDC FIFO size of TX and RX and Endpoint buffer size
65 | #define CFG_TUD_CDC_RX_BUFSIZE 512
66 | #define CFG_TUD_CDC_TX_BUFSIZE 512
67 | #define CFG_TUD_CDC_EP_BUFSIZE 512
68 |
69 | // MSC Buffer size of Device Mass storage
70 | #define CFG_TUD_MSC_BUFSIZE ICE_FLASH_SECTOR_SIZE
71 |
72 | // Must be a multiple of flash page size
73 | #define CFG_TUD_DFU_XFER_BUFSIZE 256
74 |
--------------------------------------------------------------------------------
/Firmware/pico-ice-default/usb_descriptors.c:
--------------------------------------------------------------------------------
1 | /*
2 | * The MIT License (MIT)
3 | *
4 | * Copyright (c) 2019 Ha Thach (tinyusb.org)
5 | * Copyright (c) 2022 TinyVision.ai Inc.
6 | *
7 | * Permission is hereby granted, free of charge, to any person obtaining a copy
8 | * of this software and associated documentation files (the "Software"), to deal
9 | * in the Software without restriction, including without limitation the rights
10 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 | * copies of the Software, and to permit persons to whom the Software is
12 | * furnished to do so, subject to the following conditions:
13 | *
14 | * The above copyright notice and this permission notice shall be included in
15 | * all copies or substantial portions of the Software.
16 | *
17 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23 | * THE SOFTWARE.
24 | */
25 |
26 | #include "ice_usb.h"
27 |
28 | enum {
29 | ITF_NUM_CDC0, ITF_NUM_CDC0_DATA,
30 | ITF_NUM_CDC1, ITF_NUM_CDC1_DATA,
31 | ITF_NUM_CDC2, ITF_NUM_CDC2_DATA,
32 | ITF_NUM_MSC0,
33 | ITF_NUM_DFU,
34 | ITF_NUM_TOTAL
35 | };
36 |
37 | uint8_t const tud_desc_configuration[CONFIG_TOTAL_LEN] = {
38 | TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 500/*mA*/),
39 | TUD_CDC_DESCRIPTOR(ITF_NUM_CDC0, STRID_CDC+0, EPIN+1, 8, EPOUT+2, EPIN+2, 64),
40 | TUD_CDC_DESCRIPTOR(ITF_NUM_CDC1, STRID_CDC+1, EPIN+3, 8, EPOUT+4, EPIN+4, 64),
41 | TUD_CDC_DESCRIPTOR(ITF_NUM_CDC2, STRID_CDC+2, EPIN+5, 8, EPOUT+6, EPIN+6, 64),
42 | TUD_MSC_DESCRIPTOR(ITF_NUM_MSC0, STRID_MSC+0, EPOUT+7, EPIN+7, 64),
43 | TUD_DFU_DESCRIPTOR(ITF_NUM_DFU, CFG_TUD_DFU_ALT, STRID_DFU, DFU_ATTR_CAN_DOWNLOAD, 1000, CFG_TUD_DFU_XFER_BUFSIZE),
44 | };
45 |
46 | char const *tud_string_desc[STRID_NUM_TOTAL] = {
47 | [STRID_LANGID] = USB_LANG_EN,
48 | [STRID_MANUFACTURER] = USB_MANUFACTURER,
49 | [STRID_PRODUCT] = USB_PRODUCT,
50 | [STRID_SERIAL_NUMBER] = usb_serial_number,
51 | [STRID_VENDOR] = USB_VENDOR,
52 | [STRID_CDC+0] = "RP2040 logs",
53 | [STRID_CDC+1] = "iCE40 UART",
54 | [STRID_CDC+2] = "SPI",
55 | [STRID_MSC+0] = "iCE40 MSC (Flash)",
56 | [STRID_DFU+0] = "iCE40 DFU (Flash)",
57 | [STRID_DFU+1] = "iCE40 DFU (CRAM)",
58 | };
59 |
--------------------------------------------------------------------------------
/Firmware/pico-ice-test-jig-mpy/final.bit:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Firmware/pico-ice-test-jig-mpy/final.bit
--------------------------------------------------------------------------------
/Firmware/pico-ice-test-jig-mpy/flash_final_rp2040.py:
--------------------------------------------------------------------------------
1 | from machine import Pin
2 | import ice
3 | file = open("final.bit", "br")
4 | flash = ice.flash(miso=Pin(8), mosi=Pin(11), sck=Pin(10), cs=Pin(9))
5 | flash.write(file)
6 | print("Done flashing")
--------------------------------------------------------------------------------
/Firmware/pico-ice-test-jig-mpy/flash_final_rp2350.py:
--------------------------------------------------------------------------------
1 | from machine import Pin
2 | import ice
3 | file = open("final.bit", "br")
4 | flash = ice.flash(miso=Pin(4), mosi=Pin(7), sck=Pin(6), cs=Pin(5))
5 | flash.write(file)
6 | print("Done flashing")
--------------------------------------------------------------------------------
/Firmware/pico-ice-test-jig-mpy/main_rp2040.py:
--------------------------------------------------------------------------------
1 | from machine import Pin
2 | import ice
3 | fpga = ice.fpga(cdone=Pin(26), clock=Pin(24), creset=Pin(27), cram_cs=Pin(9), cram_mosi=Pin(8), cram_sck=Pin(10), frequency=48)
4 | fpga.start()
--------------------------------------------------------------------------------
/Firmware/pico-ice-test-jig-mpy/main_rp2350.py:
--------------------------------------------------------------------------------
1 | from machine import Pin
2 | import ice
3 | fpga = ice.fpga(cdone=Pin(40), clock=Pin(21), creset=Pin(31), cram_cs=Pin(5), cram_mosi=Pin(4), cram_sck=Pin(6), frequency=48)
4 | fpga.start()
--------------------------------------------------------------------------------
/Firmware/pico-ice-test-jig-mpy/mfg_pico-ice.ps1:
--------------------------------------------------------------------------------
1 | $DeviceId = $null
2 | echo "Insert Boot mode pico-ice and remove the jumper"
3 | while ($DeviceId -eq $null) {
4 | Start-Sleep -Seconds 1
5 | $DeviceId = Get-WmiObject Win32_logicaldisk| ? {$_.DriveType -eq 2} | Select-Object -Property DeviceId
6 | $DeviceId = $DeviceId.DeviceId
7 | }
8 | echo "Flashing..."
9 | Copy-Item "pico_ice.uf2" -Destination $DeviceId
10 | echo "Done, Waiting Until Disk shows up again, You may need to unplug and re-plug the device if windows decided so"
11 | Start-Sleep -Seconds 2
12 |
13 | #$DeviceId = $null
14 | #while ($DeviceId -eq $null) {
15 | # Start-Sleep -Seconds 1
16 | # $DeviceId = Get-WmiObject Win32_logicaldisk| ? {$_.DriveType -eq 2} | Select-Object -Property DeviceId
17 | # $DeviceId = $DeviceId.DeviceId
18 | #}
19 | echo "Copying test.bit"
20 | mpremote cp test_pico_ice.bit :test.bit
21 | Start-Sleep -Seconds 1
22 |
23 | echo "Running tests"
24 | mpremote run run_tests_rp2040.py
25 | if($?) {
26 | echo "Tests Successful... Deleting files and flashing factory FPGA firmware"
27 | mpremote rm :test.bit
28 | mpremote cp final.bit :
29 | Start-Sleep -Seconds 1
30 | mpremote run flash_final_rp2040.py
31 | mpremote rm :final.bit
32 | mpremote cp main_rp2040.py :main.py
33 | }
34 | else
35 | {
36 | echo "*** Tests failed! ***"
37 | }
38 |
--------------------------------------------------------------------------------
/Firmware/pico-ice-test-jig-mpy/mfg_pico2-ice.ps1:
--------------------------------------------------------------------------------
1 | $DeviceId = $null
2 | echo "Insert Boot mode pico-ice and remove the jumper"
3 | while ($DeviceId -eq $null) {
4 | Start-Sleep -Seconds 1
5 | $DeviceId = Get-WmiObject Win32_logicaldisk| ? {$_.DriveType -eq 2} | Select-Object -Property DeviceId
6 | $DeviceId = $DeviceId.DeviceId
7 | }
8 | echo "Flashing..."
9 | Copy-Item "pico2_ice.uf2" -Destination $DeviceId
10 | echo "Done, Waiting Until Disk shows up again, You may need to unplug and re-plug the device if windows decided so"
11 | $DeviceId = $null
12 | while ($DeviceId -eq $null) {
13 | Start-Sleep -Seconds 1
14 | $DeviceId = Get-WmiObject Win32_logicaldisk| ? {$_.DriveType -eq 2} | Select-Object -Property DeviceId
15 | $DeviceId = $DeviceId.DeviceId
16 | }
17 | #Start-Sleep -Seconds 2
18 | echo "Copying test.bit"
19 | mpremote cp test_pico2_ice.bit :test.bit
20 | echo "Running tests"
21 | mpremote run run_tests_rp2350.py
22 | if($?) {
23 | echo "Tests Successful... Deleting files and flashing factory FPGA firmware"
24 | mpremote rm :test.bit
25 | mpremote cp final.bit :
26 | mpremote run flash_final_rp2350.py
27 | mpremote rm :final.bit
28 | mpremote cp main_rp2350.py :main.py
29 | }
30 | else
31 | {
32 | echo "Tests unSuccessful..."
33 | }
34 |
--------------------------------------------------------------------------------
/Firmware/pico-ice-test-jig-mpy/pico2_ice.uf2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Firmware/pico-ice-test-jig-mpy/pico2_ice.uf2
--------------------------------------------------------------------------------
/Firmware/pico-ice-test-jig-mpy/pico_ice.uf2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Firmware/pico-ice-test-jig-mpy/pico_ice.uf2
--------------------------------------------------------------------------------
/Firmware/pico-ice-test-jig-mpy/rtl_pico2_ice/Makefile:
--------------------------------------------------------------------------------
1 | PROJECT = pico_ice_bitstream
2 |
3 | ICEPACK = icepack
4 | NEXTPNR = nextpnr-ice40 --randomize-seed --up5k --package sg48
5 | YOSYS = yosys
6 | BIN2UF2 = bin2uf2
7 | DFU-UTIL = dfu-util -R -a 1
8 | DFU-SUFFIX = dfu-suffix -v 1209 -p b1c0
9 |
10 | PICO_ICE_SDK = ../../pico-ice-sdk/
11 | PCF_FILE = pico_ice.pcf
12 | RTL = top.sv
13 |
14 | all: $(PROJECT).bit
15 |
16 | clean:
17 | rm -f *.log *.json *.asc *.bit *.dfu *.uf2
18 | rm -rf verilator
19 |
20 | flash: pico_ice_bitstream.dfu
21 | $(DFU-UTIL) -D $(PROJECT).dfu
22 |
23 | pico_ice_bitstream.json: ${RTL}
24 |
25 | .SUFFIXES: .sv .elf .vcd .json .asc .bit .dfu .uf2
26 |
27 | $(PROJECT).json: $(RTL)
28 | ${YOSYS} -p "read_verilog -sv ${RTL}; synth_ice40 -top top -json $@" >$*.yosys.log
29 | -grep -i -e err -e warn $*.yosys.log
30 |
31 | .json.asc:
32 | ${NEXTPNR} -q -l $*.nextpnr.log --pcf $(PCF_FILE) --top top --json $< --asc $@
33 |
34 | .asc.bit:
35 | ${ICEPACK} $< $@
36 |
37 | .bit.uf2:
38 | $(BIN2UF2) -o $@ 0x00000000 $<
39 |
40 | .bit.dfu:
41 | cp $< $@
42 | $(DFU-SUFFIX) -a $@
43 |
--------------------------------------------------------------------------------
/Firmware/pico-ice-test-jig-mpy/rtl_pico2_ice/pico_ice.pcf:
--------------------------------------------------------------------------------
1 | set_io -nowarn ICE_2 2
2 | set_io -nowarn ICE_3 3
3 | set_io -nowarn ICE_4 4
4 | set_io -nowarn ICE_6 6
5 | set_io -nowarn ICE_9 9
6 | set_io -nowarn ICE_10 10
7 | set_io -nowarn ICE_11 11
8 | set_io -nowarn ICE_12 12
9 | set_io -nowarn ICE_13 13
10 | set_io -nowarn ICE_14 14
11 | set_io -nowarn ICE_15 15
12 | set_io -nowarn ICE_16 16
13 | set_io -nowarn ICE_17 17
14 | set_io -nowarn ICE_18 18
15 | set_io -nowarn ICE_19 19
16 | set_io -nowarn ICE_20 20
17 | set_io -nowarn ICE_21 21
18 | set_io -nowarn ICE_23 23
19 | set_io -nowarn ICE_25 25
20 | set_io -nowarn ICE_26 26
21 | set_io -nowarn ICE_27 27
22 | set_io -nowarn ICE_28 28
23 | set_io -nowarn ICE_31 31
24 | set_io -nowarn ICE_32 32
25 | set_io -nowarn ICE_34 34
26 | set_io -nowarn ICE_35 35
27 | set_io -nowarn ICE_36 36
28 | set_io -nowarn ICE_37 37
29 | set_io -nowarn ICE_38 38
30 | set_io -nowarn ICE_42 42
31 | set_io -nowarn ICE_43 43
32 | set_io -nowarn ICE_44 44
33 | set_io -nowarn ICE_45 45
34 | set_io -nowarn ICE_46 46
35 | set_io -nowarn ICE_47 47
36 | set_io -nowarn ICE_48 48
37 | set_io -nowarn LED_G 39
38 | set_io -nowarn LED_B 40
39 | set_io -nowarn LED_R 41
40 |
--------------------------------------------------------------------------------
/Firmware/pico-ice-test-jig-mpy/rtl_pico2_ice/top.sv:
--------------------------------------------------------------------------------
1 | module top (
2 | input ICE_2,
3 | input ICE_3,
4 | output ICE_4,
5 | input ICE_6,
6 | output ICE_9,
7 | input ICE_10,
8 | output ICE_11,
9 | input ICE_12,
10 | output ICE_13,
11 | input ICE_14,
12 | output ICE_15,
13 | output ICE_16,
14 | input ICE_17,
15 | output ICE_18,
16 | input ICE_19,
17 | input ICE_20,
18 | output ICE_21,
19 | input ICE_23,
20 | output ICE_25,
21 | input ICE_26,
22 | output ICE_27,
23 | input ICE_28,
24 | output ICE_31,
25 | output ICE_32,
26 | input ICE_34,
27 | output ICE_35,
28 | input ICE_36,
29 | input ICE_37,
30 | output ICE_38,
31 | output ICE_42,
32 | input ICE_43,
33 | output ICE_44,
34 | output ICE_45,
35 | input ICE_46,
36 | input ICE_47,
37 | output ICE_48,
38 |
39 | output LED_G,
40 | );
41 |
42 | // logic output signal to drive from something else
43 | logic ICE_4_o, ICE_9_o, ICE_11_o, ICE_13_o, ICE_15_o, ICE_16_o, ICE_18_o;
44 | logic ICE_25_o, ICE_27_o, ICE_31_o, ICE_32_o, ICE_35_o, ICE_38_o, ICE_42_o;
45 | logic ICE_44_o, ICE_45_o, ICE_48_o;
46 |
47 | // signals
48 | logic high_z;
49 |
50 | // turn the LED white when pushing a button
51 |
52 | SB_RGBA_DRV #(
53 | .CURRENT_MODE("0b1"), // half current
54 | .RGB0_CURRENT("0b000001"), // 4 mA
55 | .RGB1_CURRENT("0b000001"), // 4 mA
56 | .RGB2_CURRENT("0b000001") // 4 mA
57 | ) rgba_drv (
58 | .CURREN(1'b1),
59 | .RGBLEDEN(1'b1),
60 | .RGB0(LED_G), .RGB0PWM(high_z),
61 | );
62 |
63 | SB_IO #(
64 | .PIN_TYPE(6'b1010_01),
65 | .PULLUP(1'b0)
66 | ) output_pins [16:0] (
67 | .OUTPUT_ENABLE(
68 | !high_z
69 | ),
70 | .PACKAGE_PIN({
71 | ICE_4, ICE_9, ICE_11, ICE_13, ICE_15, ICE_16, ICE_18,
72 | ICE_25, ICE_27, ICE_31, ICE_32, ICE_35, ICE_38, ICE_42,
73 | ICE_44, ICE_45, ICE_48
74 | }),
75 | .D_OUT_0({
76 | ICE_4_o, ICE_9_o, ICE_11_o, ICE_13_o, ICE_15_o, ICE_16_o, ICE_18_o,
77 | ICE_25_o, ICE_27_o, ICE_31_o, ICE_32_o, ICE_35_o, ICE_38_o, ICE_42_o,
78 | ICE_44_o, ICE_45_o, ICE_48_o
79 | })
80 | );
81 |
82 | // pin chain
83 | // │ ......................
84 | // │ .' '. │
85 | //ICE_12█ █ ICE_16█───█ICE_14
86 | // │ │ : │
87 | //ICE_13█ █ ICE_17█───█ICE_15
88 | // ├──:────┐ ┌─:─────┤
89 | // │ █: █ │ ICE_25█───█ICE_23
90 | // │ : │ │ : │
91 | // │ █: █ │ ICE_19█───█ICE_18
92 | // │ : │ │ : │
93 | //ICE_28█───█ICE_31 <--ICE_27█ █ICE_26<--
94 | // │ : │ │ .' │
95 | //ICE_32█───█ICE_34 btn/ICE_21█.' █ICE_20/high-z
96 | // │ : │ │.' │
97 | //ICE_36█───█ICE_38 .'
98 | // │ : │ .'
99 | //ICE_42█───█ICE_43 .'
100 | // ├─:─────┘ .'
101 | //ICE_37█───█ICE_35 .'
102 | // │ : :
103 | //ICE_11█───█ICE_6 :
104 | // │ : :
105 | //ICE_10█───█ICE_9 :
106 | // PB ├────:──┐ :
107 | // │ █ :█ │ :
108 | // │ : │ :
109 | // │ █ :█ │ :
110 | // │ : │ :
111 | //ICE_48█───█ICE_47 :
112 | // │ : │ :
113 | //ICE_46█───█ICE_45 :
114 | // │ : │ :
115 | //ICE_44█───█ICE_2 :
116 | // │ : │ .'
117 | // ICE_3█───█ICE_4'
118 | // ├───────┘
119 | assign ICE_4_o = ICE_26;
120 | assign ICE_48_o = ICE_46;
121 | assign ICE_45_o = ICE_2;
122 | assign ICE_44_o = ICE_3;
123 | assign ICE_9_o = ICE_47;
124 | assign ICE_11_o = ICE_10;
125 | assign ICE_35_o = ICE_6;
126 | assign ICE_42_o = ICE_37;
127 | assign ICE_38_o = ICE_43;
128 | assign ICE_32_o = ICE_36;
129 | assign ICE_31_o = ICE_34;
130 | assign ICE_13_o = ICE_28;
131 | assign ICE_16_o = ICE_12;
132 | assign ICE_15_o = ICE_14;
133 | assign ICE_25_o = ICE_17;
134 | assign ICE_18_o = ICE_23;
135 | assign ICE_27_o = ICE_19;
136 |
137 | // button forwarding
138 | assign ICE_21 = ICE_10;
139 |
140 | // signal from the RP2040
141 | assign high_z = ICE_20;
142 |
143 | endmodule
144 |
--------------------------------------------------------------------------------
/Firmware/pico-ice-test-jig-mpy/rtl_pico_ice/Makefile:
--------------------------------------------------------------------------------
1 | PROJECT = pico_ice_bitstream
2 |
3 | ICEPACK = icepack
4 | NEXTPNR = nextpnr-ice40 --randomize-seed --up5k --package sg48
5 | YOSYS = yosys
6 | BIN2UF2 = bin2uf2
7 | DFU-UTIL = dfu-util -R -a 1
8 | DFU-SUFFIX = dfu-suffix -v 1209 -p b1c0
9 |
10 | PICO_ICE_SDK = ../../pico-ice-sdk/
11 | PCF_FILE = pico_ice.pcf
12 | RTL = top.sv
13 |
14 | all: $(PROJECT).bit
15 |
16 | clean:
17 | rm -f *.log *.json *.asc *.bit *.dfu *.uf2
18 | rm -rf verilator
19 |
20 | flash: pico_ice_bitstream.dfu
21 | $(DFU-UTIL) -D $(PROJECT).dfu
22 |
23 | pico_ice_bitstream.json: ${RTL}
24 |
25 | .SUFFIXES: .sv .elf .vcd .json .asc .bit .dfu .uf2
26 |
27 | $(PROJECT).json: $(RTL)
28 | ${YOSYS} -p "read_verilog -sv ${RTL}; synth_ice40 -top top -json $@" >$*.yosys.log
29 | -grep -i -e err -e warn $*.yosys.log
30 |
31 | .json.asc:
32 | ${NEXTPNR} -q -l $*.nextpnr.log --pcf $(PCF_FILE) --top top --json $< --asc $@
33 |
34 | .asc.bit:
35 | ${ICEPACK} $< $@
36 |
37 | .bit.uf2:
38 | $(BIN2UF2) -o $@ 0x00000000 $<
39 |
40 | .bit.dfu:
41 | cp $< $@
42 | $(DFU-SUFFIX) -a $@
43 |
--------------------------------------------------------------------------------
/Firmware/pico-ice-test-jig-mpy/rtl_pico_ice/pico_ice.pcf:
--------------------------------------------------------------------------------
1 | set_io -nowarn ICE_2 2
2 | set_io -nowarn ICE_3 3
3 | set_io -nowarn ICE_4 4
4 | set_io -nowarn ICE_6 6
5 | set_io -nowarn ICE_9 9
6 | set_io -nowarn ICE_10 10
7 | set_io -nowarn ICE_11 11
8 | set_io -nowarn ICE_12 12
9 | set_io -nowarn ICE_13 13
10 | set_io -nowarn ICE_14 14
11 | set_io -nowarn ICE_15 15
12 | set_io -nowarn ICE_16 16
13 | set_io -nowarn ICE_17 17
14 | set_io -nowarn ICE_18 18
15 | set_io -nowarn ICE_19 19
16 | set_io -nowarn ICE_20 20
17 | set_io -nowarn ICE_21 21
18 | set_io -nowarn ICE_23 23
19 | set_io -nowarn ICE_25 25
20 | set_io -nowarn ICE_26 26
21 | set_io -nowarn ICE_27 27
22 | set_io -nowarn ICE_28 28
23 | set_io -nowarn ICE_31 31
24 | set_io -nowarn ICE_32 32
25 | set_io -nowarn ICE_34 34
26 | set_io -nowarn ICE_35 35
27 | set_io -nowarn ICE_36 36
28 | set_io -nowarn ICE_37 37
29 | set_io -nowarn ICE_38 38
30 | set_io -nowarn ICE_42 42
31 | set_io -nowarn ICE_43 43
32 | set_io -nowarn ICE_44 44
33 | set_io -nowarn ICE_45 45
34 | set_io -nowarn ICE_46 46
35 | set_io -nowarn ICE_47 47
36 | set_io -nowarn ICE_48 48
37 | set_io -nowarn LED_G 39
38 | set_io -nowarn LED_B 40
39 | set_io -nowarn LED_R 41
40 |
--------------------------------------------------------------------------------
/Firmware/pico-ice-test-jig-mpy/rtl_pico_ice/top.sv:
--------------------------------------------------------------------------------
1 | module top (
2 | input ICE_2,
3 | input ICE_3,
4 | output ICE_4,
5 | input ICE_6,
6 | output ICE_9,
7 | input ICE_10,
8 | output ICE_11,
9 | input ICE_12,
10 | output ICE_13,
11 | input ICE_14,
12 | output ICE_15,
13 | output ICE_16,
14 | input ICE_17,
15 | output ICE_18,
16 | input ICE_19,
17 | input ICE_20,
18 | output ICE_21,
19 | input ICE_23,
20 | output ICE_25,
21 | input ICE_26,
22 | output ICE_27,
23 | input ICE_28,
24 | output ICE_31,
25 | output ICE_32,
26 | input ICE_34,
27 | output ICE_35,
28 | input ICE_36,
29 | input ICE_37,
30 | output ICE_38,
31 | output ICE_42,
32 | input ICE_43,
33 | output ICE_44,
34 | input ICE_45,
35 | input ICE_46,
36 | output ICE_47,
37 | output ICE_48,
38 |
39 | output LED_G,
40 | );
41 |
42 | // logic output signal to drive from something else
43 | logic ICE_4_o, ICE_9_o, ICE_11_o, ICE_13_o, ICE_15_o, ICE_16_o, ICE_18_o;
44 | logic ICE_25_o, ICE_27_o, ICE_31_o, ICE_32_o, ICE_35_o, ICE_38_o, ICE_42_o;
45 | logic ICE_44_o, ICE_47_o, ICE_48_o;
46 |
47 | // signals
48 | logic high_z;
49 |
50 | // turn the LED white when pushing a button
51 |
52 | SB_RGBA_DRV #(
53 | .CURRENT_MODE("0b1"), // half current
54 | .RGB0_CURRENT("0b000001"), // 4 mA
55 | .RGB1_CURRENT("0b000001"), // 4 mA
56 | .RGB2_CURRENT("0b000001") // 4 mA
57 | ) rgba_drv (
58 | .CURREN(1'b1),
59 | .RGBLEDEN(1'b1),
60 | .RGB0(LED_G), .RGB0PWM(high_z),
61 | );
62 |
63 | SB_IO #(
64 | .PIN_TYPE(6'b1010_01),
65 | .PULLUP(1'b0)
66 | ) output_pins [16:0] (
67 | .OUTPUT_ENABLE(
68 | !high_z
69 | ),
70 | .PACKAGE_PIN({
71 | ICE_4, ICE_9, ICE_11, ICE_13, ICE_15, ICE_16, ICE_18,
72 | ICE_25, ICE_27, ICE_31, ICE_32, ICE_35, ICE_38, ICE_42,
73 | ICE_44, ICE_47, ICE_48
74 | }),
75 | .D_OUT_0({
76 | ICE_4_o, ICE_9_o, ICE_11_o, ICE_13_o, ICE_15_o, ICE_16_o, ICE_18_o,
77 | ICE_25_o, ICE_27_o, ICE_31_o, ICE_32_o, ICE_35_o, ICE_38_o, ICE_42_o,
78 | ICE_44_o, ICE_47_o, ICE_48_o
79 | })
80 | );
81 |
82 | // pin chain
83 | // │ ......................
84 | // │ .' '. │
85 | //ICE_12█ █ ICE_16█───█ICE_14
86 | // │ │ : │
87 | //ICE_13█ █ ICE_17█───█ICE_15
88 | // ├──:────┐ ┌─:─────┤
89 | // │ █: █ │ ICE_25█───█ICE_23
90 | // │ : │ │ : │
91 | // │ █: █ │ ICE_19█───█ICE_18
92 | // │ : │ │ : │
93 | //ICE_28█───█ICE_31 <--ICE_27█ █ICE_26<--
94 | // │ : │ │ .' │
95 | //ICE_32█───█ICE_34 btn/ICE_21█.' █ICE_20/high-z
96 | // │ : │ │.' │
97 | //ICE_36█───█ICE_38 .'
98 | // │ : │ .'
99 | //ICE_42█───█ICE_43 .'
100 | // ├─:─────┘ .'
101 | //ICE_37█───█ICE_35 .'
102 | // │ : :
103 | //ICE_11█───█ICE_6 :
104 | // │ : :
105 | //ICE_10█───█ICE_9 :
106 | // PB ├────:──┐ :
107 | // │ █ :█ │ :
108 | // │ : │ :
109 | // │ █ :█ │ :
110 | // │ : │ :
111 | //ICE_44█───█ICE_45 :
112 | // │ : │ :
113 | //ICE_46█───█ICE_47 :
114 | // │ : │ :
115 | //ICE_48█───█ICE_2 :
116 | // │ : │ .'
117 | // ICE_3█───█ICE_4'
118 | // ├───────┘
119 | assign ICE_4_o = ICE_26;
120 | assign ICE_48_o = ICE_3;
121 | assign ICE_47_o = ICE_2;
122 | assign ICE_44_o = ICE_46;
123 | assign ICE_9_o = ICE_45;
124 | assign ICE_11_o = ICE_10;
125 | assign ICE_35_o = ICE_6;
126 | assign ICE_42_o = ICE_37;
127 | assign ICE_38_o = ICE_43;
128 | assign ICE_32_o = ICE_36;
129 | assign ICE_31_o = ICE_34;
130 | assign ICE_13_o = ICE_28;
131 | assign ICE_16_o = ICE_12;
132 | assign ICE_15_o = ICE_14;
133 | assign ICE_25_o = ICE_17;
134 | assign ICE_18_o = ICE_23;
135 | assign ICE_27_o = ICE_19;
136 |
137 | // button forwarding
138 | assign ICE_21 = ICE_10;
139 |
140 | // signal from the RP2040
141 | assign high_z = ICE_20;
142 |
143 | endmodule
144 |
--------------------------------------------------------------------------------
/Firmware/pico-ice-test-jig-mpy/test_pico2_ice.bit:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Firmware/pico-ice-test-jig-mpy/test_pico2_ice.bit
--------------------------------------------------------------------------------
/Firmware/pico-ice-test-jig-mpy/test_pico_ice.bit:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/7b054a5a0666cf8a13e8a61515bee6b28ad6ca5c/Firmware/pico-ice-test-jig-mpy/test_pico_ice.bit
--------------------------------------------------------------------------------
/Firmware/pico-ice-test-jig/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 | *.bit
3 | *.asc
4 | *.json
5 | *.log
6 | *.dfu
7 |
--------------------------------------------------------------------------------
/Firmware/pico-ice-test-jig/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.13)
2 |
3 | set(PICO_SDK_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../pico-sdk)
4 | include(pico_sdk_import.cmake)
5 |
6 | project(pico_ice_test_jig C CXX ASM)
7 |
8 | pico_sdk_init()
9 |
10 | add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../pico-ice-sdk pico-ice-sdk)
11 |
12 | add_executable(pico_ice_test_jig
13 | src/main.c
14 | src/usb_descriptors.c
15 | )
16 | target_link_libraries(pico_ice_test_jig
17 | pico_ice_sdk
18 | pico_ice_usb
19 | pico_stdio_usb
20 | tinyusb_device
21 | )
22 | target_include_directories(pico_ice_test_jig PUBLIC
23 | ${CMAKE_CURRENT_LIST_DIR}/include
24 | )
25 | pico_enable_stdio_usb(pico_ice_test_jig 1)
26 | pico_add_extra_outputs(pico_ice_test_jig)
27 |
28 | set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g")
29 |
--------------------------------------------------------------------------------
/Firmware/pico-ice-test-jig/README.md:
--------------------------------------------------------------------------------
1 | # Automated Testing of the pico-ice
2 |
3 | This firmware is meant for testing all connections of the board with a rig as described below.
4 |
5 | ## Test process
6 |
7 | 1. load the firmware.uf2 onto the RP2040 (drag-and-drop)
8 | 2. load the bitstream.bin onto the iCE40 (dfu-util)
9 | 3. reset the board (SW1)
10 | 4. press the button to start the test outside of the jig (SW2), it should turn blue
11 | 5. put the board onto the jig
12 | 6. press the button to start the test inside of the jig (SW2), it should turn green
13 | 7. at the end, to ease debugging, the FPGA is still programmable, and a square wave
14 | of 10 Hz is sent through the whole chain, which permits to observe where it
15 | eventually stops.
16 |
17 | ## Color code
18 |
19 | - GREEN boards passed the test, can be loaded with a blinky.
20 | - RED boards need troubleshooting, and USB UART has the full log detail
21 | - BLINKING boards are ready to be packaged and shipped.
22 |
23 | ## Test jig
24 |
25 | - There are horizontal (`─`) physical connections made with wires, except around `ICE_12` and `ICE_13` that are instead connected with each other vertically (`│`).
26 | - The vertical connections (`:`) and long connections (`....`) are made internally by the FPGA.
27 |
28 | Together, these connecitons are building a test chain on the FPGA, whose input is controlled by the RP2040 which performs tests and report with the LED color.
29 |
30 | ```
31 | ┌────────────────────────────────┐
32 | │ │
33 | │ │
34 | │ ...................... │
35 | │ .' '. │
36 | ICE_12█ █ ICE_16█───█ICE_14
37 | │ │ : │
38 | ICE_13█ █ ICE_17█───█ICE_15
39 | ├──:────┐ ┌─:─────┤
40 | │ █: █ │ ICE_25█───█ICE_23
41 | │ : │ │ : │
42 | │ █: █ │ ICE_19█───█ICE_18
43 | │ : │ │ : │
44 | ICE_28█───█ICE_31 <--ICE_27█ █ICE_26<--
45 | │ : │ │ .' │
46 | ICE_32█───█ICE_34 btn/ICE_21█.' █ICE_20/high-z
47 | │ : │ │.' │
48 | ICE_36█───█ICE_38 .' █ █ │
49 | │ : │ .' │ │
50 | ICE_42█───█ICE_43 .' │ █ █ │
51 | ├─:─────┘ .' └───────┤
52 | ICE_37█───█ICE_35 .' GPIO26█───█GPIO15
53 | │ : : │
54 | ICE_11█───█ICE_6 : GPIO28█───█GPIO13
55 | │ : : │
56 | ICE_10█───█ICE_9 : GPIO29█───█GPIO12
57 | PB ├────:──┐ : ┌───────┤
58 | │ █ :█ │ : GPIO16█───█GPIO20
59 | │ : │ : │ │
60 | │ █ :█ │ : GPIO17█───█GPIO21
61 | │ : │ : │ │
62 | ICE_44█───█ICE_45 : GPIO18█───█GPIO22
63 | │ : │ : │ │
64 | ICE_46█───█ICE_47 : GPIO19█───█GPIO23
65 | │ : │ : │ │
66 | ICE_48█───█ICE_2 : │ █ █ │
67 | │ : │ .' │ │
68 | ICE_3█───█ICE_4' │ █ █ │
69 | ├───────┘ └───────┤
70 | SWDIO█ █ █ █ │
71 | │ │
72 | SWCLK█ █ █ █ │
73 | │ ││||||||||││ │
74 | GPIO25█ █ O O █ █ │
75 | │ │ │ │
76 | │ │ │ │
77 | │ o o │
78 | │ │ │ │
79 | └─────────┴────────────┴─────────┘
80 | ```
81 |
--------------------------------------------------------------------------------
/Firmware/pico-ice-test-jig/include/tusb_config.h:
--------------------------------------------------------------------------------
1 | /*
2 | * The MIT License (MIT)
3 | *
4 | * Copyright (c) 2019 Ha Thach (tinyusb.org)
5 | * Copyright (c) 2022 TinyVision.ai Inc.
6 | *
7 | * Permission is hereby granted, free of charge, to any person obtaining a copy
8 | * of this software and associated documentation files (the "Software"), to deal
9 | * in the Software without restriction, including without limitation the rights
10 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 | * copies of the Software, and to permit persons to whom the Software is
12 | * furnished to do so, subject to the following conditions:
13 | *
14 | * The above copyright notice and this permission notice shall be included in
15 | * all copies or substantial portions of the Software.
16 | *
17 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23 | * THE SOFTWARE.
24 | */
25 | #pragma once
26 | #include "hardware/flash.h"
27 |
28 | // RHPort number used for device can be defined by board.mk, port 0 for pico-ice
29 | #define BOARD_DEVICE_RHPORT_NUM 0
30 |
31 | // Device mode with rhport and speed defined by board.mk
32 | #define CFG_TUSB_RHPORT0_MODE OPT_MODE_DEVICE
33 |
34 | // Either full or high speed supported by RP2040
35 | #define BOARD_DEVICE_RHPORT_SPEED OPT_MODE_FULL_SPEED
36 |
37 | // Enable Device stack
38 | #define CFG_TUD_ENABLED 1
39 |
40 | // Default is max speed that hardware controller could support with on-chip PHY
41 | #define CFG_TUD_MAX_SPEED OPT_MODE_FULL_SPEED
42 |
43 | // Device classes
44 | #define CFG_TUD_CDC 1
45 | #define CFG_TUD_MSC 0
46 | #define CFG_TUD_DFU 1
47 | #define CFG_TUD_DFU_ALT 2
48 | #define CFG_TUD_HID 0
49 | #define CFG_TUD_MIDI 0
50 | #define CFG_TUD_VENDOR 0
51 |
52 | // Use implementation from the pico-ice-sdk or not
53 | #define ICE_USB_USE_DEFAULT_DESCRIPTOR 1
54 | #define ICE_USB_USE_DEFAULT_CDC 1
55 | #define ICE_USB_USE_DEFAULT_DFU 1
56 |
57 | // CDC FIFO size of TX and RX and Endpoint buffer size
58 | #define CFG_TUD_CDC_RX_BUFSIZE 512
59 | #define CFG_TUD_CDC_TX_BUFSIZE 512
60 | #define CFG_TUD_CDC_EP_BUFSIZE 512
61 |
62 | // Must be a multiple of flash page size
63 | #define CFG_TUD_DFU_XFER_BUFSIZE 256
64 |
--------------------------------------------------------------------------------
/Firmware/pico-ice-test-jig/pico_sdk_import.cmake:
--------------------------------------------------------------------------------
1 | # This is a copy of /external/pico_sdk_import.cmake
2 |
3 | # This can be dropped into an external project to help locate this SDK
4 | # It should be include()ed prior to project()
5 |
6 | if (DEFINED ENV{PICO_SDK_PATH} AND (NOT PICO_SDK_PATH))
7 | set(PICO_SDK_PATH $ENV{PICO_SDK_PATH})
8 | message("Using PICO_SDK_PATH from environment ('${PICO_SDK_PATH}')")
9 | endif ()
10 |
11 | if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT} AND (NOT PICO_SDK_FETCH_FROM_GIT))
12 | set(PICO_SDK_FETCH_FROM_GIT $ENV{PICO_SDK_FETCH_FROM_GIT})
13 | message("Using PICO_SDK_FETCH_FROM_GIT from environment ('${PICO_SDK_FETCH_FROM_GIT}')")
14 | endif ()
15 |
16 | if (DEFINED ENV{PICO_SDK_FETCH_FROM_GIT_PATH} AND (NOT PICO_SDK_FETCH_FROM_GIT_PATH))
17 | set(PICO_SDK_FETCH_FROM_GIT_PATH $ENV{PICO_SDK_FETCH_FROM_GIT_PATH})
18 | message("Using PICO_SDK_FETCH_FROM_GIT_PATH from environment ('${PICO_SDK_FETCH_FROM_GIT_PATH}')")
19 | endif ()
20 |
21 | set(PICO_SDK_PATH "${PICO_SDK_PATH}" CACHE PATH "Path to the Raspberry Pi Pico SDK")
22 | set(PICO_SDK_FETCH_FROM_GIT "${PICO_SDK_FETCH_FROM_GIT}" CACHE BOOL "Set to ON to fetch copy of SDK from git if not otherwise locatable")
23 | set(PICO_SDK_FETCH_FROM_GIT_PATH "${PICO_SDK_FETCH_FROM_GIT_PATH}" CACHE FILEPATH "location to download SDK")
24 |
25 | if (NOT PICO_SDK_PATH)
26 | if (PICO_SDK_FETCH_FROM_GIT)
27 | include(FetchContent)
28 | set(FETCHCONTENT_BASE_DIR_SAVE ${FETCHCONTENT_BASE_DIR})
29 | if (PICO_SDK_FETCH_FROM_GIT_PATH)
30 | get_filename_component(FETCHCONTENT_BASE_DIR "${PICO_SDK_FETCH_FROM_GIT_PATH}" REALPATH BASE_DIR "${CMAKE_SOURCE_DIR}")
31 | endif ()
32 | # GIT_SUBMODULES_RECURSE was added in 3.17
33 | if (${CMAKE_VERSION} VERSION_GREATER_EQUAL "3.17.0")
34 | FetchContent_Declare(
35 | pico_sdk
36 | GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk
37 | GIT_TAG master
38 | GIT_SUBMODULES_RECURSE FALSE
39 | )
40 | else ()
41 | FetchContent_Declare(
42 | pico_sdk
43 | GIT_REPOSITORY https://github.com/raspberrypi/pico-sdk
44 | GIT_TAG master
45 | )
46 | endif ()
47 |
48 | if (NOT pico_sdk)
49 | message("Downloading Raspberry Pi Pico SDK")
50 | FetchContent_Populate(pico_sdk)
51 | set(PICO_SDK_PATH ${pico_sdk_SOURCE_DIR})
52 | endif ()
53 | set(FETCHCONTENT_BASE_DIR ${FETCHCONTENT_BASE_DIR_SAVE})
54 | else ()
55 | message(FATAL_ERROR
56 | "SDK location was not specified. Please set PICO_SDK_PATH or set PICO_SDK_FETCH_FROM_GIT to on to fetch from git."
57 | )
58 | endif ()
59 | endif ()
60 |
61 | get_filename_component(PICO_SDK_PATH "${PICO_SDK_PATH}" REALPATH BASE_DIR "${CMAKE_BINARY_DIR}")
62 | if (NOT EXISTS ${PICO_SDK_PATH})
63 | message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' not found")
64 | endif ()
65 |
66 | set(PICO_SDK_INIT_CMAKE_FILE ${PICO_SDK_PATH}/pico_sdk_init.cmake)
67 | if (NOT EXISTS ${PICO_SDK_INIT_CMAKE_FILE})
68 | message(FATAL_ERROR "Directory '${PICO_SDK_PATH}' does not appear to contain the Raspberry Pi Pico SDK")
69 | endif ()
70 |
71 | set(PICO_SDK_PATH ${PICO_SDK_PATH} CACHE PATH "Path to the Raspberry Pi Pico SDK" FORCE)
72 |
73 | include(${PICO_SDK_INIT_CMAKE_FILE})
74 |
--------------------------------------------------------------------------------
/Firmware/pico-ice-test-jig/rtl/Makefile:
--------------------------------------------------------------------------------
1 | PROJECT = pico_ice_bitstream
2 |
3 | ICEPACK = icepack
4 | NEXTPNR = nextpnr-ice40 --randomize-seed --up5k --package sg48
5 | YOSYS = yosys
6 | BIN2UF2 = bin2uf2
7 | DFU-UTIL = dfu-util -R -a 1
8 | DFU-SUFFIX = dfu-suffix -v 1209 -p b1c0
9 |
10 | PICO_ICE_SDK = ../../pico-ice-sdk/
11 | PCF_FILE = pico_ice.pcf
12 | RTL = top.sv
13 |
14 | all: $(PROJECT).bit
15 |
16 | clean:
17 | rm -f *.log *.json *.asc *.bit *.dfu *.uf2
18 | rm -rf verilator
19 |
20 | flash: pico_ice_bitstream.dfu
21 | $(DFU-UTIL) -D $(PROJECT).dfu
22 |
23 | pico_ice_bitstream.json: ${RTL}
24 |
25 | .SUFFIXES: .sv .elf .vcd .json .asc .bit .dfu .uf2
26 |
27 | $(PROJECT).json: $(RTL)
28 | ${YOSYS} -p "read_verilog -sv ${RTL}; synth_ice40 -top top -json $@" >$*.yosys.log
29 | -grep -i -e err -e warn $*.yosys.log
30 |
31 | .json.asc:
32 | ${NEXTPNR} -q -l $*.nextpnr.log --pcf $(PCF_FILE) --top top --json $< --asc $@
33 |
34 | .asc.bit:
35 | ${ICEPACK} $< $@
36 |
37 | .bit.uf2:
38 | $(BIN2UF2) -o $@ 0x00000000 $<
39 |
40 | .bit.dfu:
41 | cp $< $@
42 | $(DFU-SUFFIX) -a $@
43 |
--------------------------------------------------------------------------------
/Firmware/pico-ice-test-jig/rtl/pico_ice.pcf:
--------------------------------------------------------------------------------
1 | set_io -nowarn ICE_2 2
2 | set_io -nowarn ICE_3 3
3 | set_io -nowarn ICE_4 4
4 | set_io -nowarn ICE_6 6
5 | set_io -nowarn ICE_9 9
6 | set_io -nowarn ICE_10 10
7 | set_io -nowarn ICE_11 11
8 | set_io -nowarn ICE_12 12
9 | set_io -nowarn ICE_13 13
10 | set_io -nowarn ICE_14 14
11 | set_io -nowarn ICE_15 15
12 | set_io -nowarn ICE_16 16
13 | set_io -nowarn ICE_17 17
14 | set_io -nowarn ICE_18 18
15 | set_io -nowarn ICE_19 19
16 | set_io -nowarn ICE_20 20
17 | set_io -nowarn ICE_21 21
18 | set_io -nowarn ICE_23 23
19 | set_io -nowarn ICE_25 25
20 | set_io -nowarn ICE_26 26
21 | set_io -nowarn ICE_27 27
22 | set_io -nowarn ICE_28 28
23 | set_io -nowarn ICE_31 31
24 | set_io -nowarn ICE_32 32
25 | set_io -nowarn ICE_34 34
26 | set_io -nowarn ICE_35 35
27 | set_io -nowarn ICE_36 36
28 | set_io -nowarn ICE_37 37
29 | set_io -nowarn ICE_38 38
30 | set_io -nowarn ICE_42 42
31 | set_io -nowarn ICE_43 43
32 | set_io -nowarn ICE_44 44
33 | set_io -nowarn ICE_45 45
34 | set_io -nowarn ICE_46 46
35 | set_io -nowarn ICE_47 47
36 | set_io -nowarn ICE_48 48
37 | set_io -nowarn LED_G 39
38 | set_io -nowarn LED_B 40
39 | set_io -nowarn LED_R 41
40 |
--------------------------------------------------------------------------------
/Firmware/pico-ice-test-jig/rtl/top.sv:
--------------------------------------------------------------------------------
1 | module top (
2 | input ICE_2,
3 | input ICE_3,
4 | output ICE_4,
5 | input ICE_6,
6 | output ICE_9,
7 | input ICE_10,
8 | output ICE_11,
9 | input ICE_12,
10 | output ICE_13,
11 | input ICE_14,
12 | output ICE_15,
13 | output ICE_16,
14 | input ICE_17,
15 | output ICE_18,
16 | input ICE_19,
17 | input ICE_20,
18 | output ICE_21,
19 | input ICE_23,
20 | output ICE_25,
21 | input ICE_26,
22 | output ICE_27,
23 | input ICE_28,
24 | output ICE_31,
25 | output ICE_32,
26 | input ICE_34,
27 | output ICE_35,
28 | input ICE_36,
29 | input ICE_37,
30 | output ICE_38,
31 | output ICE_42,
32 | input ICE_43,
33 | output ICE_44,
34 | input ICE_45,
35 | input ICE_46,
36 | output ICE_47,
37 | output ICE_48,
38 |
39 | output LED_R,
40 | output LED_G,
41 | output LED_B
42 | );
43 |
44 | // logic output signal to drive from something else
45 | logic ICE_4_o, ICE_9_o, ICE_11_o, ICE_13_o, ICE_15_o, ICE_16_o, ICE_18_o;
46 | logic ICE_25_o, ICE_27_o, ICE_31_o, ICE_32_o, ICE_35_o, ICE_38_o, ICE_42_o;
47 | logic ICE_44_o, ICE_47_o, ICE_48_o;
48 |
49 | // signals
50 | logic high_z;
51 |
52 | // turn the LED white when pushing a button
53 |
54 | SB_RGBA_DRV #(
55 | .CURRENT_MODE("0b1"), // half current
56 | .RGB0_CURRENT("0b000001"), // 4 mA
57 | .RGB1_CURRENT("0b000001"), // 4 mA
58 | .RGB2_CURRENT("0b000001") // 4 mA
59 | ) rgba_drv (
60 | .CURREN(1'b1),
61 | .RGBLEDEN(1'b1),
62 | .RGB0(LED_G), .RGB0PWM(!ICE_10), // button pin
63 | .RGB1(LED_B), .RGB1PWM(!ICE_10), // button pin
64 | .RGB2(LED_R), .RGB2PWM(!ICE_10) // button pin
65 | );
66 |
67 | SB_IO #(
68 | .PIN_TYPE(6'b1010_01),
69 | .PULLUP(1'b0)
70 | ) output_pins [16:0] (
71 | .OUTPUT_ENABLE(
72 | !high_z
73 | ),
74 | .PACKAGE_PIN({
75 | ICE_4, ICE_9, ICE_11, ICE_13, ICE_15, ICE_16, ICE_18,
76 | ICE_25, ICE_27, ICE_31, ICE_32, ICE_35, ICE_38, ICE_42,
77 | ICE_44, ICE_47, ICE_48
78 | }),
79 | .D_OUT_0({
80 | ICE_4_o, ICE_9_o, ICE_11_o, ICE_13_o, ICE_15_o, ICE_16_o, ICE_18_o,
81 | ICE_25_o, ICE_27_o, ICE_31_o, ICE_32_o, ICE_35_o, ICE_38_o, ICE_42_o,
82 | ICE_44_o, ICE_47_o, ICE_48_o
83 | })
84 | );
85 |
86 | // pin chain
87 | // │ ......................
88 | // │ .' '. │
89 | //ICE_12█ █ ICE_16█───█ICE_14
90 | // │ │ : │
91 | //ICE_13█ █ ICE_17█───█ICE_15
92 | // ├──:────┐ ┌─:─────┤
93 | // │ █: █ │ ICE_25█───█ICE_23
94 | // │ : │ │ : │
95 | // │ █: █ │ ICE_19█───█ICE_18
96 | // │ : │ │ : │
97 | //ICE_28█───█ICE_31 <--ICE_27█ █ICE_26<--
98 | // │ : │ │ .' │
99 | //ICE_32█───█ICE_34 btn/ICE_21█.' █ICE_20/high-z
100 | // │ : │ │.' │
101 | //ICE_36█───█ICE_38 .'
102 | // │ : │ .'
103 | //ICE_42█───█ICE_43 .'
104 | // ├─:─────┘ .'
105 | //ICE_37█───█ICE_35 .'
106 | // │ : :
107 | //ICE_11█───█ICE_6 :
108 | // │ : :
109 | //ICE_10█───█ICE_9 :
110 | // PB ├────:──┐ :
111 | // │ █ :█ │ :
112 | // │ : │ :
113 | // │ █ :█ │ :
114 | // │ : │ :
115 | //ICE_44█───█ICE_45 :
116 | // │ : │ :
117 | //ICE_46█───█ICE_47 :
118 | // │ : │ :
119 | //ICE_48█───█ICE_2 :
120 | // │ : │ .'
121 | // ICE_3█───█ICE_4'
122 | // ├───────┘
123 | assign ICE_4_o = ICE_26;
124 | assign ICE_48_o = ICE_3;
125 | assign ICE_47_o = ICE_2;
126 | assign ICE_44_o = ICE_46;
127 | assign ICE_9_o = ICE_45;
128 | assign ICE_11_o = ICE_10;
129 | assign ICE_35_o = ICE_6;
130 | assign ICE_42_o = ICE_37;
131 | assign ICE_38_o = ICE_43;
132 | assign ICE_32_o = ICE_36;
133 | assign ICE_31_o = ICE_34;
134 | assign ICE_13_o = ICE_28;
135 | assign ICE_16_o = ICE_12;
136 | assign ICE_15_o = ICE_14;
137 | assign ICE_25_o = ICE_17;
138 | assign ICE_18_o = ICE_23;
139 | assign ICE_27_o = ICE_19;
140 |
141 | // button forwarding
142 | assign ICE_21 = ICE_10;
143 |
144 | // signal from the RP2040
145 | assign high_z = ICE_20;
146 |
147 | endmodule
148 |
--------------------------------------------------------------------------------
/Firmware/pico-ice-test-jig/src/usb_descriptors.c:
--------------------------------------------------------------------------------
1 | /*
2 | * The MIT License (MIT)
3 | *
4 | * Copyright (c) 2019 Ha Thach (tinyusb.org)
5 | * Copyright (c) 2022 TinyVision.ai Inc.
6 | *
7 | * Permission is hereby granted, free of charge, to any person obtaining a copy
8 | * of this software and associated documentation files (the "Software"), to deal
9 | * in the Software without restriction, including without limitation the rights
10 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 | * copies of the Software, and to permit persons to whom the Software is
12 | * furnished to do so, subject to the following conditions:
13 | *
14 | * The above copyright notice and this permission notice shall be included in
15 | * all copies or substantial portions of the Software.
16 | *
17 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23 | * THE SOFTWARE.
24 | */
25 | #include "ice_usb.h"
26 |
27 | enum {
28 | ITF_NUM_CDC0, ITF_NUM_CDC0_DATA,
29 | ITF_NUM_DFU,
30 | ITF_NUM_TOTAL
31 | };
32 |
33 | uint8_t const tud_desc_configuration[CONFIG_TOTAL_LEN] = {
34 | TUD_CONFIG_DESCRIPTOR(1, ITF_NUM_TOTAL, 0, CONFIG_TOTAL_LEN, 0x00, 500/*mA*/),
35 | TUD_CDC_DESCRIPTOR(ITF_NUM_CDC0, STRID_CDC+0, EPIN+1, 8, EPOUT+2, EPIN+2, 64),
36 | TUD_DFU_DESCRIPTOR(ITF_NUM_DFU, CFG_TUD_DFU_ALT, STRID_DFU, DFU_ATTR_CAN_DOWNLOAD, 1000, CFG_TUD_DFU_XFER_BUFSIZE),
37 | };
38 |
39 | char const *tud_string_desc[STRID_NUM_TOTAL] = {
40 | [STRID_LANGID] = USB_LANG_EN,
41 | [STRID_MANUFACTURER] = USB_MANUFACTURER,
42 | [STRID_PRODUCT] = USB_PRODUCT,
43 | [STRID_SERIAL_NUMBER] = usb_serial_number,
44 | [STRID_VENDOR] = USB_VENDOR,
45 | [STRID_CDC+0] = "RP2040 UART",
46 | [STRID_DFU+0] = "iCE40 DFU (flash)",
47 | [STRID_DFU+1] = "iCE40 DFU (CRAM)",
48 | };
49 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 tinyVision.ai
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # pico-ice
2 |
3 | [Doc](http://pico-ice.tinyvision.ai/)
4 | | [Hardware](https://github.com/tinyvision-ai-inc/pico-ice)
5 | | [SDK](https://github.com/tinyvision-ai-inc/pico-ice-sdk)
6 | | [Schematic](https://raw.githubusercontent.com/tinyvision-ai-inc/pico-ice/main/Board/Rev3/pico-ice.pdf)
7 | | [Assembly](https://htmlpreview.github.io/?https://github.com/tinyvision-ai-inc/pico-ice/blob/main/Board/Rev3/bom/ibom.html)
8 | | [Discord](https://discord.gg/t2CzbAYeD2)
9 |
10 | [](https://www.elecrow.com/pico-ice-rp2040-plus-lattice-ice40up5k-fpga.html)
11 | [](https://lectronz.com/stores/tinyvision-ai-store)
12 | [](https://www.tindie.com/stores/tinyvision_ai/?ref=offsite_badges&utm_source=sellers_vr2045&utm_medium=badges&utm_campaign=badge_small%22%3E)
13 |
14 | 
15 | 
16 |
17 | ## PCB Design Files, Designs, Documentation
18 |
19 | The pico-ice is a small, low cost board with the Raspberry Pi Pico processor (RP2040) and a Lattice Semiconductor iCE40UP5K FPGA. The board features independent flash for the FPGA and RP2040, low power SSRAM, a couple of pushbuttons and a 3 color LED with _all_ FPGA and RP2040 pins brought out to easy to use 0.1" header pins (arranged as PMOD's) for fast prototyping.
20 |
21 | The tinyVision.ai pico-ice Board Features:
22 |
23 | * RaspberryPi RP2040 processor
24 | * Lattice UltraPlus ICE40UP5K FPGA with 5.3K LUTs, 1Mb SPRAM, 120Kb DPRAM, 8 Multipliers
25 | * _ALL_ RP2040 and 32 FPGA GPIO on 0.1” headers
26 | * 4MB SPI Flash
27 | * 8MB low power qSPI SRAM
28 | * RGB LED, shared between the RP2040 and FPGA
29 | * 2 pushbuttons, 1 dedicated and 1 primarily for processor reset during development but can be repurposed for user applications when not used for reset
30 | * On board 3.3V and 1.2V Regulators, can supply 3.3V to your project
31 | * Open source schematic and layout using KiCAD design tools
32 | * 4 layer board with a solid ground plane for good signal integrity
33 | * FPGA clock supplied by the RP2040, easy to program FPGA clock under SW control
34 | * Examples for communicating to the FPGA over SPI
35 | * Support for ultra low power sleeep mode: can shut down the RP2040 and FPGA while keeping the SRAM powered
36 |
37 |
38 | Firmware features:
39 | * pico-ice library to support drag-drop programming of the FPGA bitfile: no need of any dedicated programmer
40 | * Alternate programming of the FPGA flash using DFU mode
41 | * FPGA clock under RP2040 control
42 | * Passthrough UART code enables transparent access to the FPGA's UART for debug/logging/control
43 |
44 | [OSHW US002140](https://certification.oshwa.org/us002140.html) | Certified open source hardware | oshwa.org/cert
45 |
--------------------------------------------------------------------------------
/rtl/sim/Makefile:
--------------------------------------------------------------------------------
1 | WORKDIR = work
2 |
3 | LIBS = ../..
4 | RTL = ../src
5 | TB = ../tb
6 |
7 | SIM_SRCS = $(TB)/tb_$(TOP).sv
8 |
9 | CDC_UTILS = $(LIBS)/cdc_utils/rtl/verilog
10 | VLOG_TB_UTILS = $(LIBS)/vlog_tb_utils
11 |
12 | SRCH_PATH = -y $(TB) -y $(RTL) -y $(CDC_UTILS) -y $(VLOG_TB_UTILS)
13 |
14 | VLOG_OPTS = -lint -pedanticerrors -fsmverbose w +libext+.v +libext+.sv $(SRCH_PATH) +incdir+$(TB) +incdir+$(RTL)
15 | VSIM_OPTS = -warning vsim-3009 -t ps
16 |
17 | .PHONY: compile sim lib clean
18 |
19 | compile: $(WORKDIR) $(SIM_SRCS)
20 | vlog $(VLOG_OPTS) $(SIM_SRCS)
21 |
22 | sim:
23 | vsim -c $(VSIM_OPTS) -do "run -all; quit" work.tb_$(TOP) -L iCE40UP
24 |
25 | sim_gui:
26 | vsim -gui $(VSIM_OPTS) work.tb_$(TOP) -L iCE40UP
27 |
28 | $(WORKDIR):
29 | vlib work
30 |
31 | clean:
32 | rm -r transcript $(WORKDIR)
--------------------------------------------------------------------------------