Add real FSC-BT1035 footprint, reconstructed from DigiRadio's EasyEDA project

Extracted 52 pad records + silkscreen geometry from the raw JSON-Lines
document format inside manvalan/DigiRadio's fabricated EasyEDA Pro
project (epro2kicad couldn't handle this project's newer multi-doc
export format, so the relevant FOOTPRINT document was located and
parsed directly). Pad size/pitch independently match the official
FSC-BT1035 datasheet's mechanical spec exactly; pad numbering follows
the same perimeter walk as the datasheet's own pin table, so pad N =
pin N. The underlying component was originally a SnapEDA export for the
mechanically-compatible FSC-BT806 (same 13x26.9mm 52-pad family
package), relabeled BT1035 by the designer -- documented in README.

Validated with kicad-cli fp export + visual SVG comparison against the
datasheet's own footprint layout figure before import. No 3D model.
This commit is contained in:
2026-08-16 17:03:27 +02:00
parent 8d37069c3b
commit 626f141007
6 changed files with 117 additions and 19 deletions
+1
View File
@@ -542,3 +542,4 @@ footprint,/var/folders/cv/lwgyj_k14gx2rc3t2rlt29s80000gn/T/snapeda_n_5b_7ct/QFN4
symbol,/var/folders/cv/lwgyj_k14gx2rc3t2rlt29s80000gn/T/snapeda_prgp47iz/TLV320AIC3104IRHBR.kicad_sym,symbols/audio/TLV320AIC3104IRHBR.kicad_sym,NEW,ea3a215cfb4d8778ea76eb0733e4b67c61b7761d2897eee2f375f11ce80f7252,category=audio
footprint,/var/folders/cv/lwgyj_k14gx2rc3t2rlt29s80000gn/T/snapeda_prgp47iz/QFN50P500X500X100-33N.kicad_mod,footprints/audio/TLV320AIC3104IRHBR.pretty/QFN50P500X500X100-33N.kicad_mod,NEW,4d708f625a47c33414d9883c479a00a1819e666a2edf63016c803211893fd038,category=audio
3d-model,/var/folders/cv/lwgyj_k14gx2rc3t2rlt29s80000gn/T/snapeda_prgp47iz/TLV320AIC3104IRHBR.step,3dmodels/audio/TLV320AIC3104IRHBR.step,NEW,654de545fab7075336f7ddce6521d1562e7c414d6930785a7860a5e2fdf7c5ee,category=audio
footprint,/private/tmp/claude-501/-Users-michelebigi-Development-mikylab-kikad-library/1f1c2942-9607-4b23-b424-c9eee772a9a0/scratchpad/FSC-BT1035.kicad_mod,footprints/rf/FSC-BT1035.pretty/FSC-BT1035.kicad_mod,NEW,fe476fbba379d3ef2c26823bf72d4397190227bed02da4ed5ead7d546d1fcadb,category=rf
1 type source destination status hash notes
542 symbol /var/folders/cv/lwgyj_k14gx2rc3t2rlt29s80000gn/T/snapeda_prgp47iz/TLV320AIC3104IRHBR.kicad_sym symbols/audio/TLV320AIC3104IRHBR.kicad_sym NEW ea3a215cfb4d8778ea76eb0733e4b67c61b7761d2897eee2f375f11ce80f7252 category=audio
543 footprint /var/folders/cv/lwgyj_k14gx2rc3t2rlt29s80000gn/T/snapeda_prgp47iz/QFN50P500X500X100-33N.kicad_mod footprints/audio/TLV320AIC3104IRHBR.pretty/QFN50P500X500X100-33N.kicad_mod NEW 4d708f625a47c33414d9883c479a00a1819e666a2edf63016c803211893fd038 category=audio
544 3d-model /var/folders/cv/lwgyj_k14gx2rc3t2rlt29s80000gn/T/snapeda_prgp47iz/TLV320AIC3104IRHBR.step 3dmodels/audio/TLV320AIC3104IRHBR.step NEW 654de545fab7075336f7ddce6521d1562e7c414d6930785a7860a5e2fdf7c5ee category=audio
545 footprint /private/tmp/claude-501/-Users-michelebigi-Development-mikylab-kikad-library/1f1c2942-9607-4b23-b424-c9eee772a9a0/scratchpad/FSC-BT1035.kicad_mod footprints/rf/FSC-BT1035.pretty/FSC-BT1035.kicad_mod NEW fe476fbba379d3ef2c26823bf72d4397190227bed02da4ed5ead7d546d1fcadb category=rf
+22 -18
View File
@@ -258,31 +258,35 @@ 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)
### FSC-BT1035 (Feasycom Bluetooth module)
`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).
export`.
**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.
`footprints/rf/FSC-BT1035.pretty/FSC-BT1035.kicad_mod` was reconstructed
from the actual PCB footprint in `manvalan/DigiRadio`'s EasyEDA Pro
project (a fabricated, gerber-verified design) by extracting the raw pad
records from that project's internal document format (JSON-Lines with
`PAD`/`POLY` records per document; the relevant footprint document was
located, isolated, and parsed directly -- KiCad's own `epro2kicad`
converter couldn't be used as-is, since this newer EasyEDA Pro export
bundles all documents into one multi-record file rather than the
per-document files it expects). Notably, that project's component was
originally sourced from a SnapEDA export for the mechanically-compatible
**FSC-BT806** (same manufacturer, same 13 x 26.9mm 52-pad castellated
family package used across BT806/BT1026/BT1035/BT1038) and relabeled
`FSC-BT1035` by the designer; the extracted pad size (1.6 x 0.6mm) and
pitch (1.0mm) match the official FSC-BT1035 datasheet's own mechanical
spec exactly, and the pad numbering follows a single clean perimeter
walk (left column top-to-bottom, bottom row left-to-right, right column
bottom-to-top) identical to the datasheet's own Table 3-2 pin order, so
`pad N` = `pin N` throughout. Rounded body corners were simplified to
straight lines in the silkscreen (cosmetic only, no pad geometry
affected). No 3D model is included.
## Provenance
@@ -0,0 +1,91 @@
(footprint "FSC-BT1035"
(version 20241229)
(generator "mikilab_manual_conversion")
(layer "F.Cu")
(descr "Feasycom FSC-BT1035 Bluetooth 5.2 audio module. Pad geometry extracted from manvalan/DigiRadio EasyEDA project (fabricated design); pad numbering verified against the official Feasycom datasheet Table 3-2 perimeter walk. Rounded body corners simplified to straight lines.")
(tags "Feasycom FSC-BT1035 Bluetooth module")
(attr smd)
(fp_text reference "REF**" (at 0 -18) (layer "F.SilkS")
(effects (font (size 1 1) (thickness 0.15)))
)
(fp_text value "FSC-BT1035" (at 0 18) (layer "F.Fab")
(effects (font (size 1 1) (thickness 0.15)))
)
(pad "1" smd rect (at -6.5 -12.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "2" smd rect (at -6.5 -11.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "3" smd rect (at -6.5 -10.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "4" smd rect (at -6.5 -9.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "5" smd rect (at -6.5 -8.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "6" smd rect (at -6.5 -7.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "7" smd rect (at -6.5 -6.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "8" smd rect (at -6.5 -5.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "9" smd rect (at -6.5 -4.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "10" smd rect (at -6.5 -3.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "11" smd rect (at -6.5 -2.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "12" smd rect (at -6.5 -1.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "13" smd rect (at -6.5 0.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "14" smd rect (at -6.5 1.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "15" smd rect (at -6.5 2.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "16" smd rect (at -6.5 3.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "17" smd rect (at -6.5 4.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "18" smd rect (at -6.5 5.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "19" smd rect (at -6.5 6.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "20" smd rect (at -6.5 7.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "21" smd rect (at -6.5 8.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "22" smd rect (at -4.5 9.5) (size 0.6 1.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "23" smd rect (at -3.5 9.5) (size 0.6 1.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "24" smd rect (at -2.5 9.5) (size 0.6 1.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "25" smd rect (at -1.5 9.5) (size 0.6 1.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "26" smd rect (at -0.5 9.5) (size 0.6 1.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "27" smd rect (at 0.5 9.5) (size 0.6 1.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "28" smd rect (at 1.5 9.5) (size 0.6 1.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "29" smd rect (at 2.5 9.5) (size 0.6 1.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "30" smd rect (at 3.5 9.5) (size 0.6 1.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "31" smd rect (at 4.5 9.5) (size 0.6 1.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "32" smd rect (at 6.5 8.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "33" smd rect (at 6.5 7.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "34" smd rect (at 6.5 6.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "35" smd rect (at 6.5 5.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "36" smd rect (at 6.5 4.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "37" smd rect (at 6.5 3.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "38" smd rect (at 6.5 2.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "39" smd rect (at 6.5 1.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "40" smd rect (at 6.5 0.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "41" smd rect (at 6.5 -1.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "42" smd rect (at 6.5 -2.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "43" smd rect (at 6.5 -3.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "44" smd rect (at 6.5 -4.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "45" smd rect (at 6.5 -5.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "46" smd rect (at 6.5 -6.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "47" smd rect (at 6.5 -7.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "48" smd rect (at 6.5 -8.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "49" smd rect (at 6.5 -9.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "50" smd rect (at 6.5 -10.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "51" smd rect (at 6.5 -11.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(pad "52" smd rect (at 6.5 -12.0) (size 1.6 0.6) (layers "F.Cu" "F.Paste" "F.Mask"))
(fp_line (start -6.495 8.5813) (end -6.495 9.505) (stroke (width 0.127) (type default)) (layer "F.SilkS"))
(fp_line (start -6.0 10.0) (end -6.495 9.505) (stroke (width 0.127) (type default)) (layer "F.SilkS"))
(fp_line (start -6.0 10.0) (end -5.0 10.0) (stroke (width 0.127) (type default)) (layer "F.SilkS"))
(fp_line (start 5.0 10.0) (end 6.0 10.0) (stroke (width 0.127) (type default)) (layer "F.SilkS"))
(fp_line (start 6.5 9.5) (end 6.0 10.0) (stroke (width 0.127) (type default)) (layer "F.SilkS"))
(fp_line (start 6.5 9.5) (end 6.5 8.5) (stroke (width 0.127) (type default)) (layer "F.SilkS"))
(fp_line (start -6.495 -17.5) (end 6.5 -17.5) (stroke (width 0.127) (type default)) (layer "F.SilkS"))
(fp_line (start -6.495 -12.4977) (end -6.495 -17.5) (stroke (width 0.127) (type default)) (layer "F.SilkS"))
(fp_line (start 6.5 -12.5) (end 6.5 -17.5) (stroke (width 0.127) (type default)) (layer "F.SilkS"))
(fp_line (start 4.5 -12.5) (end 4.5 -16.5) (stroke (width 0.4) (type default)) (layer "F.SilkS"))
(fp_line (start 4.5 -16.5) (end 2.0 -16.5) (stroke (width 0.4) (type default)) (layer "F.SilkS"))
(fp_line (start 2.0 -16.5) (end 2.0 -14.0) (stroke (width 0.4) (type default)) (layer "F.SilkS"))
(fp_line (start 2.0 -14.0) (end 1.0 -14.0) (stroke (width 0.4) (type default)) (layer "F.SilkS"))
(fp_line (start 1.0 -14.0) (end 1.0 -16.5) (stroke (width 0.4) (type default)) (layer "F.SilkS"))
(fp_line (start 1.0 -16.5) (end 0.0 -16.5) (stroke (width 0.4) (type default)) (layer "F.SilkS"))
(fp_line (start 0.0 -16.5) (end 0.0 -14.0) (stroke (width 0.4) (type default)) (layer "F.SilkS"))
(fp_line (start 0.0 -14.0) (end -1.0 -14.0) (stroke (width 0.4) (type default)) (layer "F.SilkS"))
(fp_line (start -1.0 -14.0) (end -1.0 -16.5) (stroke (width 0.4) (type default)) (layer "F.SilkS"))
(fp_line (start -1.0 -16.5) (end -2.0 -16.5) (stroke (width 0.4) (type default)) (layer "F.SilkS"))
(fp_line (start -2.0 -16.5) (end -2.0 -14.0) (stroke (width 0.4) (type default)) (layer "F.SilkS"))
(fp_line (start -2.0 -14.0) (end -3.0 -14.0) (stroke (width 0.4) (type default)) (layer "F.SilkS"))
(fp_line (start -3.0 -14.0) (end -3.0 -16.5) (stroke (width 0.4) (type default)) (layer "F.SilkS"))
(fp_line (start -3.0 -16.5) (end -5.5 -16.5) (stroke (width 0.4) (type default)) (layer "F.SilkS"))
(fp_rect (start -6.5 -17.5) (end 6.5 10.0) (stroke (width 0.05) (type default)) (layer "F.Fab"))
(fp_rect (start -6.75 -17.75) (end 6.75 10.25) (stroke (width 0.05) (type default)) (layer "F.CrtYd"))
)
+1
View File
@@ -95,6 +95,7 @@
(lib (name "MIKILAB_ublox")(type "KiCad")(uri "${KIPRJMOD}/footprints/other/ublox.pretty")(options "")(descr "ublox.pretty"))
(lib (name "MIKILAB_wurth")(type "KiCad")(uri "${KIPRJMOD}/footprints/other/wurth.pretty")(options "")(descr "wurth.pretty"))
(lib (name "MIKILAB_zif")(type "KiCad")(uri "${KIPRJMOD}/footprints/other/zif.pretty")(options "")(descr "zif.pretty"))
(lib (name "MIKILAB_FSC_BT1035")(type "KiCad")(uri "${KIPRJMOD}/footprints/rf/FSC-BT1035.pretty")(options "")(descr "FSC-BT1035.pretty"))
(lib (name "MIKILAB_RTL8211F_CG")(type "KiCad")(uri "${KIPRJMOD}/footprints/rf/RTL8211F-CG.pretty")(options "")(descr "RTL8211F-CG.pretty"))
(lib (name "MIKILAB_antenna")(type "KiCad")(uri "${KIPRJMOD}/footprints/rf/antenna.pretty")(options "")(descr "antenna.pretty"))
(lib (name "MIKILAB_hackrf_expansion")(type "KiCad")(uri "${KIPRJMOD}/footprints/rf/hackrf_expansion.pretty")(options "")(descr "hackrf_expansion.pretty"))
+1
View File
@@ -95,6 +95,7 @@
(lib (name "MIKILAB_ublox")(type "KiCad")(uri "${MIKILAB}/footprints/other/ublox.pretty")(options "")(descr "ublox.pretty"))
(lib (name "MIKILAB_wurth")(type "KiCad")(uri "${MIKILAB}/footprints/other/wurth.pretty")(options "")(descr "wurth.pretty"))
(lib (name "MIKILAB_zif")(type "KiCad")(uri "${MIKILAB}/footprints/other/zif.pretty")(options "")(descr "zif.pretty"))
(lib (name "MIKILAB_FSC_BT1035")(type "KiCad")(uri "${MIKILAB}/footprints/rf/FSC-BT1035.pretty")(options "")(descr "FSC-BT1035.pretty"))
(lib (name "MIKILAB_RTL8211F_CG")(type "KiCad")(uri "${MIKILAB}/footprints/rf/RTL8211F-CG.pretty")(options "")(descr "RTL8211F-CG.pretty"))
(lib (name "MIKILAB_antenna")(type "KiCad")(uri "${MIKILAB}/footprints/rf/antenna.pretty")(options "")(descr "antenna.pretty"))
(lib (name "MIKILAB_hackrf_expansion")(type "KiCad")(uri "${MIKILAB}/footprints/rf/hackrf_expansion.pretty")(options "")(descr "hackrf_expansion.pretty"))
+1 -1
View File
@@ -13,7 +13,7 @@
(at -20.32 -34.29 0)
(effects (font (size 1.27 1.27)))
)
(property "Footprint" ""
(property "Footprint" "MIKILAB_FSC_BT1035:FSC-BT1035"
(at 0 0 0)
(effects (font (size 1.27 1.27)) hide)
)