From dbe1b71898d0200f352f7921ca6b0b1574fff332 Mon Sep 17 00:00:00 2001 From: Michele Bigi Date: Sun, 16 Aug 2026 15:44:47 +0200 Subject: [PATCH] Add Si4684-A10-GM and FSC-BT1035 symbols, add SnapEDA import script Si4684-A10-GM (Skyworks FM/DAB/DAB+ receiver): extracted from unmerged kicad-symbols MR !4782 (cannot_be_merged, failing pipeline), then independently validated with kicad-cli and cross-checked against two unrelated sources (Skyworks public product summary block diagram, and PE5PVB/SI4684-DAB-Receiver's built/fabricated symbol) -- all comparable pin names/numbers agree. Symbol only, standard Package_DFN_QFN footprint. FSC-BT1035 (Feasycom BT 5.2 audio module): hand-authored from the official Feasycom datasheet's Table 3-2 pin definition (all 52 pins), validated with kicad-cli. Symbol only -- no reliable footprint/3D source was found; see README for what was tried and how to add one later (manvalan/DigiRadio has a fabricated footprint for this exact part, but its geometry lives in EasyEDA's proprietary JSON format). scripts/import_snapeda.py: unzips a SnapEDA "Download KiCad" export and hands off to import_component.py's existing core logic (same validation/collision/lib-table rules as every other import path). --- MANIFEST.csv | 2 + README.md | 76 +++ scripts/import_snapeda.py | 139 ++++ sym-lib-table | 2 + sym-lib-table.global | 2 + symbols/audio/Si4684-A10-GM.kicad_sym | 938 ++++++++++++++++++++++++++ symbols/rf/FSC-BT1035.kicad_sym | 349 ++++++++++ 7 files changed, 1508 insertions(+) create mode 100644 scripts/import_snapeda.py create mode 100644 symbols/audio/Si4684-A10-GM.kicad_sym create mode 100644 symbols/rf/FSC-BT1035.kicad_sym diff --git a/MANIFEST.csv b/MANIFEST.csv index 0dcddb1..fe5f60e 100644 --- a/MANIFEST.csv +++ b/MANIFEST.csv @@ -56,6 +56,7 @@ symbol,,symbols/audio/PCM1808QPWRQ1.kicad_sym,UNCHANGED,0e5aa8a504882af7941699ec symbol,,symbols/audio/PCM1861DBT.kicad_sym,UNCHANGED,7ec6d4805a2c10d9348ab1ddbaf559fdaaf7875c039078ed4dc2d57d4ffb645d,"imported from https://github.com/freeDSP/FreeDSP_ki-CAD_Libraries, symbol only (no matching local footprint file; Footprint property left as bare upstream IPC name)" symbol,,symbols/audio/PCM9211PTR.kicad_sym,UNCHANGED,04a3489abb5b082b15fb1d5f5cb8af61b2281f6e9870baa9287de78d03dd00b4,"imported from https://github.com/freeDSP/FreeDSP_ki-CAD_Libraries (legacy .lib, converted via kicad-cli sym upgrade)" symbol,,symbols/audio/Sensor_Audio.kicad_sym,UNCHANGED,db449767efbe850008ea9e5cdc980b2a45ec5c579a1d912dc7846acde93282d3,category=audio +symbol,,symbols/audio/Si4684-A10-GM.kicad_sym,UNCHANGED,c5798a5f5b7b5d6d7ab46dfeac10706ec577000a273a60f2348b07900cfa6ec4,"extracted from unmerged/open kicad-symbols MR !4782 (https://gitlab.com/kicad/libraries/kicad-symbols/-/merge_requests/4782, cannot_be_merged, failing pipeline, needs v9 format upgrade); independently validated with kicad-cli before import (parses OK, 48 unique pins) and cross-checked against 2 independent sources (Skyworks public product summary block diagram, and manvalan/PE5PVB SI4684-DAB-Receiver's built/fabricated SI4684 symbol) -- all comparable pin names/numbers agree; symbol only, Footprint property references the standard Package_DFN_QFN library" symbol,,symbols/display/Display_Character.kicad_sym,UNCHANGED,b3998eabbf4b26380b18ff115cab587e81afe3c14f282b6467e88e9caece9588,category=display symbol,,symbols/display/Display_Graphic.kicad_sym,UNCHANGED,492a0236abdd340f04d6cdbf6011c7539da9302147833c9d6e3eedde52099c77,category=display symbol,,symbols/display/Driver_Display.kicad_sym,UNCHANGED,158976d7a69718c53279afb0cd9a89c3f173d40847b5639b537a2c5ebb4d7b8d,category=display @@ -231,6 +232,7 @@ symbol,,symbols/power/TPS7A2012PDBVR.kicad_sym,UNCHANGED,4e3b8deb13f907ec05495fe symbol,,symbols/power/TPS7A2018PDBVR.kicad_sym,UNCHANGED,564f08ab9d9c3f65e3577746e9e9a2700eaf5fba98b56902b1183135ca8cd635,category=power symbol,,symbols/power/Transistor_Power_Module.kicad_sym,UNCHANGED,6af304e628b3c314b6a6bbfc73aead32efb62dbb8d621a489ce02025efb3e12f,category=power symbol,,symbols/power/power.kicad_sym,UNCHANGED,e56d8bf205f7927dbbd1b309a9d12a706e30a33c7689eb168d131f9e6b598435,category=power +symbol,,symbols/rf/FSC-BT1035.kicad_sym,UNCHANGED,2524261dc7179513521924d8ae2c85706be33d517a7e8dd1a5ccfa5fe912e752,"hand-authored from the official Feasycom datasheet Table 3-2 (Pin definition), https://www.feasycom.com/datasheet/fsc-bt1035.pdf; all 52 pins transcribed directly, validated with kicad-cli; symbol only -- no verified footprint/3D model source was found (see README for details and how to add one)" symbol,,symbols/rf/Interface.kicad_sym,UNCHANGED,e1e67f47b890b1afc2e874c5a0f51ceae71ccf0426041c43c27f066c2ccae570,category=rf symbol,,symbols/rf/Interface_CAN_LIN.kicad_sym,UNCHANGED,c38fb427b68e72910f8742540fd24d9c65990b21713ab851aac5387e12267d1e,category=rf symbol,,symbols/rf/Interface_CurrentLoop.kicad_sym,UNCHANGED,a1639e5796950eacc7a57a34f5f37fa675f0fc87a3540c8eb99ef1427c1e8b7f,category=rf diff --git a/README.md b/README.md index 35d6960..cda41e2 100644 --- a/README.md +++ b/README.md @@ -225,6 +225,19 @@ python3 scripts/import_batch.py --source /path/to/batch_dir [--category power] subdirectory required, footprint/model optional — same collision and lib-table rules as a single import, applied per component). +To import directly from a SnapEDA (SnapMagic Search) "Download KiCad" +zip, without unzipping it by hand first: + +``` +python3 scripts/import_snapeda.py --zip ~/Downloads/PARTNUMBER.zip [--name ...] [--category ...] +``` + +It unzips to a temp directory, locates the `.kicad_sym` / `.kicad_mod` / +3D model inside by extension (SnapEDA's internal folder layout varies +between downloads), and hands off to the same +`import_component.py` core -- identical validation, collision handling, +and lib-table regeneration as every other import path here. + ## 6. Running the check ``` @@ -245,6 +258,32 @@ reference *standard* KiCad footprint libraries (e.g. `Package_SO`, scope (they ship with every KiCad install) and are not checked or reported as errors. +### FSC-BT1035 (symbol only, hand-authored -- footprint still needed) + +`symbols/rf/FSC-BT1035.kicad_sym` (Feasycom Bluetooth 5.2 dual-mode +stereo audio module, Qualcomm QCC3056) was hand-authored from the +official [Feasycom datasheet](https://www.feasycom.com/datasheet/fsc-bt1035.pdf) +Table 3-2 (Pin definition) -- all 52 pins, names and electrical types +transcribed directly from that table and validated with `kicad-cli sym +export`. No existing KiCad symbol for this part could be found publicly +(SnapEDA blocks unauthenticated access; no GitHub project had one). + +**No footprint or 3D model is included.** The datasheet's mechanical +section (module 13 x 26.9 x 2.2mm, castellated LCC-52 package, 1.0mm pad +pitch, antenna keep-out on one edge) has enough detail to build one, but +extracting exact per-pad coordinates reliably from the PDF's dimensioned +drawing (rather than a real coordinate table) was judged too +error-prone to commit blind -- a wrong castellated-pad footprint could +produce an unfabricatable board without anyone noticing until parts +don't line up. A working footprint for this exact part does exist +(fabricated, per the gerbers) in `manvalan/DigiRadio`'s EasyEDA project, +but its pad geometry is embedded in EasyEDA's proprietary JSON format, +which wasn't reverse-engineered here. Import a verified footprint (e.g. +from a SnapEDA KiCad download, or by exporting the DigiRadio EasyEDA +footprint to KiCad format) with `scripts/import_snapeda.py` or +`scripts/add_component.py --name FSC-BT1035 --footprint ...` -- it will +detect the existing symbol and only need the footprint/model added. + ## Provenance `MANIFEST.csv` has one row per file in the library (`type`, `source`, @@ -281,6 +320,43 @@ generic SOIC-8 footprint. Several FreeDSP parts already covered by the official mirrored libraries (`PCM5102A`, `INA194`, `AZ1117-3.3`, `ADAU1452`) were intentionally *not* re-imported. +### Si4684-A10-GM (unmerged upstream MR, use with care) + +`symbols/audio/Si4684-A10-GM.kicad_sym` (Silicon Labs/Skyworks +single-chip FM/DAB/DAB+ radio receiver) was extracted from +[kicad-symbols MR !4782](https://gitlab.com/kicad/libraries/kicad-symbols/-/merge_requests/4782), +which as of this import is **open and unmerged** (`cannot_be_merged`, +has conflicts, failing CI pipeline, tagged "needs v9 format upgrade"). +It is not part of the official kicad-symbols release this library +otherwise mirrors. Before importing it here it was independently +verified with `kicad-cli sym export` (parses correctly) and checked for +48 unique, non-duplicate pins matching its QFN-48 package. Symbol only +-- its `Footprint` property points at the standard +`Package_DFN_QFN:QFN-48-1EP_7x7mm_P0.5mm_EP5.3x5.3mm` (resolved via your +global KiCad footprint table, same as other official-mirror symbols), +no MIKILAB-local footprint or 3D model exists for it. Given its +provenance, its pin *names* were cross-checked against the public +[Skyworks product summary](https://www.skyworksinc.com/-/media/SkyWorks/SL/documents/public/product-summaries/Si4684-A10_PS.pdf) +-- all 24 signal names in that document's block diagram (RFREF, VHFI, +VHFSW, LOUT, ROUT, DCLK, DFS, DOUT, SCLK, SSB, MISO, MOSI, VIO, VA, +VCORE, VMEM, XTALI, XTALO, NVSCLK, NVSSB, NVMOSI, NVMISO, INTB, RSTB) +are present with sensible pin numbers, and the remaining pins +(ABYP/DACREF/DBYP bypass, SMODE, 4x GNDD, several NC) are consistent +with a 48-pin QFN. That 4-page public summary does **not** include a +full numbered pinout table, though (Skyworks gates the full Si468x +datasheet behind an NDA). As a second, independent cross-check, the pin +numbering was compared against the `SI4684`/`SI4684 SMD` symbols in +[PE5PVB/SI4684-DAB-Receiver](https://github.com/PE5PVB/SI4684-DAB-Receiver) +(a built, gerber-fabricated real project) -- of the 44 pin +numbers directly comparable (PE5PVB's symbol also carries an unrelated +second IC's pins under duplicate numbers, and its own naming has 4 clear +typos: `NVCLK`/`DSF`/`MVMISO`/`NVMOS` vs. the grammatically-consistent +`NVSCLK`/`DFS`/`NVMISO`/`NVMOSI`), **all 44 agree exactly** with the +symbol imported here. That two independent, unrelated sources converge +on the same pin map is reasonably strong (if still not authoritative) +confirmation; verify against the full NDA'd datasheet if you have access +before finalizing a schematic around this part. + ### Espressif modules 19 module symbols (each with footprint + 3D model) were imported from diff --git a/scripts/import_snapeda.py b/scripts/import_snapeda.py new file mode 100644 index 0000000..8ecea33 --- /dev/null +++ b/scripts/import_snapeda.py @@ -0,0 +1,139 @@ +#!/usr/bin/env python3 +""" +import_snapeda.py +================== + +Import a component from a SnapEDA (SnapMagic Search) KiCad export zip. + +SnapEDA's "Download KiCad" button produces a .zip containing (naming and +nesting vary a bit by download, so this is found by file extension, not +by exact path): + - one .kicad_sym symbol file + - one .kicad_mod footprint file (sometimes inside a ".pretty/" dir) + - optionally one 3D model (.step/.stp/.wrl/.wrz) + +Usage: + python3 scripts/import_snapeda.py --zip ~/Downloads/TPS7A2018PDBVR.zip \\ + [--name TPS7A2018PDBVR] [--category power] + +If --name is omitted, it's taken from the symbol file's own top-level +symbol name. If --category is omitted, it's auto-detected the same way +as import_component.py. + +This is a thin front-end: it only locates and unzips files, then hands +off to import_component's core (import_symbol/import_footprint/ +import_model) for every validation, collision, and lib-table rule +already established there -- no logic is duplicated. +""" + +from __future__ import annotations + +import argparse +import re +import sys +import tempfile +import zipfile +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).resolve().parent)) + +import lib_common as lc +import import_component as ic + +ROOT = lc.LIBRARY_ROOT + +MODEL_EXTS = (".step", ".stp", ".wrl", ".wrz") + + +def find_first(root: Path, suffixes: tuple[str, ...]) -> Path | None: + matches = sorted( + p for p in root.rglob("*") + if p.is_file() and p.suffix.lower() in suffixes + ) + return matches[0] if matches else None + + +def guess_name(symbol_path: Path) -> str: + text = symbol_path.read_text(encoding="utf-8", errors="replace") + m = re.search(r'\(symbol\s+"([^"]+)"', text) + if not m: + raise ic.ImportError_(f"Could not find a top-level symbol name in {symbol_path}") + return m.group(1) + + +def main() -> int: + parser = argparse.ArgumentParser(description="Import a component from a SnapEDA KiCad export zip.") + parser.add_argument("--zip", required=True, help="Path to the SnapEDA .zip download") + parser.add_argument("--name", help="Component name (default: taken from the symbol's own name)") + parser.add_argument("--category", choices=lc.CATEGORIES, help="MIKILAB category (default: auto-detected)") + args = parser.parse_args() + + zip_path = Path(args.zip).expanduser().resolve() + if not zip_path.is_file(): + print(f"ERROR: --zip file not found: {zip_path}") + return 1 + + with tempfile.TemporaryDirectory(prefix="snapeda_") as tmp: + tmp_dir = Path(tmp) + try: + with zipfile.ZipFile(zip_path) as zf: + zf.extractall(tmp_dir) + except zipfile.BadZipFile: + print(f"ERROR: {zip_path} is not a valid zip file") + return 1 + + symbol = find_first(tmp_dir, (".kicad_sym",)) + if symbol is None: + print(f"ERROR: no .kicad_sym file found inside {zip_path.name}") + return 1 + + footprint = find_first(tmp_dir, (".kicad_mod",)) + model = find_first(tmp_dir, MODEL_EXTS) + + try: + name = args.name or guess_name(symbol) + except ic.ImportError_ as e: + print(f"ERROR: {e}") + return 1 + + category = args.category or lc.classify(name) + manifest_rows: list[list[str]] = [] + report: list[str] = [f"Importing '{name}' from SnapEDA zip {zip_path.name} into category '{category}'"] + for label, path in (("symbol", symbol), ("footprint", footprint), ("model", model)): + report.append(f" found {label}: {path.relative_to(tmp_dir) if path else '(none)'}") + + try: + ic.import_symbol(name, category, symbol, manifest_rows, report) + except ic.ImportError_ as e: + print(f"ERROR: {e}") + lc.append_manifest_rows(ROOT, [["symbol", str(zip_path), "", "ERROR", "", str(e)]]) + return 1 + + if footprint is not None: + fp_path, fp_nick, fp_name, _ = ic.import_footprint(name, category, footprint, manifest_rows, report) + + if model is not None: + ic.import_model(name, category, model, fp_path, manifest_rows, report) + + sym_path = ROOT / "symbols" / category / f"{name}.kicad_sym" + text = sym_path.read_text(encoding="utf-8") + new_text, changed = lc.set_symbol_footprint_property(text, f"{fp_nick}:{fp_name}") + if changed: + sym_path.write_text(new_text, encoding="utf-8") + report.append(f" Linked symbol Footprint property -> {fp_nick}:{fp_name}") + elif model is not None: + report.append(" NOTE: 3D model found but no footprint to attach it to -- skipped") + + lc.append_manifest_rows(ROOT, manifest_rows) + + sym_entries = lc.write_sym_lib_table(ROOT) + fp_entries = lc.write_fp_lib_table(ROOT) + report.append(f"Regenerated sym-lib-table ({len(sym_entries)} libraries) and fp-lib-table ({len(fp_entries)} libraries)") + + print("\n".join(report)) + print("\nOK.") + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/sym-lib-table b/sym-lib-table index baadf00..5951233 100644 --- a/sym-lib-table +++ b/sym-lib-table @@ -57,6 +57,7 @@ (lib (name "MIKILAB_PCM1861DBT")(type "KiCad")(uri "${KIPRJMOD}/symbols/audio/PCM1861DBT.kicad_sym")(options "")(descr "PCM1861DBT")) (lib (name "MIKILAB_PCM9211PTR")(type "KiCad")(uri "${KIPRJMOD}/symbols/audio/PCM9211PTR.kicad_sym")(options "")(descr "PCM9211PTR")) (lib (name "MIKILAB_Sensor_Audio")(type "KiCad")(uri "${KIPRJMOD}/symbols/audio/Sensor_Audio.kicad_sym")(options "")(descr "Sensor_Audio")) + (lib (name "MIKILAB_Si4684_A10_GM")(type "KiCad")(uri "${KIPRJMOD}/symbols/audio/Si4684-A10-GM.kicad_sym")(options "")(descr "Si4684-A10-GM")) (lib (name "MIKILAB_Display_Character")(type "KiCad")(uri "${KIPRJMOD}/symbols/display/Display_Character.kicad_sym")(options "")(descr "Display_Character")) (lib (name "MIKILAB_Display_Graphic")(type "KiCad")(uri "${KIPRJMOD}/symbols/display/Display_Graphic.kicad_sym")(options "")(descr "Display_Graphic")) (lib (name "MIKILAB_Driver_Display")(type "KiCad")(uri "${KIPRJMOD}/symbols/display/Driver_Display.kicad_sym")(options "")(descr "Driver_Display")) @@ -232,6 +233,7 @@ (lib (name "MIKILAB_TPS7A2018PDBVR")(type "KiCad")(uri "${KIPRJMOD}/symbols/power/TPS7A2018PDBVR.kicad_sym")(options "")(descr "TPS7A2018PDBVR")) (lib (name "MIKILAB_Transistor_Power_Module")(type "KiCad")(uri "${KIPRJMOD}/symbols/power/Transistor_Power_Module.kicad_sym")(options "")(descr "Transistor_Power_Module")) (lib (name "MIKILAB_power")(type "KiCad")(uri "${KIPRJMOD}/symbols/power/power.kicad_sym")(options "")(descr "power")) + (lib (name "MIKILAB_FSC_BT1035")(type "KiCad")(uri "${KIPRJMOD}/symbols/rf/FSC-BT1035.kicad_sym")(options "")(descr "FSC-BT1035")) (lib (name "MIKILAB_Interface")(type "KiCad")(uri "${KIPRJMOD}/symbols/rf/Interface.kicad_sym")(options "")(descr "Interface")) (lib (name "MIKILAB_Interface_CAN_LIN")(type "KiCad")(uri "${KIPRJMOD}/symbols/rf/Interface_CAN_LIN.kicad_sym")(options "")(descr "Interface_CAN_LIN")) (lib (name "MIKILAB_Interface_CurrentLoop")(type "KiCad")(uri "${KIPRJMOD}/symbols/rf/Interface_CurrentLoop.kicad_sym")(options "")(descr "Interface_CurrentLoop")) diff --git a/sym-lib-table.global b/sym-lib-table.global index a0481dd..e603e70 100644 --- a/sym-lib-table.global +++ b/sym-lib-table.global @@ -57,6 +57,7 @@ (lib (name "MIKILAB_PCM1861DBT")(type "KiCad")(uri "${MIKILAB}/symbols/audio/PCM1861DBT.kicad_sym")(options "")(descr "PCM1861DBT")) (lib (name "MIKILAB_PCM9211PTR")(type "KiCad")(uri "${MIKILAB}/symbols/audio/PCM9211PTR.kicad_sym")(options "")(descr "PCM9211PTR")) (lib (name "MIKILAB_Sensor_Audio")(type "KiCad")(uri "${MIKILAB}/symbols/audio/Sensor_Audio.kicad_sym")(options "")(descr "Sensor_Audio")) + (lib (name "MIKILAB_Si4684_A10_GM")(type "KiCad")(uri "${MIKILAB}/symbols/audio/Si4684-A10-GM.kicad_sym")(options "")(descr "Si4684-A10-GM")) (lib (name "MIKILAB_Display_Character")(type "KiCad")(uri "${MIKILAB}/symbols/display/Display_Character.kicad_sym")(options "")(descr "Display_Character")) (lib (name "MIKILAB_Display_Graphic")(type "KiCad")(uri "${MIKILAB}/symbols/display/Display_Graphic.kicad_sym")(options "")(descr "Display_Graphic")) (lib (name "MIKILAB_Driver_Display")(type "KiCad")(uri "${MIKILAB}/symbols/display/Driver_Display.kicad_sym")(options "")(descr "Driver_Display")) @@ -232,6 +233,7 @@ (lib (name "MIKILAB_TPS7A2018PDBVR")(type "KiCad")(uri "${MIKILAB}/symbols/power/TPS7A2018PDBVR.kicad_sym")(options "")(descr "TPS7A2018PDBVR")) (lib (name "MIKILAB_Transistor_Power_Module")(type "KiCad")(uri "${MIKILAB}/symbols/power/Transistor_Power_Module.kicad_sym")(options "")(descr "Transistor_Power_Module")) (lib (name "MIKILAB_power")(type "KiCad")(uri "${MIKILAB}/symbols/power/power.kicad_sym")(options "")(descr "power")) + (lib (name "MIKILAB_FSC_BT1035")(type "KiCad")(uri "${MIKILAB}/symbols/rf/FSC-BT1035.kicad_sym")(options "")(descr "FSC-BT1035")) (lib (name "MIKILAB_Interface")(type "KiCad")(uri "${MIKILAB}/symbols/rf/Interface.kicad_sym")(options "")(descr "Interface")) (lib (name "MIKILAB_Interface_CAN_LIN")(type "KiCad")(uri "${MIKILAB}/symbols/rf/Interface_CAN_LIN.kicad_sym")(options "")(descr "Interface_CAN_LIN")) (lib (name "MIKILAB_Interface_CurrentLoop")(type "KiCad")(uri "${MIKILAB}/symbols/rf/Interface_CurrentLoop.kicad_sym")(options "")(descr "Interface_CurrentLoop")) diff --git a/symbols/audio/Si4684-A10-GM.kicad_sym b/symbols/audio/Si4684-A10-GM.kicad_sym new file mode 100644 index 0000000..8b3108d --- /dev/null +++ b/symbols/audio/Si4684-A10-GM.kicad_sym @@ -0,0 +1,938 @@ +(kicad_symbol_lib + (version 20241209) + (generator "kicad_symbol_editor") + (symbol "Si4684-A10-GM" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at 11.938 26.416 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Value" "Si4684-A10-GM" + (at -5.08 26.67 0) + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (property "Footprint" "Package_DFN_QFN:QFN-48-1EP_7x7mm_P0.5mm_EP5.3x5.3mm" + (at -30.988 3.302 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Datasheet" "https://www.skyworksinc.com/-/media/SkyWorks/SL/documents/public/product-summaries/Si4684-A10_PS.pdf" + (at -3.81 -29.972 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "Description" "Single-Chip, FM / DAB /DAB+ Radio Receiver" + (at -28.956 4.318 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (property "ki_fp_filters" "QFN-48*7x7mm*P0.5mm*" + (at 0 0 0) + (effects + (font + (size 1.27 1.27) + ) + (hide yes) + ) + ) + (symbol "Si4684-A10-GM_1_1" + (rectangle + (start -12.7 25.4) + (end 12.7 -25.4) + (stroke + (width 0.254) + (type default) + ) + (fill + (type background) + ) + ) + (pin output line + (at 15.24 20.32 180) + (length 2.54) + (name "NVSSB" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "1" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -15.24 0 0) + (length 2.54) + (name "VHFI" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "10" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at -15.24 -2.54 0) + (length 2.54) + (name "VHFSW" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "11" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -15.24 10.16 0) + (length 2.54) + (name "VA" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "12" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -15.24 7.62 0) + (length 2.54) + (name "ABYP" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "13" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin no_connect line + (at -10.16 27.94 270) + (length 2.54) hide + (name "NC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "14" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at -15.24 -20.32 0) + (length 2.54) + (name "XTALI" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "15" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at -15.24 -17.78 0) + (length 2.54) + (name "XTALO" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "16" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -15.24 -15.24 0) + (length 2.54) + (name "DACREF" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "17" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at -15.24 -7.62 0) + (length 2.54) + (name "LOUT" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "18" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at -15.24 -10.16 0) + (length 2.54) + (name "ROUT" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "19" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 15.24 22.86 180) + (length 2.54) + (name "NVSCLK" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "2" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin no_connect line + (at -7.62 27.94 270) + (length 2.54) hide + (name "NC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "20" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin no_connect line + (at -5.08 27.94 270) + (length 2.54) hide + (name "NC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "21" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin no_connect line + (at -2.54 27.94 270) + (length 2.54) hide + (name "NC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "22" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin no_connect line + (at 0 27.94 270) + (length 2.54) hide + (name "NC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "23" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin no_connect line + (at 2.54 27.94 270) + (length 2.54) hide + (name "NC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "24" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin no_connect line + (at 5.08 27.94 270) + (length 2.54) hide + (name "NC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "25" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin no_connect line + (at 7.62 27.94 270) + (length 2.54) hide + (name "NC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "26" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 15.24 7.62 180) + (length 2.54) + (name "DCLK" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "27" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 15.24 5.08 180) + (length 2.54) + (name "DFS" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "28" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 15.24 -12.7 180) + (length 2.54) + (name "SSB" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "29" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 15.24 0 180) + (length 2.54) + (name "INTB" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "3" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 15.24 -15.24 180) + (length 2.54) + (name "SCLK" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "30" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 15.24 -17.78 180) + (length 2.54) + (name "MOSI" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "31" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin bidirectional line + (at 15.24 -20.32 180) + (length 2.54) + (name "MISO" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "32" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 15.24 10.16 180) + (length 2.54) + (name "DOUT" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "33" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -15.24 17.78 0) + (length 2.54) + (name "VIO" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "34" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -15.24 20.32 0) + (length 2.54) + (name "VMEM" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "35" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -15.24 15.24 0) + (length 2.54) + (name "DBYP" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "36" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -15.24 22.86 0) + (length 2.54) + (name "VCORE" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "37" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin no_connect line + (at 10.16 27.94 270) + (length 2.54) hide + (name "NC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "38" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at 5.08 -27.94 90) + (length 2.54) + (name "GNDD" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "39" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 15.24 -2.54 180) + (length 2.54) + (name "RSTB" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "4" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 5.08 -27.94 90) + (length 2.54) hide + (name "GNDD" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "40" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 5.08 -27.94 90) + (length 2.54) hide + (name "GNDD" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "41" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at 5.08 -27.94 90) + (length 2.54) hide + (name "GNDD" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "42" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin no_connect line + (at -10.16 -27.94 90) + (length 2.54) hide + (name "NC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "43" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin no_connect line + (at -7.62 -27.94 90) + (length 2.54) hide + (name "NC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "44" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin no_connect line + (at 7.62 -27.94 90) + (length 2.54) hide + (name "NC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "45" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin no_connect line + (at 10.16 -27.94 90) + (length 2.54) hide + (name "NC" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "46" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 15.24 15.24 180) + (length 2.54) + (name "NVMISO" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "47" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin output line + (at 15.24 17.78 180) + (length 2.54) + (name "NVMOSI" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "48" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin input line + (at 15.24 -5.08 180) + (length 2.54) + (name "SMODE" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "5" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin power_in line + (at -5.08 -27.94 90) + (length 2.54) + (name "RFREF" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "6" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -27.94 90) + (length 2.54) hide + (name "RFREF" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "7" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -27.94 90) + (length 2.54) hide + (name "RFREF" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "8" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + (pin passive line + (at -5.08 -27.94 90) + (length 2.54) hide + (name "RFREF" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + (number "9" + (effects + (font + (size 1.27 1.27) + ) + ) + ) + ) + ) + ) +) diff --git a/symbols/rf/FSC-BT1035.kicad_sym b/symbols/rf/FSC-BT1035.kicad_sym new file mode 100644 index 0000000..ec269c4 --- /dev/null +++ b/symbols/rf/FSC-BT1035.kicad_sym @@ -0,0 +1,349 @@ +(kicad_symbol_lib + (version 20241209) + (generator "kicad_symbol_editor") + (symbol "FSC-BT1035" + (exclude_from_sim no) + (in_bom yes) + (on_board yes) + (property "Reference" "U" + (at -20.32 34.29 0) + (effects (font (size 1.27 1.27))) + ) + (property "Value" "FSC-BT1035" + (at -20.32 -34.29 0) + (effects (font (size 1.27 1.27))) + ) + (property "Footprint" "" + (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Datasheet" "https://www.feasycom.com/datasheet/fsc-bt1035.pdf" + (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (property "Description" "Bluetooth 5.2 dual-mode stereo audio module, Qualcomm QCC3056" + (at 0 0 0) + (effects (font (size 1.27 1.27)) hide) + ) + (symbol "FSC-BT1035_0_1" + (rectangle + (start -20.32 31.75) + (end 20.32 -31.75) + (stroke (width 0.254) (type default)) + (fill (type background)) + ) + (pin power_in line + (at -25.4 31.75 0) + (length 5.08) + (name "GND" (effects (font (size 1.27 1.27)))) + (number "1" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line + (at -25.4 29.21 0) + (length 5.08) + (name "AIO4_LED4" (effects (font (size 1.27 1.27)))) + (number "2" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line + (at -25.4 26.67 0) + (length 5.08) + (name "AIO5_LED5" (effects (font (size 1.27 1.27)))) + (number "3" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line + (at -25.4 24.13 0) + (length 5.08) + (name "PCM_CLK_PIO16" (effects (font (size 1.27 1.27)))) + (number "4" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line + (at -25.4 21.59 0) + (length 5.08) + (name "PCM_IN_PIO19" (effects (font (size 1.27 1.27)))) + (number "5" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line + (at -25.4 19.05 0) + (length 5.08) + (name "PCM_OUT_PIO18" (effects (font (size 1.27 1.27)))) + (number "6" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line + (at -25.4 16.509999999999998 0) + (length 5.08) + (name "PCM_SYNC_PIO17" (effects (font (size 1.27 1.27)))) + (number "7" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line + (at -25.4 13.969999999999999 0) + (length 5.08) + (name "RESET" (effects (font (size 1.27 1.27)))) + (number "8" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line + (at -25.4 11.43 0) + (length 5.08) + (name "PCM_MCLK_OUT_PIO15" (effects (font (size 1.27 1.27)))) + (number "9" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line + (at -25.4 8.89 0) + (length 5.08) + (name "PIO6" (effects (font (size 1.27 1.27)))) + (number "10" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line + (at -25.4 6.350000000000001 0) + (length 5.08) + (name "PIO7" (effects (font (size 1.27 1.27)))) + (number "11" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line + (at -25.4 3.8099999999999987 0) + (length 5.08) + (name "PIO8" (effects (font (size 1.27 1.27)))) + (number "12" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line + (at -25.4 1.2699999999999996 0) + (length 5.08) + (name "BT_TX_PIO5" (effects (font (size 1.27 1.27)))) + (number "13" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line + (at -25.4 -1.2700000000000031 0) + (length 5.08) + (name "BT_RX_PIO4" (effects (font (size 1.27 1.27)))) + (number "14" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line + (at -25.4 -3.8100000000000023 0) + (length 5.08) + (name "BT_CTS_PIO3" (effects (font (size 1.27 1.27)))) + (number "15" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line + (at -25.4 -6.350000000000001 0) + (length 5.08) + (name "BT_RTS_PIO2" (effects (font (size 1.27 1.27)))) + (number "16" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line + (at -25.4 -8.89 0) + (length 5.08) + (name "AIO0_LED0" (effects (font (size 1.27 1.27)))) + (number "17" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line + (at -25.4 -11.43 0) + (length 5.08) + (name "AIO1_LED1" (effects (font (size 1.27 1.27)))) + (number "18" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line + (at -25.4 -13.969999999999999 0) + (length 5.08) + (name "AIO2_LED2" (effects (font (size 1.27 1.27)))) + (number "19" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line + (at -25.4 -16.509999999999998 0) + (length 5.08) + (name "PIO44" (effects (font (size 1.27 1.27)))) + (number "20" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line + (at -25.4 -19.049999999999997 0) + (length 5.08) + (name "PIO41" (effects (font (size 1.27 1.27)))) + (number "21" (effects (font (size 1.27 1.27)))) + ) + (pin power_in line + (at -25.4 -21.590000000000003 0) + (length 5.08) + (name "GND" (effects (font (size 1.27 1.27)))) + (number "22" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line + (at -25.4 -24.130000000000003 0) + (length 5.08) + (name "PIO42" (effects (font (size 1.27 1.27)))) + (number "23" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line + (at -25.4 -26.67 0) + (length 5.08) + (name "PIO43" (effects (font (size 1.27 1.27)))) + (number "24" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line + (at -25.4 -29.21 0) + (length 5.08) + (name "PIO40" (effects (font (size 1.27 1.27)))) + (number "25" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line + (at -25.4 -31.75 0) + (length 5.08) + (name "PIO45" (effects (font (size 1.27 1.27)))) + (number "26" (effects (font (size 1.27 1.27)))) + ) + (pin power_in line + (at 25.4 31.75 180) + (length 5.08) + (name "GND" (effects (font (size 1.27 1.27)))) + (number "52" (effects (font (size 1.27 1.27)))) + ) + (pin output line + (at 25.4 29.21 180) + (length 5.08) + (name "RF_OUT" (effects (font (size 1.27 1.27)))) + (number "51" (effects (font (size 1.27 1.27)))) + ) + (pin power_in line + (at 25.4 26.67 180) + (length 5.08) + (name "GND" (effects (font (size 1.27 1.27)))) + (number "50" (effects (font (size 1.27 1.27)))) + ) + (pin output line + (at 25.4 24.13 180) + (length 5.08) + (name "SPK_P" (effects (font (size 1.27 1.27)))) + (number "49" (effects (font (size 1.27 1.27)))) + ) + (pin output line + (at 25.4 21.59 180) + (length 5.08) + (name "SPK_N" (effects (font (size 1.27 1.27)))) + (number "48" (effects (font (size 1.27 1.27)))) + ) + (pin no_connect line + (at 25.4 19.05 180) + (length 5.08) + (name "NC" (effects (font (size 1.27 1.27)))) + (number "47" (effects (font (size 1.27 1.27)))) + ) + (pin no_connect line + (at 25.4 16.509999999999998 180) + (length 5.08) + (name "NC" (effects (font (size 1.27 1.27)))) + (number "46" (effects (font (size 1.27 1.27)))) + ) + (pin power_out line + (at 25.4 13.969999999999999 180) + (length 5.08) + (name "MIC_BIAS" (effects (font (size 1.27 1.27)))) + (number "45" (effects (font (size 1.27 1.27)))) + ) + (pin input line + (at 25.4 11.43 180) + (length 5.08) + (name "MIC_LN" (effects (font (size 1.27 1.27)))) + (number "44" (effects (font (size 1.27 1.27)))) + ) + (pin input line + (at 25.4 8.89 180) + (length 5.08) + (name "MIC_LP" (effects (font (size 1.27 1.27)))) + (number "43" (effects (font (size 1.27 1.27)))) + ) + (pin no_connect line + (at 25.4 6.350000000000001 180) + (length 5.08) + (name "NC" (effects (font (size 1.27 1.27)))) + (number "42" (effects (font (size 1.27 1.27)))) + ) + (pin input line + (at 25.4 3.8099999999999987 180) + (length 5.08) + (name "MIC_RN" (effects (font (size 1.27 1.27)))) + (number "41" (effects (font (size 1.27 1.27)))) + ) + (pin input line + (at 25.4 1.2699999999999996 180) + (length 5.08) + (name "MIC_RP" (effects (font (size 1.27 1.27)))) + (number "40" (effects (font (size 1.27 1.27)))) + ) + (pin power_in line + (at 25.4 -1.2700000000000031 180) + (length 5.08) + (name "VCHG" (effects (font (size 1.27 1.27)))) + (number "39" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line + (at 25.4 -3.8100000000000023 180) + (length 5.08) + (name "USB_DN" (effects (font (size 1.27 1.27)))) + (number "38" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line + (at 25.4 -6.350000000000001 180) + (length 5.08) + (name "USB_DP" (effects (font (size 1.27 1.27)))) + (number "37" (effects (font (size 1.27 1.27)))) + ) + (pin power_in line + (at 25.4 -8.89 180) + (length 5.08) + (name "VDD_IO" (effects (font (size 1.27 1.27)))) + (number "36" (effects (font (size 1.27 1.27)))) + ) + (pin power_out line + (at 25.4 -11.43 180) + (length 5.08) + (name "1V8_OUT" (effects (font (size 1.27 1.27)))) + (number "35" (effects (font (size 1.27 1.27)))) + ) + (pin input line + (at 25.4 -13.969999999999999 180) + (length 5.08) + (name "SYS_CTRL" (effects (font (size 1.27 1.27)))) + (number "34" (effects (font (size 1.27 1.27)))) + ) + (pin power_in line + (at 25.4 -16.509999999999998 180) + (length 5.08) + (name "VBAT_IN" (effects (font (size 1.27 1.27)))) + (number "33" (effects (font (size 1.27 1.27)))) + ) + (pin power_in line + (at 25.4 -19.049999999999997 180) + (length 5.08) + (name "GND" (effects (font (size 1.27 1.27)))) + (number "32" (effects (font (size 1.27 1.27)))) + ) + (pin power_out line + (at 25.4 -21.590000000000003 180) + (length 5.08) + (name "VDD_USB_3V3_OUT" (effects (font (size 1.27 1.27)))) + (number "31" (effects (font (size 1.27 1.27)))) + ) + (pin no_connect line + (at 25.4 -24.130000000000003 180) + (length 5.08) + (name "NC" (effects (font (size 1.27 1.27)))) + (number "30" (effects (font (size 1.27 1.27)))) + ) + (pin input line + (at 25.4 -26.67 180) + (length 5.08) + (name "VCHG_SENSE" (effects (font (size 1.27 1.27)))) + (number "29" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line + (at 25.4 -29.21 180) + (length 5.08) + (name "PIO21" (effects (font (size 1.27 1.27)))) + (number "28" (effects (font (size 1.27 1.27)))) + ) + (pin bidirectional line + (at 25.4 -31.75 180) + (length 5.08) + (name "PIO20" (effects (font (size 1.27 1.27)))) + (number "27" (effects (font (size 1.27 1.27)))) + ) + ) + ) +)