├── .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 | ![pmod install after soldering](images/pico_ice_pmod_install.jpg) 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 | [![Elecrow](https://media-cdn.elecrow.com/media/webp_image/logo/stores/1/ELECROW_LOGO.webp)](https://www.elecrow.com/pico-ice-rp2040-plus-lattice-ice40up5k-fpga.html) 9 | [![LectronZ](https://lectronz.com/static/badges/buy-it-on-lectronz-medium.png)](https://lectronz.com/stores/tinyvision-ai-store) 10 | [![Tindie](https://d2ss6ovg47m0r5.cloudfront.net/badges/tindie-smalls.png)](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 | ![](images/pico_ice_front.jpg) 15 | ![](images/pico_ice_back.jpg) 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 | ![](images/pico_ice_blocks.png) 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 | ![pinout diagram](pinout/pinout.svg) 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 | ![SPI Debugging](pinout/spi_bus_black.png) 36 | ![SPI Debugging](pinout/spi_bus_white.png) 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 | ![photo of which pins to short](images/pico_ice_reset_button.jpg) 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 | [![Elecrow](https://www.elecrow.com/media/logo/stores/1/ELECROW_LOGO.png)](https://www.elecrow.com/pico-ice-rp2040-plus-lattice-ice40up5k-fpga.html) 11 | [![LectronZ](https://lectronz.com/static/badges/buy-it-on-lectronz-medium.png)](https://lectronz.com/stores/tinyvision-ai-store) 12 | [![Tindie](https://d2ss6ovg47m0r5.cloudfront.net/badges/tindie-smalls.png)](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 | ![](Docs/images/pico_ice_front.jpg) 15 | ![](Docs/images/pico_ice_back.jpg) 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) --------------------------------------------------------------------------------