Fix nets, breakaway layout, add schematic

This commit is contained in:
zyphlar
2026-07-04 03:28:12 -07:00
parent 181558e7aa
commit 3e7d12aa76
6 changed files with 1659 additions and 1066 deletions
-521
View File
@@ -1,521 +0,0 @@
(kicad_pcb (version 20221018) (generator "panel_v4")
(general (thickness 1.6))
(paper "A4")
(title_block
(title "Baby Mobile Combined Panel v4")
(date "2026-03-11")
(rev "4.0")
(comment 1 "Carrier: XIAO nRF52840 + IS25LP128F + TPS61220 + FPC-20")
(comment 2 "Adapters: SOP-8, SOP-16N, SOP-16W — castellated, FPC connected")
(comment 3 "Order: JLCPCB, 2-layer, castellated holes=yes, v-score=yes")
)
(layers
(0 "F.Cu" signal) (31 "B.Cu" signal)
(34 "B.Paste" user) (35 "F.Paste" user)
(36 "B.SilkS" user "B.Silkscreen") (37 "F.SilkS" user "F.Silkscreen")
(38 "B.Mask" user "B.Mask") (39 "F.Mask" user "F.Mask")
(44 "Edge.Cuts" user)
(48 "B.Fab" user "B.Fab") (49 "F.Fab" user "F.Fab")
)
(setup
(pad_to_mask_clearance 0.05)
(pcbplotparams (layerselection 0x00010fc_ffffffff) (outputdirectory "gerbers/"))
)
(net 0 "")
(net 1 "GND") (net 2 "VBAT") (net 3 "3V3")
(net 4 "SPI_MOSI") (net 5 "SPI_MISO") (net 6 "SPI_SCK") (net 7 "FLASH_CS")
(net 8 "BOOST_SW") (net 9 "AUDIO_FILT")
(net 10 "S1")
(net 11 "S2")
(net 12 "S3")
(net 13 "S4")
(net 14 "S5")
(net 15 "S6")
(net 16 "S7")
(net 17 "S8")
(net 18 "S9")
(net 19 "S10")
(net 20 "S11")
(net 21 "S12")
(net 22 "S13")
(net 23 "S14")
(net 24 "S15")
(net 25 "S16")
(gr_line (start 100.000 100.000) (end 148.000 100.000) (layer "Edge.Cuts") (width 0.1) (uuid "104212ff-f746-4f58-943d-69bf8fceaca8"))
(gr_line (start 148.000 100.000) (end 148.000 141.000) (layer "Edge.Cuts") (width 0.1) (uuid "3582d3c9-13f0-45b2-adcc-377473ebe9d0"))
(gr_line (start 148.000 141.000) (end 100.000 141.000) (layer "Edge.Cuts") (width 0.1) (uuid "6f73522e-31e6-40f3-bcc3-1fc0e689e4ea"))
(gr_line (start 100.000 141.000) (end 100.000 100.000) (layer "Edge.Cuts") (width 0.1) (uuid "32abf0f8-c4bc-4bb1-b0ff-b04110a51d70"))
(gr_line (start 100.000 126.500) (end 148.000 126.500) (layer "Edge.Cuts") (width 0.1) (uuid "abacf90f-5f8e-4ef2-a121-e18193bb9676"))
(gr_text "▼ SNAP ▼" (at 124.000 126.200) (layer "F.SilkS") (uuid "08a10b1f-8577-4491-91b9-4716c74212a0") (effects (font (size 0.5 0.5) (thickness 0.080))))
(gr_line (start 113.000 127.000) (end 113.000 141.000) (layer "Edge.Cuts") (width 0.1) (uuid "d345fc06-cad9-479e-93ef-620198f44922"))
(gr_line (start 129.000 127.000) (end 129.000 141.000) (layer "Edge.Cuts") (width 0.1) (uuid "dbae9c2c-4bd9-4726-8c84-b1c184d8c290"))
(gr_rect (start 103.000 104.250) (end 124.000 121.750) (layer "F.SilkS") (width 0.2) (uuid "92f1750d-b8eb-47ce-a180-938d8eda924b"))
(gr_rect (start 101.500 108.550) (end 103.000 117.450) (layer "F.SilkS") (width 0.2) (uuid "fa01c07d-7e52-4025-af49-3981a6177d03"))
(gr_rect (start 101.800 108.850) (end 102.900 117.150) (layer "F.SilkS") (width 0.15) (uuid "439700fa-f28d-4385-98da-44b6cda43749"))
(gr_text "USB-C" (at 103.500 113.000) (layer "F.SilkS") (uuid "60eea485-b0b6-45aa-bbf0-1643b0cbc37f") (effects (font (size 0.5 0.5) (thickness 0.080))))
(gr_text "XIAO nRF52840" (at 114.500 113.000) (layer "F.SilkS") (uuid "3adb0e5f-2bbe-4501-87b2-19458737e92a") (effects (font (size 0.8 0.8) (thickness 0.104))))
(gr_text "RST" (at 105.000 105.750) (layer "F.SilkS") (uuid "9b669ce2-3e3d-4a36-b6de-afcd6552af5e") (effects (font (size 0.4 0.4) (thickness 0.080))))
(gr_circle (center 104.000 105.750) (end 104.500 105.750) (layer "F.SilkS") (width 0.1) (fill none) (uuid "419559c3-f3cb-4448-801f-1bc1dc635a8f"))
(footprint "panel:J2_XIAO_L" (layer "F.Cu")
(at 104.610 113.000)
(uuid "1880d745-c8b8-49c4-801a-b7dded7fa4d4")
(fp_text reference "J2_XIAO_L" (at 0 0) (layer "F.Fab") (uuid "e72c399e-a106-4b11-9587-416d6d129d19")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "8ecd4411-88bc-41b3-85aa-c4c431acdc2d")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "D0" thru_hole circle (at 0.000 -7.620) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 10 "S1") (uuid "5f654290-e6f5-4cd1-b3e0-1e01b5e10eee"))
(pad "D1" thru_hole circle (at 0.000 -5.080) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 11 "S2") (uuid "c221edd1-da4f-427b-834a-117c9d1e8d1b"))
(pad "D2" thru_hole circle (at 0.000 -2.540) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 12 "S3") (uuid "08153f73-e1a6-455d-8b7a-a176f096ce82"))
(pad "D3" thru_hole circle (at 0.000 0.000) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 13 "S4") (uuid "5cc418f2-0d3d-46d8-ab1e-da6298ae825b"))
(pad "D4" thru_hole circle (at 0.000 2.540) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 14 "S5") (uuid "63e8f300-12fc-4b25-864b-a3ce15756f84"))
(pad "D5" thru_hole circle (at 0.000 5.080) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 15 "S6") (uuid "e116be82-17b5-489e-b602-501c0cb2c5e8"))
(pad "D6" thru_hole circle (at 0.000 7.620) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 16 "S7") (uuid "12b9d945-953b-4147-abb0-b33958ede447"))
)
(gr_text "D0" (at 102.110 105.380) (layer "F.SilkS") (uuid "062baf94-9f37-4f1b-a75a-447e7bbf4e87") (effects (font (size 0.45 0.45) (thickness 0.080))))
(gr_text "D1" (at 102.110 107.920) (layer "F.SilkS") (uuid "7e51d748-6cf6-4fbe-83a2-e22517497b30") (effects (font (size 0.45 0.45) (thickness 0.080))))
(gr_text "D2" (at 102.110 110.460) (layer "F.SilkS") (uuid "c536f2ba-04dd-469b-86bf-b64989766eaa") (effects (font (size 0.45 0.45) (thickness 0.080))))
(gr_text "D3" (at 102.110 113.000) (layer "F.SilkS") (uuid "fb1f005c-01fe-40b4-9f5e-19520b5e40e6") (effects (font (size 0.45 0.45) (thickness 0.080))))
(gr_text "D4" (at 102.110 115.540) (layer "F.SilkS") (uuid "87c7cbff-7db0-4c52-8c48-617a5fe31e7f") (effects (font (size 0.45 0.45) (thickness 0.080))))
(gr_text "D5" (at 102.110 118.080) (layer "F.SilkS") (uuid "9a253003-4842-4a93-99cf-fb57fcc7cf41") (effects (font (size 0.45 0.45) (thickness 0.080))))
(gr_text "D6" (at 102.110 120.620) (layer "F.SilkS") (uuid "b5b93455-6fbe-4017-ab71-710bfc3c2f9c") (effects (font (size 0.45 0.45) (thickness 0.080))))
(footprint "panel:J3_XIAO_R" (layer "F.Cu")
(at 122.390 113.000)
(uuid "478daaf8-7483-4c18-8d16-3af8d13f1e5a")
(fp_text reference "J3_XIAO_R" (at 0 0) (layer "F.Fab") (uuid "bbc610eb-4935-4d5b-998f-73da0871fd8a")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "78b14adf-d763-48b5-830a-4f4a7961ee99")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "D10" thru_hole circle (at 0.000 -7.620) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 17 "S8") (uuid "59eb4432-199b-4695-a612-a5507fa984d7"))
(pad "D9" thru_hole circle (at 0.000 -5.080) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 6 "SPI_SCK") (uuid "a57f5812-d1e7-46cd-89f7-6c8d3477a874"))
(pad "D8" thru_hole circle (at 0.000 -2.540) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 4 "SPI_MOSI") (uuid "0b2075c5-c1ed-4d53-873d-f83ba55d10e9"))
(pad "D7" thru_hole circle (at 0.000 0.000) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 5 "SPI_MISO") (uuid "5cbd35af-04be-4259-a124-3627c72fea10"))
(pad "3V3" thru_hole circle (at 0.000 2.540) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 3 "3V3") (uuid "670919f1-8cc6-40c5-98fc-401b537c26c1"))
(pad "GND" thru_hole circle (at 0.000 5.080) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 1 "GND") (uuid "bd89036b-ac87-476a-89fc-3ea51828db98"))
(pad "5V" thru_hole circle (at 0 7.62) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (uuid "f3f13533-e920-4db6-80a9-3517b7a64c80"))
)
(gr_text "D10" (at 125.190 105.380) (layer "F.SilkS") (uuid "4275c31d-9b16-4856-8700-6c07cc109456") (effects (font (size 0.45 0.45) (thickness 0.080))))
(gr_text "D9" (at 125.190 107.920) (layer "F.SilkS") (uuid "69073532-7c55-47b6-a165-1f93082b8c35") (effects (font (size 0.45 0.45) (thickness 0.080))))
(gr_text "D8" (at 125.190 110.460) (layer "F.SilkS") (uuid "b5cae429-dc50-4fe2-9378-264ff635ac1a") (effects (font (size 0.45 0.45) (thickness 0.080))))
(gr_text "D7" (at 125.190 113.000) (layer "F.SilkS") (uuid "71f6b3e5-56d1-4f91-9b80-34363d2cc403") (effects (font (size 0.45 0.45) (thickness 0.080))))
(gr_text "3V3" (at 125.190 115.540) (layer "F.SilkS") (uuid "df934edf-0319-4bd5-ab19-f93733b9b9a4") (effects (font (size 0.45 0.45) (thickness 0.080))))
(gr_text "GND" (at 125.190 118.080) (layer "F.SilkS") (uuid "49eef609-08c6-4002-a11d-552004ad1233") (effects (font (size 0.45 0.45) (thickness 0.080))))
(gr_text "5V" (at 125.190 120.620) (layer "F.SilkS") (uuid "29c03aea-4a86-4e11-a534-6e8a142e738f") (effects (font (size 0.45 0.45) (thickness 0.080))))
(gr_rect (start 129.500 102.300) (end 134.500 108.700) (layer "F.SilkS") (width 0.15) (uuid "ece65163-9657-4253-9e7c-cf0e2df69d41"))
(gr_circle (center 130.500 107.700) (end 130.750 107.700) (layer "F.SilkS") (width 0.1) (fill solid) (uuid "ffc30771-b96d-4890-92ef-8a49a59bf10d"))
(gr_circle (center 132.000 108.700) (end 132.400 108.700) (layer "F.SilkS") (width 0.1) (fill none) (uuid "2cf964ff-8310-4b73-ac5b-8c0325559520"))
(gr_text "U2" (at 132.000 101.300) (layer "F.SilkS") (uuid "4b61fa0a-ae7c-463f-85a2-f1b1079f263a") (effects (font (size 0.5 0.5) (thickness 0.080))))
(gr_text "IS25LP128F" (at 132.000 110.200) (layer "F.SilkS") (uuid "91213253-1da6-483e-9a33-132cc1cfeec0") (effects (font (size 0.4 0.4) (thickness 0.080))))
(gr_text "1" (at 130.095 109.400) (layer "F.SilkS") (uuid "c389beaf-bb8a-42b8-ada0-cead80b18723") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "2" (at 131.365 109.400) (layer "F.SilkS") (uuid "9a047c7e-335c-40b2-9d91-a0164c53e686") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "3" (at 132.635 109.400) (layer "F.SilkS") (uuid "acce117a-e72e-48b0-8bbc-7291cc3faed1") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "4" (at 133.905 109.400) (layer "F.SilkS") (uuid "5d0bfd10-bc74-416b-a1e2-b3ea899497d9") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "8" (at 130.095 101.600) (layer "F.SilkS") (uuid "eecce093-ba35-41a5-866a-ebf3b5f6bf7e") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "7" (at 131.365 101.600) (layer "F.SilkS") (uuid "572fb423-e189-4760-be9c-6aa1fe68470e") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "6" (at 132.635 101.600) (layer "F.SilkS") (uuid "076ee973-262b-4d67-b110-8d39e6bf5aec") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "5" (at 133.905 101.600) (layer "F.SilkS") (uuid "53062d13-f3c8-4ffc-a340-7303f1916a86") (effects (font (size 0.3 0.3) (thickness 0.080))))
(footprint "panel:U2_Flash" (layer "F.Cu")
(at 132.000 105.500)
(uuid "33f564be-74cb-4b07-9514-48c38bcf8b14")
(fp_text reference "U2_Flash" (at 0 0) (layer "F.Fab") (uuid "2891d898-66a3-4f26-86ab-d7c3390f90b8")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "7c379697-fc67-4742-9331-165515e56009")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "1" smd rect (at -1.905 2.700) (size 0.600 1.500) (layers "F.Cu" "F.Paste" "F.Mask") (net 7 "FLASH_CS") (uuid "0f15bea3-f2c1-49e6-97b1-573cd5a98bcd"))
(pad "2" smd rect (at -0.635 2.700) (size 0.600 1.500) (layers "F.Cu" "F.Paste" "F.Mask") (net 5 "SPI_MISO") (uuid "d5cca333-1aa2-4ac6-b73b-2efb9e83ca32"))
(pad "3" smd rect (at 0.635 2.700) (size 0.600 1.500) (layers "F.Cu" "F.Paste" "F.Mask") (net 3 "3V3") (uuid "9af46e90-187d-4c3f-a493-83d009f15909"))
(pad "4" smd rect (at 1.905 2.700) (size 0.600 1.500) (layers "F.Cu" "F.Paste" "F.Mask") (net 1 "GND") (uuid "9a67a279-fb78-4946-be3e-06ab38e9cf5c"))
(pad "5" smd rect (at 1.905 -2.700) (size 0.600 1.500) (layers "F.Cu" "F.Paste" "F.Mask") (net 4 "SPI_MOSI") (uuid "1aa3f49b-ee12-4257-bd98-b46343cb6ec3"))
(pad "6" smd rect (at 0.635 -2.700) (size 0.600 1.500) (layers "F.Cu" "F.Paste" "F.Mask") (net 6 "SPI_SCK") (uuid "e3656871-82ec-4a1f-a339-a99e38566725"))
(pad "7" smd rect (at -0.635 -2.700) (size 0.600 1.500) (layers "F.Cu" "F.Paste" "F.Mask") (net 3 "3V3") (uuid "c01e362b-fa39-45fd-9d08-20192e13cc0e"))
(pad "8" smd rect (at -1.905 -2.700) (size 0.600 1.500) (layers "F.Cu" "F.Paste" "F.Mask") (net 3 "3V3") (uuid "bf52d31d-3fa3-44c6-b949-39bb7be69947"))
)
(footprint "panel:C3" (layer "F.Cu")
(at 137.500 104.500)
(uuid "efd45baf-76b1-41b8-9a69-d16c4aff9996")
(fp_text reference "C3" (at 0 0) (layer "F.Fab") (uuid "a96b08f3-828d-4372-a868-703ccc8aa653")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "b58de4ee-0bc1-4028-90e3-53d63e842878")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "1" smd rect (at -1.000 0.000) (size 1.000 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 3 "3V3") (uuid "f3c64e10-394d-4f53-8c70-3ebc293cde64"))
(pad "2" smd rect (at 1.000 0.000) (size 1.000 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 1 "GND") (uuid "fbdd13da-6c60-4ea6-911e-fe65eede2847"))
)
(gr_text "C3" (at 137.500 103.200) (layer "F.SilkS") (uuid "808da9f5-dde2-4311-8f1f-0a875d9add55") (effects (font (size 0.4 0.4) (thickness 0.080))))
(gr_text "100n" (at 137.500 105.800) (layer "F.SilkS") (uuid "a3914fa0-a733-4591-911f-a6d26678ce2b") (effects (font (size 0.35 0.35) (thickness 0.080))))
(footprint "panel:R2" (layer "F.Cu")
(at 137.500 107.500)
(uuid "4828ff79-0549-47d3-8288-89dd7fd1ffc0")
(fp_text reference "R2" (at 0 0) (layer "F.Fab") (uuid "7807c9fe-f96b-4071-82d0-21ac015980fd")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "f3fb6f6e-1ef7-42eb-a348-8b6d7aab4538")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "1" smd rect (at -1.000 0.000) (size 1.000 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 7 "FLASH_CS") (uuid "1ccfaa3c-7ea6-4eda-888b-928d091041ad"))
(pad "2" smd rect (at 1.000 0.000) (size 1.000 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 3 "3V3") (uuid "f8c4ab39-a4c3-4458-bdd8-29f399b1abee"))
)
(gr_text "R2" (at 137.500 106.300) (layer "F.SilkS") (uuid "c690803d-f367-4a01-baaf-b0f211e95d90") (effects (font (size 0.4 0.4) (thickness 0.080))))
(gr_text "10K" (at 137.500 108.800) (layer "F.SilkS") (uuid "71947797-a79c-4b48-9356-ef04c53cb56e") (effects (font (size 0.35 0.35) (thickness 0.080))))
(footprint "panel:R1" (layer "F.Cu")
(at 132.000 114.000)
(uuid "37cc5e4d-7bf4-41a9-b81e-78764e60f07e")
(fp_text reference "R1" (at 0 0) (layer "F.Fab") (uuid "2ce5f8a6-fc73-4909-a493-fa4121752043")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "7e4aacb8-c4cd-441b-8889-70d980a27059")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "1" smd rect (at -1.000 0.000) (size 1.000 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 17 "S8") (uuid "8cbfc39f-b0c1-4776-87f0-5c46aa4adca7"))
(pad "2" smd rect (at 1.000 0.000) (size 1.000 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 9 "AUDIO_FILT") (uuid "7f43e904-361c-47d3-9be2-9a180465ee3a"))
)
(gr_text "R1 4.7K" (at 132.000 112.700) (layer "F.SilkS") (uuid "60598c4b-e455-4930-9b04-61573d2f5eca") (effects (font (size 0.4 0.4) (thickness 0.080))))
(footprint "panel:C5" (layer "F.Cu")
(at 132.000 117.000)
(uuid "c2dc742d-aa63-4e4f-937b-6eca10fc9c75")
(fp_text reference "C5" (at 0 0) (layer "F.Fab") (uuid "3a7604db-e795-488a-81b5-f79e4a9493dd")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "68eb2d54-0fbe-4929-a0a8-f4257e22fdb0")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "1" smd rect (at -1.000 0.000) (size 1.000 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 9 "AUDIO_FILT") (uuid "dd5bc709-6ccd-4d90-84d9-e2ba222d74ee"))
(pad "2" smd rect (at 1.000 0.000) (size 1.000 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 1 "GND") (uuid "9c8ee84f-d527-41d9-8387-55957a1174d3"))
)
(gr_text "C5 10n" (at 132.000 115.700) (layer "F.SilkS") (uuid "d0cfaf10-7857-4574-950b-26e43f1545b7") (effects (font (size 0.4 0.4) (thickness 0.080))))
(gr_rect (start 130.800 119.900) (end 133.200 122.100) (layer "F.SilkS") (width 0.15) (uuid "0fa298c0-2c90-4739-a08a-2c2f49b38083"))
(gr_circle (center 131.200 121.600) (end 131.400 121.600) (layer "F.SilkS") (width 0.1) (fill solid) (uuid "e2f3da83-8936-4675-9858-21bfae676a64"))
(gr_text "U1" (at 132.000 119.000) (layer "F.SilkS") (uuid "cb9a68ed-419f-491d-8137-cf10ee619bad") (effects (font (size 0.5 0.5) (thickness 0.080))))
(gr_text "TPS61220" (at 132.000 123.000) (layer "F.SilkS") (uuid "1bfc84ca-8d74-42f9-9cb8-03875e1b2e62") (effects (font (size 0.4 0.4) (thickness 0.080))))
(gr_text "●1" (at 130.500 121.700) (layer "F.SilkS") (uuid "3a4a9480-9920-4f69-a857-f558f0f96f1c") (effects (font (size 0.35 0.35) (thickness 0.080))))
(footprint "panel:U1_Boost" (layer "F.Cu")
(at 132.000 121.000)
(uuid "2af40a9c-cc47-4186-b24a-afbc0dc415d2")
(fp_text reference "U1_Boost" (at 0 0) (layer "F.Fab") (uuid "8bd65444-2019-4305-bd42-ac670d94d03f")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "db837181-13dc-4a5b-8aa0-2ff6b17d2bf3")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "1" smd rect (at -0.650 0.700) (size 0.400 0.550) (layers "F.Cu" "F.Paste" "F.Mask") (net 2 "VBAT") (uuid "ce1de65a-77a3-4577-be0e-4fcc3d33231e"))
(pad "2" smd rect (at 0.000 0.700) (size 0.400 0.550) (layers "F.Cu" "F.Paste" "F.Mask") (net 1 "GND") (uuid "217a9c08-efa3-4774-b954-18bbf01ecb7c"))
(pad "3" smd rect (at 0.650 0.700) (size 0.400 0.550) (layers "F.Cu" "F.Paste" "F.Mask") (net 2 "VBAT") (uuid "5babc1dc-21a4-49d0-9020-12feaa08bc0a"))
(pad "4" smd rect (at 0.650 -0.700) (size 0.400 0.550) (layers "F.Cu" "F.Paste" "F.Mask") (net 3 "3V3") (uuid "2ba70765-f8dd-4b1c-83e9-0f937f0f9ab8"))
(pad "5" smd rect (at -0.650 -0.700) (size 0.400 0.550) (layers "F.Cu" "F.Paste" "F.Mask") (net 8 "BOOST_SW") (uuid "73df7ccd-cf26-49c3-8502-9e90cde88ae1"))
)
(footprint "panel:L1" (layer "F.Cu")
(at 128.000 121.000)
(uuid "f96fa760-64a2-473d-899a-25cdad7c3597")
(fp_text reference "L1" (at 0 0) (layer "F.Fab") (uuid "c21c63d8-c2c4-4bbb-99d9-1b274744d5fe")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "4279096d-5d93-4770-9180-7becc894136d")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "1" smd rect (at -1.000 0.000) (size 1.000 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 8 "BOOST_SW") (uuid "b20ee262-c535-417a-a73c-0e2687cad09d"))
(pad "2" smd rect (at 1.000 0.000) (size 1.000 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 2 "VBAT") (uuid "a540c5d1-5051-4643-9505-79000e44981c"))
)
(gr_text "L1 4.7u" (at 128.000 119.700) (layer "F.SilkS") (uuid "2a91a58a-e32d-4523-bea1-97ba117814e3") (effects (font (size 0.4 0.4) (thickness 0.080))))
(footprint "panel:C1" (layer "F.Cu")
(at 128.000 124.000)
(uuid "3a657071-f4ee-4825-bfba-26a1fb04f5d2")
(fp_text reference "C1" (at 0 0) (layer "F.Fab") (uuid "1aea0979-c014-4c85-8e1d-bcbd79658f12")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "9acc7a02-d4b1-4c31-b43c-5faf0a849ed4")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "1" smd rect (at -1.000 0.000) (size 1.000 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 2 "VBAT") (uuid "0152ceb3-ddd4-40be-a449-d93331e07083"))
(pad "2" smd rect (at 1.000 0.000) (size 1.000 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 1 "GND") (uuid "8913c282-793c-456e-89fe-6977c0fafc66"))
)
(gr_text "C1 10u" (at 128.000 122.700) (layer "F.SilkS") (uuid "4ea7e5b0-191d-4413-83a4-aad980f4e93a") (effects (font (size 0.4 0.4) (thickness 0.080))))
(footprint "panel:C2" (layer "F.Cu")
(at 136.000 121.000)
(uuid "e8f514a1-88cd-43b2-a781-335492bcbcf2")
(fp_text reference "C2" (at 0 0) (layer "F.Fab") (uuid "b87afcab-872d-49c9-82fb-f78b84d927e3")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "60db2f2f-22a9-4755-a5d2-a3ee5f2fb6d4")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "1" smd rect (at -1.000 0.000) (size 1.000 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 3 "3V3") (uuid "358331d0-8b7a-41a9-8a9e-1087840ee3d9"))
(pad "2" smd rect (at 1.000 0.000) (size 1.000 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 1 "GND") (uuid "f221174c-b9f9-4891-8017-4adfc612ccaf"))
)
(gr_text "C2 10u" (at 136.000 119.700) (layer "F.SilkS") (uuid "044bb87c-741d-4368-a57d-c8266bbc1771") (effects (font (size 0.4 0.4) (thickness 0.080))))
(gr_rect (start 132.250 112.000) (end 143.750 116.000) (layer "F.SilkS") (width 0.15) (uuid "9ea3ca6a-5fda-4f29-b7db-6ebf9ba7c626"))
(gr_text "J1 FPC-20" (at 138.000 111.000) (layer "F.SilkS") (uuid "3422609b-3569-40cb-9db7-0109b17c6ed7") (effects (font (size 0.5 0.5) (thickness 0.080))))
(gr_text "0.5mm TO TOY" (at 138.000 117.000) (layer "F.SilkS") (uuid "2d55e91d-3585-4aff-9c9c-22b9c00432d6") (effects (font (size 0.35 0.35) (thickness 0.080))))
(gr_circle (center 132.450 114.000) (end 132.650 114.000) (layer "F.SilkS") (width 0.1) (fill solid) (uuid "e391d4d7-a95d-4220-a7df-956ab2b8c543"))
(footprint "panel:J1_FPC20" (layer "F.Cu")
(at 138.000 114.000)
(uuid "3f816365-83a9-4ff8-b514-ccf442363914")
(fp_text reference "J1_FPC20" (at 0 0) (layer "F.Fab") (uuid "aee8fc4f-a915-4316-8fbb-0f0efa9ae59e")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "f0439331-00e3-4de4-a54f-cc01f3b478f6")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "1" smd rect (at -4.750 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 2 "VBAT") (uuid "d1433479-2a86-4aa3-b4bd-c125eaa16e08"))
(pad "2" smd rect (at -4.250 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 1 "GND") (uuid "b27d4a5e-566f-4a1d-a6ed-6f366e0afc57"))
(pad "3" smd rect (at -3.750 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 10 "S1") (uuid "18fd493e-b7c7-4bed-8dc1-13621b62cc84"))
(pad "4" smd rect (at -3.250 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 11 "S2") (uuid "94d7cc29-fce9-4f0e-b5e9-6f12af13ef92"))
(pad "5" smd rect (at -2.750 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 12 "S3") (uuid "59420d4c-db3e-4240-9b1a-c90c8ae1542e"))
(pad "6" smd rect (at -2.250 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 13 "S4") (uuid "faadeab4-57ef-4ef5-b311-b1c7761bc9f7"))
(pad "7" smd rect (at -1.750 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 14 "S5") (uuid "7efd0d58-367e-4771-ad2a-a3686881bd63"))
(pad "8" smd rect (at -1.250 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 15 "S6") (uuid "7ac40232-945a-46eb-aa7e-8ccccbc12a77"))
(pad "9" smd rect (at -0.750 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 16 "S7") (uuid "d3c3fb8a-d27f-4f02-bcc3-8545e2054792"))
(pad "10" smd rect (at -0.250 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 17 "S8") (uuid "70aba067-8afc-49ee-add4-9bbfcb9453f2"))
(pad "11" smd rect (at 0.250 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 18 "S9") (uuid "ac6c3278-3618-4701-bd24-d977ce37f602"))
(pad "12" smd rect (at 0.750 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 19 "S10") (uuid "b058dd64-c190-4754-99a3-6064013c3e39"))
(pad "13" smd rect (at 1.250 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 20 "S11") (uuid "511b95d4-8977-4d1c-9e3b-a92b188b596c"))
(pad "14" smd rect (at 1.750 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 21 "S12") (uuid "b54af070-335e-4cb5-b91f-bf78e0053d94"))
(pad "15" smd rect (at 2.250 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 22 "S13") (uuid "e804928f-a7ea-40f2-9f2f-3f025713e55a"))
(pad "16" smd rect (at 2.750 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 23 "S14") (uuid "63e74f2d-64c0-4b70-bba4-19f6d732dc1a"))
(pad "17" smd rect (at 3.250 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 24 "S15") (uuid "30b4a519-b7da-4868-b855-f7a9e654003a"))
(pad "18" smd rect (at 3.750 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 25 "S16") (uuid "57dba54c-08f3-41ce-9b9f-f76d817e86bc"))
(pad "19" smd rect (at 4.250 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 1 "GND") (uuid "d060e6ed-acef-4d5c-ae20-63a58c88c1bd"))
(pad "20" smd rect (at 4.750 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 1 "GND") (uuid "ffa04cb1-489a-4f21-80b9-afb8abf193e0"))
(pad "S1" smd rect (at -5.250 2.500) (size 1.500 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "7a1aa6df-4bda-470f-847f-5ae83570ed09"))
(pad "S2" smd rect (at 5.250 2.500) (size 1.500 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "e5bbf1ea-2226-4cc0-ad10-798b08f15f04"))
)
(footprint "panel:MH" (layer "F.Cu")
(at 102.000 124.000)
(uuid "571767de-220f-4747-a455-fa2326a12da0")
(fp_text reference "MH" (at 0 0) (layer "F.Fab") (uuid "d9ad2950-5233-4182-bfbe-31ea3e304164")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "e161b347-8c67-4494-ac88-921b1c6b2902")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "" thru_hole circle (at 0 0) (size 3.5 3.5) (drill 2.2) (layers "*.Cu" "*.Mask") (uuid "1e1e030e-d951-4662-8166-be001a7a274f"))
)
(footprint "panel:MH" (layer "F.Cu")
(at 141.000 124.000)
(uuid "079cc614-6c0f-45dc-ab83-9ca22a61e4de")
(fp_text reference "MH" (at 0 0) (layer "F.Fab") (uuid "7f3bdd48-fbea-40ba-b4e0-433e609224df")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "e9850b50-cc1e-4a98-ad13-079fd24495c1")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "" thru_hole circle (at 0 0) (size 3.5 3.5) (drill 2.2) (layers "*.Cu" "*.Mask") (uuid "fcdaf0bc-fced-4f6d-a9ef-7bd7b8d60db2"))
)
(gr_text "XIAO: D0-D6→SIG1-7 D7=MISO D8=MOSI D9=SCK D10=AUDIO(S8)" (at 122.000 113.000) (layer "B.SilkS") (uuid "db3546b9-49a3-48f2-8c4f-0b7752eeafe2") (effects (font (size 0.4 0.4) (thickness 0.080))))
(gr_text "FPC: 1=VBAT 2=GND 3-10=S1-S8 19-20=GND" (at 122.000 115.000) (layer "B.SilkS") (uuid "753ca2e9-ce32-4abf-9dd9-52a997487dc0") (effects (font (size 0.4 0.4) (thickness 0.080))))
(gr_line (start 103.095 132.050) (end 109.905 132.050) (layer "Edge.Cuts") (width 0.1) (uuid "9a7f2724-0131-4c3b-bea2-2264285f74e4"))
(gr_line (start 109.905 132.050) (end 109.905 135.950) (layer "Edge.Cuts") (width 0.1) (uuid "0b095cb1-b39a-4054-9f58-00d6b4936664"))
(gr_line (start 109.905 135.950) (end 103.095 135.950) (layer "Edge.Cuts") (width 0.1) (uuid "cab1f064-a98c-4d49-9397-25d7695f6423"))
(gr_line (start 103.095 135.950) (end 103.095 132.050) (layer "Edge.Cuts") (width 0.1) (uuid "b29ece6a-b547-4e60-9752-00ce868059b9"))
(gr_text "SOP-8" (at 106.500 134.000) (layer "F.SilkS") (uuid "539e9b84-172f-48da-b0dd-0b9eba546029") (effects (font (size 0.6 0.6) (thickness 0.080))))
(footprint "panel:SOP-8_cast" (layer "B.Cu")
(at 106.500 134.000)
(uuid "4c7c992b-b0fd-4d6b-95e8-d3b01e40d0b8")
(fp_text reference "SOP-8_cast" (at 0 0) (layer "B.Fab") (uuid "23717134-9635-41ca-ae3e-c922dc622cbb")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "B.Fab") (uuid "1e7921d7-68b6-484d-96d5-d0275c185e0c")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "1" thru_hole circle (at -1.905 1.950) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 10 "S1") (uuid "5452e05e-b51a-4170-8795-b36d7a08bfdc"))
(pad "8" thru_hole circle (at -1.905 -1.950) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 17 "S8") (uuid "e2f7fbbf-e763-4611-9f49-65a8753d77d0"))
(pad "2" thru_hole circle (at -0.635 1.950) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 11 "S2") (uuid "2adf23e2-bc6e-47e3-909a-81b097715476"))
(pad "7" thru_hole circle (at -0.635 -1.950) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 16 "S7") (uuid "5a265b71-f783-4e9e-9398-592ee8632a06"))
(pad "3" thru_hole circle (at 0.635 1.950) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 12 "S3") (uuid "7eb87ed8-e8dc-4ea9-a54d-f8c22c3d32ad"))
(pad "6" thru_hole circle (at 0.635 -1.950) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 15 "S6") (uuid "c8f53fcb-3148-4aad-848f-2c48fb98bbf4"))
(pad "4" thru_hole circle (at 1.905 1.950) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 13 "S4") (uuid "4316b7f9-5e81-40aa-9f9d-c7877c13ed09"))
(pad "5" thru_hole circle (at 1.905 -1.950) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 14 "S5") (uuid "fcbc4fd6-99db-4c24-8ac9-e9f56db86444"))
)
(gr_text "1" (at 104.595 136.650) (layer "F.SilkS") (uuid "4d1476db-ee68-4e0b-9e08-d4a273920de4") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "8" (at 104.595 131.350) (layer "F.SilkS") (uuid "52018866-9c48-40f7-b7e7-5fdd0e592704") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "2" (at 105.865 136.650) (layer "F.SilkS") (uuid "e2f9cc71-ad1f-40c0-a864-88aa307f1780") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "7" (at 105.865 131.350) (layer "F.SilkS") (uuid "819aa9b0-f2d7-4b9c-a70b-fb0079192465") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "3" (at 107.135 136.650) (layer "F.SilkS") (uuid "57194f12-e19b-4c4c-8b66-1f03f908c4e6") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "6" (at 107.135 131.350) (layer "F.SilkS") (uuid "8a059530-c396-41e1-8d70-47ff4277db88") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "4" (at 108.405 136.650) (layer "F.SilkS") (uuid "62a91cfa-52ac-4f30-81f0-69ac4ace680a") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "5" (at 108.405 131.350) (layer "F.SilkS") (uuid "3e364889-9ab4-48ab-a77b-1d878eb4b0b9") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_circle (center 104.095 136.450) (end 104.295 136.450) (layer "F.SilkS") (width 0.1) (fill solid) (uuid "97174ff1-068b-4d5b-82b6-5ac872da565b"))
(gr_text "●1" (at 104.095 137.250) (layer "F.SilkS") (uuid "d0f33f1d-5655-45da-8910-dab6754cdf35") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "SOP-8 ●1→" (at 106.500 134.000) (layer "B.SilkS") (uuid "ac735036-ae6b-4610-92b6-cc5fb111887a") (effects (font (size 0.5 0.5) (thickness 0.080)) (justify mirror)))
(footprint "panel:SOP-8_FPC" (layer "F.Cu")
(at 106.500 134.000)
(uuid "3dad6b1d-9358-4cc3-ac58-82f1c58a2804")
(fp_text reference "SOP-8_FPC" (at 0 0) (layer "F.Fab") (uuid "1e680e55-dad0-461a-b3eb-1a4fe213f66c")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "23e95c73-5511-413b-83a3-e85bb9e2152a")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "F1" smd rect (at -2.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 10 "S1") (uuid "38559afc-7c70-4617-805a-91274340e041"))
(pad "F2" smd rect (at -1.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 11 "S2") (uuid "147c5bcd-be57-4d50-885a-34322ffd14c2"))
(pad "F3" smd rect (at -1.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 12 "S3") (uuid "53cf8a80-96f5-44e5-abd1-11ecafdd614a"))
(pad "F4" smd rect (at -0.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 13 "S4") (uuid "c770c45d-d862-4e7e-b1ea-c8b4ef1abd91"))
(pad "F5" smd rect (at -0.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 14 "S5") (uuid "be84ab5c-4222-40f7-a3a7-31283ee8bde9"))
(pad "F6" smd rect (at 0.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 15 "S6") (uuid "ff8e54c9-95c0-4f37-9a99-9a48bbc51cc8"))
(pad "F7" smd rect (at 0.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 16 "S7") (uuid "546ad7c7-0baf-40e2-9f87-6a7745fc11c2"))
(pad "F8" smd rect (at 1.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 17 "S8") (uuid "f7015feb-900c-423c-a6a2-8ae7a5d6fa3e"))
(pad "F9" smd rect (at 1.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 1 "GND") (uuid "ef98022a-359f-4fe2-b212-5df918c9f07b"))
(pad "F10" smd rect (at 2.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 2 "VBAT") (uuid "8ab83d95-5a3b-4bdd-a4b3-9fd0ab8f0aa6"))
(pad "SA" smd rect (at -3.750 1.500) (size 1.200 0.800) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "605581d3-b6b6-43c9-9b42-c9bf5be3d496"))
(pad "SB" smd rect (at 3.750 1.500) (size 1.200 0.800) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "df35960c-79c1-4d08-9e83-e3e8bf37b583"))
)
(gr_text "FPC" (at 106.500 132.200) (layer "F.SilkS") (uuid "d8523f7a-d337-4251-9764-b43c43afa08b") (effects (font (size 0.35 0.35) (thickness 0.080))))
(gr_circle (center 103.650 134.000) (end 103.800 134.000) (layer "F.SilkS") (width 0.1) (fill solid) (uuid "9e6c0818-e3e5-4e00-a639-9c2f3edd8185"))
(gr_line (start 115.055 131.000) (end 126.945 131.000) (layer "Edge.Cuts") (width 0.1) (uuid "278bea3d-fc54-47d1-8ced-327a716b464c"))
(gr_line (start 126.945 131.000) (end 126.945 137.000) (layer "Edge.Cuts") (width 0.1) (uuid "6b756ef1-0a91-4f02-8b4c-fb525bd364dd"))
(gr_line (start 126.945 137.000) (end 115.055 137.000) (layer "Edge.Cuts") (width 0.1) (uuid "3123ee0d-079a-4ded-b59f-1ef2174dcc8f"))
(gr_line (start 115.055 137.000) (end 115.055 131.000) (layer "Edge.Cuts") (width 0.1) (uuid "fbe1d789-50b3-4764-9f8f-c38d1cae5222"))
(gr_text "SOP-16N" (at 121.000 134.000) (layer "F.SilkS") (uuid "e0f52eb7-7282-4579-9095-232aefd08e8f") (effects (font (size 0.6 0.6) (thickness 0.080))))
(footprint "panel:SOP-16N_cast" (layer "B.Cu")
(at 121.000 134.000)
(uuid "63a9c132-87a0-471b-8398-9b33799cea4c")
(fp_text reference "SOP-16N_cast" (at 0 0) (layer "B.Fab") (uuid "8bd9b964-5325-4a22-a5c7-3cecff8bb689")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "B.Fab") (uuid "d5510553-a0dc-42dc-b640-acc6fe82d989")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "1" thru_hole circle (at -4.445 3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 10 "S1") (uuid "de25202a-0f4b-4f7b-9b73-97e035153c33"))
(pad "16" thru_hole circle (at -4.445 -3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 25 "S16") (uuid "0b62ef46-ff73-4621-8ff7-ec3ff2dba80b"))
(pad "2" thru_hole circle (at -3.175 3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 11 "S2") (uuid "369eea38-5703-43c2-b1ef-40c9369089bc"))
(pad "15" thru_hole circle (at -3.175 -3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 24 "S15") (uuid "2c6f5a7d-5516-4a78-abbf-5373f4d04169"))
(pad "3" thru_hole circle (at -1.905 3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 12 "S3") (uuid "7a5fada2-9023-4d4e-8276-14e77ec74bd1"))
(pad "14" thru_hole circle (at -1.905 -3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 23 "S14") (uuid "629acbd3-a15a-4b66-8d96-4b13ef86f732"))
(pad "4" thru_hole circle (at -0.635 3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 13 "S4") (uuid "69b92902-85e6-43ef-963b-8a83a6e99108"))
(pad "13" thru_hole circle (at -0.635 -3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 22 "S13") (uuid "efdd3233-a26a-4941-83e3-ea736ac2087b"))
(pad "5" thru_hole circle (at 0.635 3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 14 "S5") (uuid "b31cc215-de29-41a6-be18-5801d8cb0b68"))
(pad "12" thru_hole circle (at 0.635 -3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 21 "S12") (uuid "f8449e7e-881c-4476-b784-1df7da95acae"))
(pad "6" thru_hole circle (at 1.905 3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 15 "S6") (uuid "b37926b4-9547-4f90-bb69-5be24f954dca"))
(pad "11" thru_hole circle (at 1.905 -3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 20 "S11") (uuid "7846e631-5ac4-4d85-be2a-f9a7314b5beb"))
(pad "7" thru_hole circle (at 3.175 3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 16 "S7") (uuid "5a158927-c1d4-4794-8d5c-f6c10469b84f"))
(pad "10" thru_hole circle (at 3.175 -3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 19 "S10") (uuid "f1598ad1-7c80-4052-97a6-dd1a86f1d28b"))
(pad "8" thru_hole circle (at 4.445 3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 17 "S8") (uuid "9cddec30-5010-4a9e-98ac-3aee52581bb9"))
(pad "9" thru_hole circle (at 4.445 -3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 18 "S9") (uuid "30c995c0-e685-4468-ac69-76f89e09f5cb"))
)
(gr_text "1" (at 116.555 137.700) (layer "F.SilkS") (uuid "861255cc-92e3-4c96-b0db-972a8710ec3d") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "16" (at 116.555 130.300) (layer "F.SilkS") (uuid "0e4ef0cf-a2c7-423b-805f-de6ffcd9f267") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "2" (at 117.825 137.700) (layer "F.SilkS") (uuid "22d4ec78-a50f-4388-96ef-a207c0a58414") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "15" (at 117.825 130.300) (layer "F.SilkS") (uuid "ef78018b-037e-4f76-ba7a-45d5add286b9") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "3" (at 119.095 137.700) (layer "F.SilkS") (uuid "9bbad598-2f86-4b65-bf7e-64302411428b") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "14" (at 119.095 130.300) (layer "F.SilkS") (uuid "e7dbf952-de95-47cc-b419-cf2e47830265") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "4" (at 120.365 137.700) (layer "F.SilkS") (uuid "beb5fdc3-67e1-43fe-89f8-d0530b801154") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "13" (at 120.365 130.300) (layer "F.SilkS") (uuid "f8550647-8a68-4391-8c52-510da97112ee") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "5" (at 121.635 137.700) (layer "F.SilkS") (uuid "cabc9c30-5616-41f8-90ab-8ead0c566664") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "12" (at 121.635 130.300) (layer "F.SilkS") (uuid "96123fc0-6fbd-40d5-937d-8fe24c727f5c") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "6" (at 122.905 137.700) (layer "F.SilkS") (uuid "280e8d2b-d3ab-4379-abad-ffe3fce84cdc") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "11" (at 122.905 130.300) (layer "F.SilkS") (uuid "18759563-886c-4a36-860b-9678bfe74593") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "7" (at 124.175 137.700) (layer "F.SilkS") (uuid "3665623e-544a-46ba-95f8-a6bc45cba4ca") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "10" (at 124.175 130.300) (layer "F.SilkS") (uuid "e6e0fac5-49f7-4ee4-abba-67b11f4b4e95") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "8" (at 125.445 137.700) (layer "F.SilkS") (uuid "a5c0cc95-a0b6-4332-9c29-0c542602f42a") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "9" (at 125.445 130.300) (layer "F.SilkS") (uuid "75f820d9-7ff4-43cf-bdc2-d4e0c478675c") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_circle (center 116.055 137.500) (end 116.255 137.500) (layer "F.SilkS") (width 0.1) (fill solid) (uuid "507b13c4-cf63-48f5-91a3-dd9ad8a64909"))
(gr_text "●1" (at 116.055 138.300) (layer "F.SilkS") (uuid "c0b75fc3-1a01-4266-9de1-e238d54be244") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "SOP-16N ●1→" (at 121.000 134.000) (layer "B.SilkS") (uuid "51a0fff5-be82-46bc-b9c4-dee3cf88dd4d") (effects (font (size 0.5 0.5) (thickness 0.080)) (justify mirror)))
(footprint "panel:SOP-16N_FPC" (layer "F.Cu")
(at 121.000 134.000)
(uuid "ae74481d-2f56-49a1-8f27-a926411ea186")
(fp_text reference "SOP-16N_FPC" (at 0 0) (layer "F.Fab") (uuid "b30597ce-ea92-4731-ab3f-c4a67e4da731")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "0212948b-b15d-4aa6-bf09-fc15310b842b")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "F1" smd rect (at -4.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 10 "S1") (uuid "6848f536-3f15-4874-81cd-ee627c008269"))
(pad "F2" smd rect (at -4.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 11 "S2") (uuid "81fb8224-31be-403d-923e-024cd32561cc"))
(pad "F3" smd rect (at -3.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 12 "S3") (uuid "2796dc95-3f16-4100-b52c-92c4ac906d3f"))
(pad "F4" smd rect (at -3.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 13 "S4") (uuid "3f766e02-4a7e-4428-a83d-2e06642f7ae6"))
(pad "F5" smd rect (at -2.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 14 "S5") (uuid "e9cbd5db-efc1-4b63-a729-797be1dbbfb9"))
(pad "F6" smd rect (at -2.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 15 "S6") (uuid "69816290-ddc2-42b1-9af8-e71fd8ca8c72"))
(pad "F7" smd rect (at -1.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 16 "S7") (uuid "78f01e2e-e0cc-4469-8922-b5dcdcd597f5"))
(pad "F8" smd rect (at -1.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 17 "S8") (uuid "93d8934a-283d-4d71-a8e8-09d43810a953"))
(pad "F9" smd rect (at -0.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 18 "S9") (uuid "ca8a122d-e1a2-495c-a51b-3e97a9af9513"))
(pad "F10" smd rect (at -0.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 19 "S10") (uuid "4d8e31d4-788c-4e42-beb0-e9a37a23f85b"))
(pad "F11" smd rect (at 0.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 20 "S11") (uuid "bd63a3a5-0eeb-433e-8257-b50cd07b5172"))
(pad "F12" smd rect (at 0.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 21 "S12") (uuid "32e6090c-7faa-4808-9aff-079d9ebba9f7"))
(pad "F13" smd rect (at 1.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 22 "S13") (uuid "b4fa6767-5a92-49b6-bc03-e75491fc8c90"))
(pad "F14" smd rect (at 1.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 23 "S14") (uuid "e6df1ce7-ebed-46ca-91ea-96d7da4e1db1"))
(pad "F15" smd rect (at 2.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 24 "S15") (uuid "f12fd116-36fa-4ef7-904b-2a45a879c8ec"))
(pad "F16" smd rect (at 2.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 25 "S16") (uuid "145a463b-34e7-4992-8e32-26ad922eef42"))
(pad "F17" smd rect (at 3.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "7eb4c597-28b9-4cdd-ae44-ec068e750df4"))
(pad "F18" smd rect (at 3.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "a48b4d56-cec4-42ea-8715-4343536f6520"))
(pad "F19" smd rect (at 4.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 1 "GND") (uuid "6f125c32-ae8c-4334-8a38-915d07b4125b"))
(pad "F20" smd rect (at 4.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 2 "VBAT") (uuid "af4c0452-c4b9-49cd-8270-df566bbf77e5"))
(pad "SA" smd rect (at -6.250 1.500) (size 1.200 0.800) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "9de6e6ba-362f-4860-a44e-7e34486d26be"))
(pad "SB" smd rect (at 6.250 1.500) (size 1.200 0.800) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "6414e199-3e57-4f5d-bba4-b5a40acdaefc"))
)
(gr_text "FPC" (at 121.000 132.200) (layer "F.SilkS") (uuid "943d37c1-f507-48e5-8177-c2ebf5f5a780") (effects (font (size 0.35 0.35) (thickness 0.080))))
(gr_circle (center 115.650 134.000) (end 115.800 134.000) (layer "F.SilkS") (width 0.1) (fill solid) (uuid "053a0376-4a1e-4705-b71b-cc4c63126042"))
(gr_line (start 131.055 128.850) (end 142.945 128.850) (layer "Edge.Cuts") (width 0.1) (uuid "3245e263-e9ff-4d71-bdfb-9acc132ce614"))
(gr_line (start 142.945 128.850) (end 142.945 139.150) (layer "Edge.Cuts") (width 0.1) (uuid "11ad8e29-3b20-4828-95cc-13e98813d5e3"))
(gr_line (start 142.945 139.150) (end 131.055 139.150) (layer "Edge.Cuts") (width 0.1) (uuid "f5a4c984-26e9-4937-92b1-ea733f952833"))
(gr_line (start 131.055 139.150) (end 131.055 128.850) (layer "Edge.Cuts") (width 0.1) (uuid "b8de84fe-6c42-4d66-abc7-46eb7ccab318"))
(gr_text "SOP-16W" (at 137.000 134.000) (layer "F.SilkS") (uuid "d4af9f08-ad58-4094-9ae5-5250505e1bf3") (effects (font (size 0.6 0.6) (thickness 0.080))))
(footprint "panel:SOP-16W_cast" (layer "B.Cu")
(at 137.000 134.000)
(uuid "03adeb81-8fd2-4f41-b6ec-9a19c25be013")
(fp_text reference "SOP-16W_cast" (at 0 0) (layer "B.Fab") (uuid "a063439b-bfd8-432a-8bab-34fdb81a51e1")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "B.Fab") (uuid "8c828d50-7aea-4415-9738-1eaed69c83ac")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "1" thru_hole circle (at -4.445 5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 10 "S1") (uuid "e0ed2364-e190-4cf2-8bea-cf8f45e119fc"))
(pad "16" thru_hole circle (at -4.445 -5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 25 "S16") (uuid "001966ad-6dd5-4e9f-b5b9-63347ca7c1b6"))
(pad "2" thru_hole circle (at -3.175 5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 11 "S2") (uuid "821ef136-a9ea-4b5b-89d3-84e095c5f317"))
(pad "15" thru_hole circle (at -3.175 -5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 24 "S15") (uuid "0d2d71f9-2c61-48de-8f03-1db0c5453a99"))
(pad "3" thru_hole circle (at -1.905 5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 12 "S3") (uuid "ef0d1353-6360-46f4-b3f4-f14335357361"))
(pad "14" thru_hole circle (at -1.905 -5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 23 "S14") (uuid "6d2b475a-67d8-4e80-b832-1d98d07e8e74"))
(pad "4" thru_hole circle (at -0.635 5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 13 "S4") (uuid "43030b6e-0a10-436a-a613-e1181199d3f1"))
(pad "13" thru_hole circle (at -0.635 -5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 22 "S13") (uuid "c2477dc6-9cbd-489d-a00b-73158c3c0639"))
(pad "5" thru_hole circle (at 0.635 5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 14 "S5") (uuid "2bcc30fb-ab58-44e5-9a13-afb44638e3c6"))
(pad "12" thru_hole circle (at 0.635 -5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 21 "S12") (uuid "3ea6995b-c3f3-43ba-bd8f-f075b1e471d1"))
(pad "6" thru_hole circle (at 1.905 5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 15 "S6") (uuid "d1f2206e-2195-4a07-9a04-38a4bc7cf3c1"))
(pad "11" thru_hole circle (at 1.905 -5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 20 "S11") (uuid "d17321cf-ade0-45fb-aeee-06e5fdaa68e7"))
(pad "7" thru_hole circle (at 3.175 5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 16 "S7") (uuid "bbe5650f-8272-4951-826c-0219408d73cd"))
(pad "10" thru_hole circle (at 3.175 -5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 19 "S10") (uuid "63cb5f6b-69ec-4b02-a58d-0f747f085670"))
(pad "8" thru_hole circle (at 4.445 5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 17 "S8") (uuid "41ec5aee-f8ba-4088-8232-1c50ad81a9d8"))
(pad "9" thru_hole circle (at 4.445 -5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 18 "S9") (uuid "4cdbd15b-f470-4028-aa99-11f1bc409fce"))
)
(gr_text "1" (at 132.555 139.850) (layer "F.SilkS") (uuid "903925f1-1ab0-4ef8-8091-eee1ba4ce83c") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "16" (at 132.555 128.150) (layer "F.SilkS") (uuid "da86f49d-5143-47ea-b69d-4b9832fead6f") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "2" (at 133.825 139.850) (layer "F.SilkS") (uuid "574499ab-7233-4486-83cb-f54f410f254c") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "15" (at 133.825 128.150) (layer "F.SilkS") (uuid "abab922c-b06d-42a5-a83f-dd0fdee84413") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "3" (at 135.095 139.850) (layer "F.SilkS") (uuid "a7206bb0-3b93-40f7-b721-b0f8e559a08a") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "14" (at 135.095 128.150) (layer "F.SilkS") (uuid "7554af84-eaab-46e6-a23b-61be3208358c") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "4" (at 136.365 139.850) (layer "F.SilkS") (uuid "754ceb56-2739-4ffb-95b6-f74fec1b55fe") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "13" (at 136.365 128.150) (layer "F.SilkS") (uuid "8eba4921-1108-42f3-a832-725064d0b8a9") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "5" (at 137.635 139.850) (layer "F.SilkS") (uuid "39081f0f-c80d-4f8e-93ab-18f7d2073f11") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "12" (at 137.635 128.150) (layer "F.SilkS") (uuid "4fafe525-5c4a-4ad0-a9bd-fa1b7525e18c") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "6" (at 138.905 139.850) (layer "F.SilkS") (uuid "4de276b8-3628-4e51-91a7-ccc54c74f700") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "11" (at 138.905 128.150) (layer "F.SilkS") (uuid "d27ef244-2781-49c2-9afe-ea795a76c9e0") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "7" (at 140.175 139.850) (layer "F.SilkS") (uuid "a5febf7b-e28d-475b-9d51-13676d8adec6") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "10" (at 140.175 128.150) (layer "F.SilkS") (uuid "84b49153-2c4a-4ece-8a04-6b499665a85c") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "8" (at 141.445 139.850) (layer "F.SilkS") (uuid "a2b8a7f3-e99c-4581-86b4-3fd69ba4a35a") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "9" (at 141.445 128.150) (layer "F.SilkS") (uuid "c05f3d6b-67d3-4d21-a81e-3839951a4f75") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_circle (center 132.055 139.650) (end 132.255 139.650) (layer "F.SilkS") (width 0.1) (fill solid) (uuid "c9f11721-a6fa-42bc-befe-e2f4dd6eaf33"))
(gr_text "●1" (at 132.055 140.450) (layer "F.SilkS") (uuid "3b2f91bf-64bb-4074-ab2b-bfe789fec0a6") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "SOP-16W ●1→" (at 137.000 134.000) (layer "B.SilkS") (uuid "8e3f70e7-d940-41f4-8f33-40a7fedc23e1") (effects (font (size 0.5 0.5) (thickness 0.080)) (justify mirror)))
(footprint "panel:SOP-16W_FPC" (layer "F.Cu")
(at 137.000 134.000)
(uuid "5478245e-9ede-494c-86f7-8c704435e999")
(fp_text reference "SOP-16W_FPC" (at 0 0) (layer "F.Fab") (uuid "2a4de4cb-a137-40c1-abd2-23c8d6f4a50e")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "c72e6768-7d5d-4b2e-b8cc-c93c7f06de68")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "F1" smd rect (at -4.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 10 "S1") (uuid "4df4fcc1-91f4-4143-a052-5d489d23ba9e"))
(pad "F2" smd rect (at -4.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 11 "S2") (uuid "99e5aca1-d974-42e7-bd70-3947a4c12696"))
(pad "F3" smd rect (at -3.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 12 "S3") (uuid "f1cbc508-4e8b-4b32-bf5e-720b074714a1"))
(pad "F4" smd rect (at -3.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 13 "S4") (uuid "674c45c4-5c55-40a1-a9d2-6b3ed7341da9"))
(pad "F5" smd rect (at -2.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 14 "S5") (uuid "337b151c-41af-467f-87b2-00234db90bc2"))
(pad "F6" smd rect (at -2.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 15 "S6") (uuid "db978209-cdee-4ef7-af46-de8b822bbe8e"))
(pad "F7" smd rect (at -1.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 16 "S7") (uuid "e1d6460e-2b6d-46b4-b939-75c0977105d2"))
(pad "F8" smd rect (at -1.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 17 "S8") (uuid "577260c3-7e9a-4765-8b88-c508c82ca5fe"))
(pad "F9" smd rect (at -0.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 18 "S9") (uuid "4b3b0582-a33d-4365-888e-d1d87161e6f9"))
(pad "F10" smd rect (at -0.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 19 "S10") (uuid "d76146ee-cf79-4036-88c0-20f702a2d563"))
(pad "F11" smd rect (at 0.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 20 "S11") (uuid "e4e0ff0d-fc4f-4c4e-bbbf-aa1ca1b1c93a"))
(pad "F12" smd rect (at 0.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 21 "S12") (uuid "b0734618-3cdf-45c4-ba08-e3388c711631"))
(pad "F13" smd rect (at 1.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 22 "S13") (uuid "dda517bb-3b46-438f-8d3f-2dfa9a5b3245"))
(pad "F14" smd rect (at 1.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 23 "S14") (uuid "abace38a-0077-4aaf-a85a-6ff5e8583256"))
(pad "F15" smd rect (at 2.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 24 "S15") (uuid "7909ec78-3977-4645-a41f-da0b47002a7e"))
(pad "F16" smd rect (at 2.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 25 "S16") (uuid "c83088b7-ac0b-4663-b84e-feef5eeb0723"))
(pad "F17" smd rect (at 3.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "a7bda6dd-b3b3-47e9-b511-fcb766a1837a"))
(pad "F18" smd rect (at 3.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "89ad3bdd-bdf4-4183-9438-c2e232e12f60"))
(pad "F19" smd rect (at 4.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 1 "GND") (uuid "4d94e0ec-cf5e-4e0d-90c7-67e79b8895fa"))
(pad "F20" smd rect (at 4.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 2 "VBAT") (uuid "bdf4aaea-e105-4332-8cc8-e82574c5981d"))
(pad "SA" smd rect (at -6.250 1.500) (size 1.200 0.800) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "bec1c65a-3746-408f-8e77-1658a529d58f"))
(pad "SB" smd rect (at 6.250 1.500) (size 1.200 0.800) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "68022482-2ede-4193-8fcc-50f4c15238fc"))
)
(gr_text "FPC" (at 137.000 132.200) (layer "F.SilkS") (uuid "3c9ae79a-befd-49b6-89e8-48dfbfb5a408") (effects (font (size 0.35 0.35) (thickness 0.080))))
(gr_circle (center 131.650 134.000) (end 131.800 134.000) (layer "F.SilkS") (width 0.1) (fill solid) (uuid "1554c550-4b83-40cc-8602-7a4138599540"))
(gr_text "Baby Mobile v4 — JLCPCB Panel" (at 124.000 98.000) (layer "F.SilkS") (uuid "02d054e6-07a0-4ad2-a9a2-903bf039b5bc") (effects (font (size 1.0 1.0) (thickness 0.130))))
(gr_text "Castellated Holes=YES V-Score=YES 2-Layer 1.6mm" (at 124.000 143.000) (layer "F.SilkS") (uuid "1a248073-4356-45d5-9f5d-0b7d77830e4a") (effects (font (size 0.5 0.5) (thickness 0.080))))
)
+613
View File
@@ -0,0 +1,613 @@
(kicad_pcb (version 20221018) (generator "bm_v5")
(general (thickness 1.6))
(paper "A4")
(title_block
(title "Baby Mobile v5 — Key-Shaped Panel")
(date "2026-03-11") (rev "5.0")
(comment 1 "Carrier head + breakaway adapter stem")
(comment 2 "Unique nets per sub-board, FPC interconnect")
)
(layers
(0 "F.Cu" signal) (31 "B.Cu" signal)
(34 "B.Paste" user) (35 "F.Paste" user)
(36 "B.SilkS" user "B.Silkscreen") (37 "F.SilkS" user "F.Silkscreen")
(38 "B.Mask" user "B.Mask") (39 "F.Mask" user "F.Mask")
(44 "Edge.Cuts" user)
(48 "B.Fab" user "B.Fab") (49 "F.Fab" user "F.Fab")
)
(net 0 "")
(net 1 "GND")
(net 2 "C_VBAT")
(net 3 "C_3V3")
(net 4 "BOOST_SW")
(net 5 "AUDIO_FILT")
(net 6 "SPI_MOSI")
(net 7 "SPI_MISO")
(net 8 "SPI_SCK")
(net 9 "FLASH_CS")
(net 10 "C_S1")
(net 11 "C_S2")
(net 12 "C_S3")
(net 13 "C_S4")
(net 14 "C_S5")
(net 15 "C_S6")
(net 16 "C_S7")
(net 17 "C_S8")
(net 18 "FPC_C1")
(net 19 "FPC_C2")
(net 20 "FPC_C3")
(net 21 "FPC_C4")
(net 22 "FPC_C5")
(net 23 "FPC_C6")
(net 24 "FPC_C7")
(net 25 "FPC_C8")
(net 26 "FPC_C9")
(net 27 "FPC_C10")
(net 28 "FPC_C11")
(net 29 "FPC_C12")
(net 30 "FPC_C13")
(net 31 "FPC_C14")
(net 32 "FPC_C15")
(net 33 "FPC_C16")
(net 34 "FPC_C17")
(net 35 "FPC_C18")
(net 36 "FPC_C19")
(net 37 "FPC_C20")
(net 38 "A8_P1")
(net 39 "A8_P2")
(net 40 "A8_P3")
(net 41 "A8_P4")
(net 42 "A8_P5")
(net 43 "A8_P6")
(net 44 "A8_P7")
(net 45 "A8_P8")
(net 46 "A8_VBAT")
(net 47 "A8_GND")
(net 48 "FPC_A8_1")
(net 49 "FPC_A8_2")
(net 50 "FPC_A8_3")
(net 51 "FPC_A8_4")
(net 52 "FPC_A8_5")
(net 53 "FPC_A8_6")
(net 54 "FPC_A8_7")
(net 55 "FPC_A8_8")
(net 56 "FPC_A8_9")
(net 57 "FPC_A8_10")
(net 58 "A16N_P1")
(net 59 "A16N_P2")
(net 60 "A16N_P3")
(net 61 "A16N_P4")
(net 62 "A16N_P5")
(net 63 "A16N_P6")
(net 64 "A16N_P7")
(net 65 "A16N_P8")
(net 66 "A16N_P9")
(net 67 "A16N_P10")
(net 68 "A16N_P11")
(net 69 "A16N_P12")
(net 70 "A16N_P13")
(net 71 "A16N_P14")
(net 72 "A16N_P15")
(net 73 "A16N_P16")
(net 74 "A16N_VBAT")
(net 75 "A16N_GND")
(net 76 "FPC_A16N_1")
(net 77 "FPC_A16N_2")
(net 78 "FPC_A16N_3")
(net 79 "FPC_A16N_4")
(net 80 "FPC_A16N_5")
(net 81 "FPC_A16N_6")
(net 82 "FPC_A16N_7")
(net 83 "FPC_A16N_8")
(net 84 "FPC_A16N_9")
(net 85 "FPC_A16N_10")
(net 86 "FPC_A16N_11")
(net 87 "FPC_A16N_12")
(net 88 "FPC_A16N_13")
(net 89 "FPC_A16N_14")
(net 90 "FPC_A16N_15")
(net 91 "FPC_A16N_16")
(net 92 "FPC_A16N_17")
(net 93 "FPC_A16N_18")
(net 94 "FPC_A16N_19")
(net 95 "FPC_A16N_20")
(net 96 "A16W_P1")
(net 97 "A16W_P2")
(net 98 "A16W_P3")
(net 99 "A16W_P4")
(net 100 "A16W_P5")
(net 101 "A16W_P6")
(net 102 "A16W_P7")
(net 103 "A16W_P8")
(net 104 "A16W_P9")
(net 105 "A16W_P10")
(net 106 "A16W_P11")
(net 107 "A16W_P12")
(net 108 "A16W_P13")
(net 109 "A16W_P14")
(net 110 "A16W_P15")
(net 111 "A16W_P16")
(net 112 "A16W_VBAT")
(net 113 "A16W_GND")
(net 114 "FPC_A16W_1")
(net 115 "FPC_A16W_2")
(net 116 "FPC_A16W_3")
(net 117 "FPC_A16W_4")
(net 118 "FPC_A16W_5")
(net 119 "FPC_A16W_6")
(net 120 "FPC_A16W_7")
(net 121 "FPC_A16W_8")
(net 122 "FPC_A16W_9")
(net 123 "FPC_A16W_10")
(net 124 "FPC_A16W_11")
(net 125 "FPC_A16W_12")
(net 126 "FPC_A16W_13")
(net 127 "FPC_A16W_14")
(net 128 "FPC_A16W_15")
(net 129 "FPC_A16W_16")
(net 130 "FPC_A16W_17")
(net 131 "FPC_A16W_18")
(net 132 "FPC_A16W_19")
(net 133 "FPC_A16W_20")
(setup (pad_to_mask_clearance 0.05)
(pcbplotparams (layerselection 0x00010fc_ffffffff) (outputdirectory "gerbers/")))
(gr_line (start 100.000 100.000) (end 126.000 100.000) (layer "Edge.Cuts") (width 0.1) (uuid "4d661e2a-9510-461b-8504-90f994722549"))
(gr_line (start 126.000 100.000) (end 126.000 124.000) (layer "Edge.Cuts") (width 0.1) (uuid "b6a3f7d2-4c68-4ecc-b5c3-5fb65b525c78"))
(gr_line (start 126.000 124.000) (end 120.000 124.000) (layer "Edge.Cuts") (width 0.1) (uuid "b6a457b6-5caf-4e28-9260-481968dead15"))
(gr_line (start 120.000 124.000) (end 120.000 156.000) (layer "Edge.Cuts") (width 0.1) (uuid "97a94f6a-2664-4c31-815d-20f12b369994"))
(gr_line (start 120.000 156.000) (end 106.000 156.000) (layer "Edge.Cuts") (width 0.1) (uuid "ab567175-e60f-4630-94cb-2020237ce09b"))
(gr_line (start 106.000 156.000) (end 106.000 124.000) (layer "Edge.Cuts") (width 0.1) (uuid "861d5736-f347-4632-af8e-69c13686e9a9"))
(gr_line (start 106.000 124.000) (end 100.000 124.000) (layer "Edge.Cuts") (width 0.1) (uuid "7bf4650b-dd82-449c-b095-18d174f5f0c9"))
(gr_line (start 100.000 124.000) (end 100.000 100.000) (layer "Edge.Cuts") (width 0.1) (uuid "8268d642-8255-4d5f-8830-3bd339f1ab0f"))
(gr_line (start 106.000 132.000) (end 120.000 132.000) (layer "Edge.Cuts") (width 0.1) (uuid "eb4f805a-3060-4d03-8d53-57533430963f"))
(gr_line (start 106.000 142.000) (end 120.000 142.000) (layer "Edge.Cuts") (width 0.1) (uuid "40ac3a54-0553-46fe-95c6-e92c688905d0"))
(gr_text "SNAP" (at 113.000 131.700) (layer "F.SilkS") (uuid "29097a4f-cad7-4970-bcd5-60ea382323c3") (effects (font (size 0.4 0.4) (thickness 0.080))))
(gr_text "SNAP" (at 113.000 141.700) (layer "F.SilkS") (uuid "d3f74d74-3e23-4b89-861c-7c2370be3d35") (effects (font (size 0.4 0.4) (thickness 0.080))))
(gr_rect (start 104.250 101.500) (end 121.750 122.500) (layer "F.SilkS") (width 0.2) (uuid "1a2aa14c-38b9-4c8f-a464-794909866483"))
(gr_rect (start 108.550 98.300) (end 117.450 101.500) (layer "F.SilkS") (width 0.2) (uuid "30e02621-4bc8-4fa3-9af9-cc7dc5e650d9"))
(gr_text "USB-C" (at 113.000 99.900) (layer "F.SilkS") (uuid "1a4672f7-33d3-4241-b27e-5dd8780886b4") (effects (font (size 0.45 0.45) (thickness 0.080))))
(gr_text "XIAO nRF52840" (at 113.000 112.000) (layer "F.SilkS") (uuid "e97ffc86-50b8-4c2a-b0a9-1c03b8a08668") (effects (font (size 0.6 0.6) (thickness 0.080))))
(gr_text "RST" (at 106.250 103.000) (layer "F.SilkS") (uuid "ac56f812-ff40-4033-966c-e4616002c6e7") (effects (font (size 0.35 0.35) (thickness 0.080))))
(footprint "bm:XIAO_L" (layer "F.Cu")
(at 105.500 104.500)
(uuid "551872f2-8dee-4593-b20c-796277d6acc3")
(fp_text reference "XIAO_L" (at 0 0) (layer "F.Fab") (uuid "d4e3b7a8-59d4-489e-b2a5-b7af2e7a0181")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "425c0bee-1bc3-4f73-af00-955a63070d8d")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "D0" thru_hole circle (at 0.000 0.000) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 10 "C_S1") (uuid "918edf81-9320-40a2-8c80-1162f8938b60"))
(pad "D0_ext" smd rect (at -1.250 0.000) (size 2.500 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 10 "C_S1") (uuid "b5abb68b-d992-43dc-aae6-a6c2a6041988"))
(pad "D1" thru_hole circle (at 0.000 2.540) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 11 "C_S2") (uuid "adbe6677-5404-4b22-a97e-56d454711771"))
(pad "D1_ext" smd rect (at -1.250 2.540) (size 2.500 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 11 "C_S2") (uuid "8b95bde1-6c3c-457d-942b-b20315d5f12b"))
(pad "D2" thru_hole circle (at 0.000 5.080) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 12 "C_S3") (uuid "830837c9-4cec-4fec-8c7a-40c0921a9302"))
(pad "D2_ext" smd rect (at -1.250 5.080) (size 2.500 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 12 "C_S3") (uuid "68152166-2e60-40b7-9f30-1b2b3510e4c1"))
(pad "D3" thru_hole circle (at 0.000 7.620) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 13 "C_S4") (uuid "5b040d51-18e4-4320-86b2-d62b01f7c105"))
(pad "D3_ext" smd rect (at -1.250 7.620) (size 2.500 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 13 "C_S4") (uuid "b872c662-716f-432b-92d1-94a9d695840a"))
(pad "D4" thru_hole circle (at 0.000 10.160) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 14 "C_S5") (uuid "1d2d094b-ab58-4680-8685-4cbd7b1539c4"))
(pad "D4_ext" smd rect (at -1.250 10.160) (size 2.500 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 14 "C_S5") (uuid "2cdcd78d-6f40-4047-ae48-ee3564db08bc"))
(pad "D5" thru_hole circle (at 0.000 12.700) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 15 "C_S6") (uuid "f61758f6-d402-4fb9-a76a-792e5fed462b"))
(pad "D5_ext" smd rect (at -1.250 12.700) (size 2.500 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 15 "C_S6") (uuid "aeb44519-ae51-4ce4-a73b-7c5783a67dec"))
(pad "D6" thru_hole circle (at 0.000 15.240) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 16 "C_S7") (uuid "c7cb01a5-81e1-437e-ad79-41aed8d55205"))
(pad "D6_ext" smd rect (at -1.250 15.240) (size 2.500 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 16 "C_S7") (uuid "252d7758-687f-494a-95fc-cc02a6544d68"))
)
(footprint "bm:XIAO_R" (layer "F.Cu")
(at 120.500 104.500)
(uuid "48745a48-98b4-446d-928b-3547bebd99b0")
(fp_text reference "XIAO_R" (at 0 0) (layer "F.Fab") (uuid "5f82ce7e-f368-4b7d-9232-6a42aa4fae6c")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "6b3766e6-3e2e-46dd-9263-050f9a0ac1d4")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "D10" thru_hole circle (at 0.000 0.000) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 17 "C_S8") (uuid "9884cfc9-6630-4e17-8dfe-e2743ffa95f9"))
(pad "D10_ext" smd rect (at 1.250 0.000) (size 2.500 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 17 "C_S8") (uuid "dd4472ce-fd07-420c-9a44-7e33174ff0e2"))
(pad "D9" thru_hole circle (at 0.000 2.540) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 8 "SPI_SCK") (uuid "504940f5-d577-414c-9402-efe99bcc3e43"))
(pad "D9_ext" smd rect (at 1.250 2.540) (size 2.500 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 8 "SPI_SCK") (uuid "f6e7c4c7-d66f-485e-8f4e-2add177d3adc"))
(pad "D8" thru_hole circle (at 0.000 5.080) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 6 "SPI_MOSI") (uuid "0f933d38-d98e-49f5-9cf2-45905eccf505"))
(pad "D8_ext" smd rect (at 1.250 5.080) (size 2.500 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 6 "SPI_MOSI") (uuid "f8eb2db1-b401-4928-8d83-022515471300"))
(pad "D7" thru_hole circle (at 0.000 7.620) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 7 "SPI_MISO") (uuid "6bdb1169-3776-471a-8cf9-53f54ca9433f"))
(pad "D7_ext" smd rect (at 1.250 7.620) (size 2.500 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 7 "SPI_MISO") (uuid "012ecb11-f33a-4192-a79c-70ec3a396a82"))
(pad "3V3" thru_hole circle (at 0.000 10.160) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 3 "C_3V3") (uuid "fe87aace-c849-4ae1-b48d-64531c6dfd7f"))
(pad "3V3_ext" smd rect (at 1.250 10.160) (size 2.500 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 3 "C_3V3") (uuid "b8ff930b-9f56-4ebb-bab9-7c817ddc2aae"))
(pad "GND" thru_hole circle (at 0.000 12.700) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (net 1 "GND") (uuid "fe3fa3ca-cb25-4889-8c23-f6cc62e5cc08"))
(pad "GND_ext" smd rect (at 1.250 12.700) (size 2.500 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 1 "GND") (uuid "5d35ae55-9acb-4df2-a543-9ffca955e6dc"))
(pad "5V" thru_hole circle (at 0 15.24) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (uuid "ebf46029-718e-458a-b79a-461d5e89048c"))
)
(gr_text "D0" (at 102.000 104.500) (layer "F.SilkS") (uuid "32840411-5531-46aa-b855-369ec2fb817a") (effects (font (size 0.4 0.4) (thickness 0.080))))
(gr_text "D1" (at 102.000 107.040) (layer "F.SilkS") (uuid "3af3164e-58c2-4eb2-ad6f-2c0133d5f1a9") (effects (font (size 0.4 0.4) (thickness 0.080))))
(gr_text "D2" (at 102.000 109.580) (layer "F.SilkS") (uuid "b0a86e22-6d61-484d-82b6-6985655e1c8e") (effects (font (size 0.4 0.4) (thickness 0.080))))
(gr_text "D3" (at 102.000 112.120) (layer "F.SilkS") (uuid "1955aebd-63eb-445a-9446-e9ee23c4f4c3") (effects (font (size 0.4 0.4) (thickness 0.080))))
(gr_text "D4" (at 102.000 114.660) (layer "F.SilkS") (uuid "a56b6f68-6279-4db2-b2d4-618c473c62cf") (effects (font (size 0.4 0.4) (thickness 0.080))))
(gr_text "D5" (at 102.000 117.200) (layer "F.SilkS") (uuid "1d69a2ff-05b2-45d0-ad8e-74cf0e7b2c88") (effects (font (size 0.4 0.4) (thickness 0.080))))
(gr_text "D6" (at 102.000 119.740) (layer "F.SilkS") (uuid "e8ce1a22-3b04-4268-b870-35cdf0071709") (effects (font (size 0.4 0.4) (thickness 0.080))))
(gr_text "D10" (at 124.000 104.500) (layer "F.SilkS") (uuid "5dd2e93f-29f8-49ae-b782-c8f4ebeb8409") (effects (font (size 0.4 0.4) (thickness 0.080))))
(gr_text "D9" (at 124.000 107.040) (layer "F.SilkS") (uuid "fbf4b0cc-da36-4f2a-823a-ff748bde9879") (effects (font (size 0.4 0.4) (thickness 0.080))))
(gr_text "D8" (at 124.000 109.580) (layer "F.SilkS") (uuid "f522affe-54c9-4822-be3a-9d09ec9cc2f1") (effects (font (size 0.4 0.4) (thickness 0.080))))
(gr_text "D7" (at 124.000 112.120) (layer "F.SilkS") (uuid "ed12d2f1-bd26-4a95-bb7f-5f959454496d") (effects (font (size 0.4 0.4) (thickness 0.080))))
(gr_text "3V3" (at 124.000 114.660) (layer "F.SilkS") (uuid "0d9e54b8-8284-4aa3-9a7f-234e34e88b2c") (effects (font (size 0.4 0.4) (thickness 0.080))))
(gr_text "GND" (at 124.000 117.200) (layer "F.SilkS") (uuid "0d64d025-59ae-495c-b81f-6a90b555bb7f") (effects (font (size 0.4 0.4) (thickness 0.080))))
(gr_text "5V" (at 124.000 119.740) (layer "F.SilkS") (uuid "eb994112-6f2c-4b69-ae6c-34ddfde25340") (effects (font (size 0.4 0.4) (thickness 0.080))))
(gr_rect (start 102.500 115.800) (end 107.500 122.200) (layer "F.SilkS") (width 0.15) (uuid "10d999fa-4170-4bf2-92be-a273d40b305c"))
(gr_circle (center 103.500 121.200) (end 103.750 121.200) (layer "F.SilkS") (width 0.1) (fill solid) (uuid "69d44fa8-5763-45db-9560-34f02d96768f"))
(gr_text "U2 IS25LP128F" (at 105.000 114.800) (layer "F.SilkS") (uuid "f0541a99-65e1-40e4-9786-7bf5c1979f41") (effects (font (size 0.4 0.4) (thickness 0.080))))
(gr_text "●1" (at 102.800 122.700) (layer "F.SilkS") (uuid "28074b02-eeb5-473a-b50e-d877459f1fa6") (effects (font (size 0.3 0.3) (thickness 0.080))))
(footprint "bm:U2" (layer "F.Cu")
(at 105.000 119.000)
(uuid "eeb1632e-2ac0-4e48-a25a-e35bf5f37d33")
(fp_text reference "U2" (at 0 0) (layer "F.Fab") (uuid "07c27233-41e0-4d3b-93bc-f72e1dc3d305")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "af27cccd-38ad-414e-80f9-becbac42ba8c")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "1" smd rect (at -1.905 2.700) (size 0.600 1.500) (layers "F.Cu" "F.Paste" "F.Mask") (net 9 "FLASH_CS") (uuid "1060637d-2a1d-4260-a2c0-7327fa7f61de"))
(pad "2" smd rect (at -0.635 2.700) (size 0.600 1.500) (layers "F.Cu" "F.Paste" "F.Mask") (net 7 "SPI_MISO") (uuid "af041413-3536-421e-b344-0cf51bc5a571"))
(pad "3" smd rect (at 0.635 2.700) (size 0.600 1.500) (layers "F.Cu" "F.Paste" "F.Mask") (net 3 "C_3V3") (uuid "b02d8372-ca42-4f34-8d49-06cb4cb33eaa"))
(pad "4" smd rect (at 1.905 2.700) (size 0.600 1.500) (layers "F.Cu" "F.Paste" "F.Mask") (net 1 "GND") (uuid "37f119e9-2622-4c33-84f6-1ad336275972"))
(pad "5" smd rect (at 1.905 -2.700) (size 0.600 1.500) (layers "F.Cu" "F.Paste" "F.Mask") (net 6 "SPI_MOSI") (uuid "d17703a1-9598-4d2a-a9a6-592441596c96"))
(pad "6" smd rect (at 0.635 -2.700) (size 0.600 1.500) (layers "F.Cu" "F.Paste" "F.Mask") (net 8 "SPI_SCK") (uuid "801e09b1-3f0e-4866-be65-4828e597a290"))
(pad "7" smd rect (at -0.635 -2.700) (size 0.600 1.500) (layers "F.Cu" "F.Paste" "F.Mask") (net 3 "C_3V3") (uuid "6af62354-b745-418b-8513-fcdfe33aa2a3"))
(pad "8" smd rect (at -1.905 -2.700) (size 0.600 1.500) (layers "F.Cu" "F.Paste" "F.Mask") (net 3 "C_3V3") (uuid "b742fc85-14c0-4eb5-a6ed-8626f356de09"))
)
(footprint "bm:C3" (layer "F.Cu")
(at 110.000 119.000)
(uuid "9b293f49-5a52-40ce-af16-244875946894")
(fp_text reference "C3" (at 0 0) (layer "F.Fab") (uuid "dd0c8bc1-3b82-4aeb-9fa9-a494bbbf97ac")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "baa9b95a-213a-45d8-bf04-9cbaa791f112")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "1" smd rect (at -1.000 0.000) (size 1.000 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 3 "C_3V3") (uuid "797480c0-aa23-4971-8a2a-cc928660a4b0"))
(pad "2" smd rect (at 1.000 0.000) (size 1.000 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 1 "GND") (uuid "695b48dc-266a-419f-a2a8-1feaacd59418"))
)
(gr_text "C3 100n" (at 110.000 117.700) (layer "F.SilkS") (uuid "87e48e56-c232-4d1b-a01e-83cf57198333") (effects (font (size 0.35 0.35) (thickness 0.080))))
(footprint "bm:R2" (layer "F.Cu")
(at 110.000 122.000)
(uuid "4355a1ff-f0a8-46b4-ace3-bccc63526dd5")
(fp_text reference "R2" (at 0 0) (layer "F.Fab") (uuid "573ed4b3-4522-4817-892c-11587476b3b8")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "6a3118f2-1889-4c78-b859-23ec10d891e7")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "1" smd rect (at -1.000 0.000) (size 1.000 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 9 "FLASH_CS") (uuid "26e31f7e-04da-4ff0-8577-0ac0bdc857af"))
(pad "2" smd rect (at 1.000 0.000) (size 1.000 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 3 "C_3V3") (uuid "c42fbb6b-b503-44b0-8def-32b15cfc39ea"))
)
(gr_text "R2 10K" (at 110.000 120.700) (layer "F.SilkS") (uuid "3cfca72b-83df-4604-bc1f-3225f16d2ae5") (effects (font (size 0.35 0.35) (thickness 0.080))))
(gr_rect (start 118.800 117.900) (end 121.200 120.100) (layer "F.SilkS") (width 0.15) (uuid "8ea3a519-c668-4818-ac97-20afa75a0c79"))
(gr_circle (center 119.200 119.600) (end 119.400 119.600) (layer "F.SilkS") (width 0.1) (fill solid) (uuid "cd3db26d-c76d-4082-9cc9-53dbccf03d3f"))
(gr_text "U1 TPS61220" (at 120.000 116.800) (layer "F.SilkS") (uuid "74c5fd46-c16c-476f-b9b1-bac3f1ae775f") (effects (font (size 0.4 0.4) (thickness 0.080))))
(gr_text "●1" (at 118.500 119.700) (layer "F.SilkS") (uuid "2ef30410-9c11-4bcf-ad51-ad8faf2af57f") (effects (font (size 0.3 0.3) (thickness 0.080))))
(footprint "bm:U1" (layer "F.Cu")
(at 120.000 119.000)
(uuid "963e5e6a-77e4-4261-bc4d-6fdf227c4e74")
(fp_text reference "U1" (at 0 0) (layer "F.Fab") (uuid "01c75bb7-e8d1-4a05-9f1a-d4bc78cc7448")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "cc97d349-623c-4dd6-881c-0bb329eb15bf")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "1" smd rect (at -0.650 0.700) (size 0.400 0.550) (layers "F.Cu" "F.Paste" "F.Mask") (net 2 "C_VBAT") (uuid "b847ff69-f2d8-4845-af95-426026b18651"))
(pad "2" smd rect (at 0.000 0.700) (size 0.400 0.550) (layers "F.Cu" "F.Paste" "F.Mask") (net 1 "GND") (uuid "f5d62e8d-6029-4e6b-8198-65aa3d557d56"))
(pad "3" smd rect (at 0.650 0.700) (size 0.400 0.550) (layers "F.Cu" "F.Paste" "F.Mask") (net 2 "C_VBAT") (uuid "93872455-4311-41eb-8bb4-302c36aa1cad"))
(pad "4" smd rect (at 0.650 -0.700) (size 0.400 0.550) (layers "F.Cu" "F.Paste" "F.Mask") (net 3 "C_3V3") (uuid "46a00625-0f41-4859-b296-196745df0731"))
(pad "5" smd rect (at -0.650 -0.700) (size 0.400 0.550) (layers "F.Cu" "F.Paste" "F.Mask") (net 4 "BOOST_SW") (uuid "e826909c-27e5-48f2-99d2-e6cd239ce52c"))
)
(footprint "bm:L1" (layer "F.Cu")
(at 116.000 119.000)
(uuid "9e997d7b-3b52-43ed-8e35-843c44c9640b")
(fp_text reference "L1" (at 0 0) (layer "F.Fab") (uuid "365afaa5-a21e-4478-9e03-7eb7c8eed3f1")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "4eabc636-a16e-41fe-ae22-7fa02edf5ddc")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "1" smd rect (at -1.000 0.000) (size 1.000 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 4 "BOOST_SW") (uuid "de0ac487-cfaf-4c5e-9b67-e67e20b5805a"))
(pad "2" smd rect (at 1.000 0.000) (size 1.000 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 2 "C_VBAT") (uuid "6a6147a4-f349-49c2-aa26-c4b8a0041e8a"))
)
(gr_text "L1 4.7u" (at 116.000 117.700) (layer "F.SilkS") (uuid "93b415e5-72b2-4784-9815-1b5383211b03") (effects (font (size 0.35 0.35) (thickness 0.080))))
(footprint "bm:C1" (layer "F.Cu")
(at 116.000 122.000)
(uuid "f951f085-fb58-4af4-9490-1de9ec829dc9")
(fp_text reference "C1" (at 0 0) (layer "F.Fab") (uuid "17efd631-28b3-42dd-bea8-6da44e4ca8d3")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "a5fed5c4-97f6-4741-a5b5-e3f977105fb8")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "1" smd rect (at -1.000 0.000) (size 1.000 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 2 "C_VBAT") (uuid "7e775c67-3e73-4fb0-881e-7faca3548a9d"))
(pad "2" smd rect (at 1.000 0.000) (size 1.000 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 1 "GND") (uuid "5153977d-22e2-4fd6-9d7a-98fb9715029e"))
)
(gr_text "C1 10u" (at 116.000 120.700) (layer "F.SilkS") (uuid "1bda24a2-6c5f-4e6c-b63e-a059efcb621e") (effects (font (size 0.35 0.35) (thickness 0.080))))
(footprint "bm:C2" (layer "F.Cu")
(at 124.000 119.000)
(uuid "f62440e5-8ac8-44fd-a72d-54dd79cf50ff")
(fp_text reference "C2" (at 0 0) (layer "F.Fab") (uuid "a5753694-0481-4f82-93a1-12ffd92358fd")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "eef336bb-fdf3-4ea6-9b8b-b0688cb19204")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "1" smd rect (at -1.000 0.000) (size 1.000 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 3 "C_3V3") (uuid "2e8e52d9-2ff5-45e7-acb9-1cbae39b1fe0"))
(pad "2" smd rect (at 1.000 0.000) (size 1.000 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 1 "GND") (uuid "7b97937e-098f-4e0c-bfaa-a78431554ff2"))
)
(gr_text "C2 10u" (at 124.000 117.700) (layer "F.SilkS") (uuid "b26186c7-59ae-4f5b-aa70-9d513b44b2b4") (effects (font (size 0.35 0.35) (thickness 0.080))))
(footprint "bm:R1" (layer "F.Cu")
(at 120.000 113.000)
(uuid "f748ae6e-8d82-4eaa-ba68-287792efa120")
(fp_text reference "R1" (at 0 0) (layer "F.Fab") (uuid "58de0583-ac80-4644-af63-1b12bf3c7258")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "dcf55329-41d6-4736-bf46-36a963515885")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "1" smd rect (at -1.000 0.000) (size 1.000 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 17 "C_S8") (uuid "56d7dc2e-e471-46e2-968c-7b9d694bbffd"))
(pad "2" smd rect (at 1.000 0.000) (size 1.000 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 5 "AUDIO_FILT") (uuid "ad705d20-d3bd-4574-9cb8-efd98c2a2eb0"))
)
(gr_text "R1 4.7K" (at 120.000 111.700) (layer "F.SilkS") (uuid "bdb0dee7-31f7-4c5f-abe8-c0d9feb0d876") (effects (font (size 0.35 0.35) (thickness 0.080))))
(footprint "bm:C5" (layer "F.Cu")
(at 124.000 113.000)
(uuid "b403dab6-1e19-4417-af03-6b360aa7a953")
(fp_text reference "C5" (at 0 0) (layer "F.Fab") (uuid "972fde16-b367-46be-9bb7-3a7842b72e82")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "cdf733f2-27b4-4d70-aaa3-8c09fc8ee6d4")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "1" smd rect (at -1.000 0.000) (size 1.000 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 5 "AUDIO_FILT") (uuid "31ab9bc2-3957-441e-b932-e67756c66c63"))
(pad "2" smd rect (at 1.000 0.000) (size 1.000 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 1 "GND") (uuid "28d00756-6c12-4008-aa33-53dd7538247f"))
)
(gr_text "C5 10n" (at 124.000 111.700) (layer "F.SilkS") (uuid "ea19d5e4-361c-460c-abf1-88ff5700a5b1") (effects (font (size 0.35 0.35) (thickness 0.080))))
(gr_rect (start 107.000 121.000) (end 119.000 124.000) (layer "F.SilkS") (width 0.15) (uuid "762b0b26-d437-4f12-9598-6301434bc78b"))
(gr_text "J1 FPC-20 0.5mm" (at 113.000 120.000) (layer "F.SilkS") (uuid "2cd50abf-b341-4837-9d06-af14500fdd77") (effects (font (size 0.4 0.4) (thickness 0.080))))
(gr_circle (center 107.650 122.500) (end 107.800 122.500) (layer "F.SilkS") (width 0.1) (fill solid) (uuid "20794221-f961-4388-bc97-24e5bbbafbc8"))
(footprint "bm:J1_FPC" (layer "F.Cu")
(at 113.000 122.500)
(uuid "19cfa1f2-b5a5-4dec-aeff-dc17b4121836")
(fp_text reference "J1_FPC" (at 0 0) (layer "F.Fab") (uuid "25c3db5a-d287-4cdd-a0ad-375c2ca30dec")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "75044527-bcc7-4d9a-b7c7-e818e59317e5")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "1" smd rect (at -4.750 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 18 "FPC_C1") (uuid "d6f099ae-e2dd-4f66-99c5-5a226d56d698"))
(pad "2" smd rect (at -4.250 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 19 "FPC_C2") (uuid "c079224d-4ebe-4666-84a1-ffafcb73753c"))
(pad "3" smd rect (at -3.750 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 20 "FPC_C3") (uuid "a7d762a0-da09-4df3-ae4e-828051267370"))
(pad "4" smd rect (at -3.250 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 21 "FPC_C4") (uuid "b2837c57-574f-4a40-8527-6df58cb5814f"))
(pad "5" smd rect (at -2.750 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 22 "FPC_C5") (uuid "ca76ba7a-f453-4964-935b-c1bf21a053f3"))
(pad "6" smd rect (at -2.250 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 23 "FPC_C6") (uuid "d299f650-8ff9-4735-987e-c47602414db8"))
(pad "7" smd rect (at -1.750 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 24 "FPC_C7") (uuid "abae1514-1d63-47d6-a0bf-9ecc5897caff"))
(pad "8" smd rect (at -1.250 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 25 "FPC_C8") (uuid "0a32016b-0d7a-4b22-a87b-e42bd9c5e48a"))
(pad "9" smd rect (at -0.750 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 26 "FPC_C9") (uuid "863f3a30-7703-404e-a6a3-694e20aee0de"))
(pad "10" smd rect (at -0.250 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 27 "FPC_C10") (uuid "7dc10a2e-998d-4336-a4be-5d116735c546"))
(pad "11" smd rect (at 0.250 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 28 "FPC_C11") (uuid "c79a607d-9fa8-4029-b023-c9cc1466c6f9"))
(pad "12" smd rect (at 0.750 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 29 "FPC_C12") (uuid "d6441313-24c7-4166-bc40-0535a364572e"))
(pad "13" smd rect (at 1.250 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 30 "FPC_C13") (uuid "4153bf5c-86f4-4ac9-91a7-5c12d4da90a6"))
(pad "14" smd rect (at 1.750 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 31 "FPC_C14") (uuid "e7ee20e5-9313-4127-8d71-1c0805d90317"))
(pad "15" smd rect (at 2.250 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 32 "FPC_C15") (uuid "5c0255c2-4682-4d60-ba54-979c5af4bd70"))
(pad "16" smd rect (at 2.750 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 33 "FPC_C16") (uuid "921c3377-a2e0-4283-9b85-d71c484d2a97"))
(pad "17" smd rect (at 3.250 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 34 "FPC_C17") (uuid "644ad356-d452-4c72-9ff0-d29b2ebd7b8b"))
(pad "18" smd rect (at 3.750 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 35 "FPC_C18") (uuid "de54aa31-4919-4127-aced-82a2ef2e6ba4"))
(pad "19" smd rect (at 4.250 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 36 "FPC_C19") (uuid "544a9ab2-16ef-482a-b0ae-c929694bde49"))
(pad "20" smd rect (at 4.750 0.000) (size 0.300 1.200) (layers "F.Cu" "F.Paste" "F.Mask") (net 37 "FPC_C20") (uuid "431399d8-2791-47a1-8ccc-28d9cd01e59a"))
(pad "SA" smd rect (at -6.000 2.000) (size 1.500 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "12572b12-1e3d-4948-8a24-ff791b87a85e"))
(pad "SB" smd rect (at 6.000 2.000) (size 1.500 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "5cf56352-7c4d-47e3-8e18-616a42f2ae33"))
)
(footprint "bm:MH" (layer "F.Cu")
(at 102.000 102.000)
(uuid "03674a7f-9385-4e6d-b579-89b3abede418")
(fp_text reference "MH" (at 0 0) (layer "F.Fab") (uuid "7ccb9564-7ccb-4bb4-907f-da577d241da0")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "7f905ce4-a12f-40be-8a0f-a9c0d34c6951")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "" thru_hole circle (at 0 0) (size 3.5 3.5) (drill 2.2) (layers "*.Cu" "*.Mask") (uuid "cdcd6619-eeec-4d9e-a703-744dcec3891b"))
)
(footprint "bm:MH" (layer "F.Cu")
(at 124.000 102.000)
(uuid "b7d0cbca-5472-4c07-978d-e2d8a3374b61")
(fp_text reference "MH" (at 0 0) (layer "F.Fab") (uuid "a5fa6328-87e3-4d8e-92ca-1475519e8e68")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "b63d96b0-0401-47b5-9b65-f424af0adc20")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "" thru_hole circle (at 0 0) (size 3.5 3.5) (drill 2.2) (layers "*.Cu" "*.Mask") (uuid "21143b98-956d-43df-93a6-78ab7e85e327"))
)
(gr_text "A8" (at 113.000 128.000) (layer "F.SilkS") (uuid "49856665-93c8-40f9-9d99-95466e0feb46") (effects (font (size 0.5 0.5) (thickness 0.080))))
(footprint "bm:A8_cast" (layer "B.Cu")
(at 113.000 128.000)
(uuid "f0ca5498-dbeb-4510-882d-4b5e3fc3d1fa")
(fp_text reference "A8_cast" (at 0 0) (layer "B.Fab") (uuid "0136d0c3-208f-4a60-ba0c-0a35abfc604d")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "B.Fab") (uuid "624eb998-da3b-4a8b-983a-6f078f0df88f")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "1" thru_hole circle (at -1.905 1.950) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 38 "A8_P1") (uuid "e9d6835b-09b0-46c7-8883-c4f1490b6740"))
(pad "8" thru_hole circle (at -1.905 -1.950) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 45 "A8_P8") (uuid "721b32b4-617b-4414-8b14-9102a6702567"))
(pad "2" thru_hole circle (at -0.635 1.950) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 39 "A8_P2") (uuid "2b8168d8-6d36-4e36-aa5e-9b1a4c0b3f7a"))
(pad "7" thru_hole circle (at -0.635 -1.950) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 44 "A8_P7") (uuid "2139692c-8fe6-4d67-a7e7-58342c1d4e63"))
(pad "3" thru_hole circle (at 0.635 1.950) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 40 "A8_P3") (uuid "bf22b362-8835-43c1-bc54-152c9344a7df"))
(pad "6" thru_hole circle (at 0.635 -1.950) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 43 "A8_P6") (uuid "250d1c37-8f91-4848-89f6-5746f95f2073"))
(pad "4" thru_hole circle (at 1.905 1.950) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 41 "A8_P4") (uuid "dacd7ba7-5f1e-4724-a8bf-1ff874057031"))
(pad "5" thru_hole circle (at 1.905 -1.950) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 42 "A8_P5") (uuid "981a185a-fb98-4a16-a2a6-28e49b7d76a7"))
)
(gr_text "1" (at 111.095 130.650) (layer "F.SilkS") (uuid "dc34c3c5-5e44-4e26-82f6-55617e409842") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "8" (at 111.095 125.350) (layer "F.SilkS") (uuid "df026f8a-218b-4736-83df-267d0c5ee6b4") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "2" (at 112.365 130.650) (layer "F.SilkS") (uuid "ba669a8f-826c-4464-9b80-d5fd7cbcb42b") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "7" (at 112.365 125.350) (layer "F.SilkS") (uuid "9793916e-0574-4553-855b-2d17217cbc3c") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "3" (at 113.635 130.650) (layer "F.SilkS") (uuid "54ea836e-7879-4401-8026-cbd7bbb6ca1c") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "6" (at 113.635 125.350) (layer "F.SilkS") (uuid "aba90156-ebf5-4180-bca6-91a80cda0e9a") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "4" (at 114.905 130.650) (layer "F.SilkS") (uuid "b4b1a7b2-bc3d-478a-9002-e63e39252ed8") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "5" (at 114.905 125.350) (layer "F.SilkS") (uuid "89c61b92-7dfa-44d5-a926-1ca74340b650") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_circle (center 110.595 130.450) (end 110.795 130.450) (layer "F.SilkS") (width 0.1) (fill solid) (uuid "bd77be42-ad11-4122-9801-2b68492b0db9"))
(footprint "bm:A8_FPC" (layer "F.Cu")
(at 113.000 128.000)
(uuid "37de2937-ce4e-4fdc-a417-6a75971a1878")
(fp_text reference "A8_FPC" (at 0 0) (layer "F.Fab") (uuid "99c485b0-3162-4950-ac25-0f0796a60d77")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "3e0370fe-27d0-4661-a444-1056a2057729")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "F1" smd rect (at -2.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 48 "FPC_A8_1") (uuid "b4da56b2-6f3c-4491-b2fc-793c8d3a8aca"))
(pad "F2" smd rect (at -1.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 49 "FPC_A8_2") (uuid "8ccc7c9b-9b1b-48d1-8498-d40cf445bd47"))
(pad "F3" smd rect (at -1.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 50 "FPC_A8_3") (uuid "2eefc767-126a-4294-8b74-c5da07fe9a94"))
(pad "F4" smd rect (at -0.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 51 "FPC_A8_4") (uuid "3bab7c10-243c-47d4-a45a-c4c5304204b9"))
(pad "F5" smd rect (at -0.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 52 "FPC_A8_5") (uuid "4efbd9e9-1181-4aa7-9990-de9e7bc1c250"))
(pad "F6" smd rect (at 0.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 53 "FPC_A8_6") (uuid "7e980de6-4e5f-4607-a1d6-116a3cb37811"))
(pad "F7" smd rect (at 0.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 54 "FPC_A8_7") (uuid "dfe83fea-3d82-4a84-957b-d93488130672"))
(pad "F8" smd rect (at 1.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 55 "FPC_A8_8") (uuid "beeef48f-b21e-4f14-9b7b-0cb8188a9f3a"))
(pad "F9" smd rect (at 1.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 47 "A8_GND") (uuid "5634eb19-8f54-4d05-bb2e-7f6ad3ecf758"))
(pad "F10" smd rect (at 2.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 46 "A8_VBAT") (uuid "832739d4-c871-4995-94d9-28cd55438af6"))
(pad "SA" smd rect (at -3.500 1.500) (size 1.200 0.800) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "c5ab104c-a883-4ef9-bc4a-303ec3a016d3"))
(pad "SB" smd rect (at 3.500 1.500) (size 1.200 0.800) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "0197ef78-fd59-49bc-b9a0-24cf1c6cb1d6"))
)
(gr_text "FPC" (at 113.000 126.500) (layer "F.SilkS") (uuid "90530fa1-e7e9-4b9e-8f21-0fa2424a1f58") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_circle (center 110.250 128.000) (end 110.400 128.000) (layer "F.SilkS") (width 0.1) (fill solid) (uuid "89d7a751-4e18-4501-94cf-ae12bad5ce55"))
(gr_text "A16N" (at 113.000 137.000) (layer "F.SilkS") (uuid "aeedd7fd-a80e-43fc-b285-2ec3f9f02b9c") (effects (font (size 0.5 0.5) (thickness 0.080))))
(footprint "bm:A16N_cast" (layer "B.Cu")
(at 113.000 137.000)
(uuid "6dfb49d1-2ba9-4ae8-8a94-4add8ec3b82c")
(fp_text reference "A16N_cast" (at 0 0) (layer "B.Fab") (uuid "5e3e1b16-6dff-4fee-b4d0-12e962d61078")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "B.Fab") (uuid "fd80f108-e2cd-4a18-bb89-dcb5a47440ac")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "1" thru_hole circle (at -4.445 3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 58 "A16N_P1") (uuid "4b97ab18-8d2e-446a-bf3c-571f9c9d5a54"))
(pad "16" thru_hole circle (at -4.445 -3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 73 "A16N_P16") (uuid "6cfe58a9-a16f-4ae5-9cbc-1a23e69613ba"))
(pad "2" thru_hole circle (at -3.175 3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 59 "A16N_P2") (uuid "82a27c68-c209-4a69-acdc-0f6793646324"))
(pad "15" thru_hole circle (at -3.175 -3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 72 "A16N_P15") (uuid "31c08b65-c6d0-4890-854a-7ada51d87a25"))
(pad "3" thru_hole circle (at -1.905 3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 60 "A16N_P3") (uuid "46d10b18-459b-4b0f-a1d8-3f2f31cbde51"))
(pad "14" thru_hole circle (at -1.905 -3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 71 "A16N_P14") (uuid "ebad1736-4178-467f-b2bf-eb9e26bb8b6b"))
(pad "4" thru_hole circle (at -0.635 3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 61 "A16N_P4") (uuid "da95db98-5927-4550-b1d7-00ac317953d7"))
(pad "13" thru_hole circle (at -0.635 -3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 70 "A16N_P13") (uuid "d0f06a80-3212-4170-bc6c-af1c2d43f191"))
(pad "5" thru_hole circle (at 0.635 3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 62 "A16N_P5") (uuid "c04f46cc-0523-44b5-8e68-520d4483af19"))
(pad "12" thru_hole circle (at 0.635 -3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 69 "A16N_P12") (uuid "7a39b886-895e-4237-9563-27a9d8b86abb"))
(pad "6" thru_hole circle (at 1.905 3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 63 "A16N_P6") (uuid "f50c7366-d4d4-4579-af55-359f42236019"))
(pad "11" thru_hole circle (at 1.905 -3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 68 "A16N_P11") (uuid "0e14f554-a439-4dfd-80f9-1f5745df4f77"))
(pad "7" thru_hole circle (at 3.175 3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 64 "A16N_P7") (uuid "b9fc1901-39fc-4d39-a465-44ae9cf3d4c2"))
(pad "10" thru_hole circle (at 3.175 -3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 67 "A16N_P10") (uuid "446282fc-86dc-4b54-abfa-c13a3d9f74ee"))
(pad "8" thru_hole circle (at 4.445 3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 65 "A16N_P8") (uuid "ad8f95e8-893a-4dde-98fb-f3ca7ebc9e19"))
(pad "9" thru_hole circle (at 4.445 -3.000) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 66 "A16N_P9") (uuid "0f7a0530-9369-48d6-9e0b-3fd7230ad59f"))
)
(gr_text "1" (at 108.555 140.700) (layer "F.SilkS") (uuid "fa5aaf65-ab8b-4175-8cb0-50f57436e6b8") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "16" (at 108.555 133.300) (layer "F.SilkS") (uuid "4b896783-f68b-4f76-a6b1-de42db1d5ab3") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "2" (at 109.825 140.700) (layer "F.SilkS") (uuid "bf75c4b5-2b34-4b0f-868e-da1b41bfcb84") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "15" (at 109.825 133.300) (layer "F.SilkS") (uuid "16bc56f1-ab1c-48d2-8d05-5ff3ccc65769") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "3" (at 111.095 140.700) (layer "F.SilkS") (uuid "c917d263-3bf6-4844-a386-3165bac6925a") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "14" (at 111.095 133.300) (layer "F.SilkS") (uuid "06534565-e708-4e18-8bf7-2b86046e8528") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "4" (at 112.365 140.700) (layer "F.SilkS") (uuid "0a70e4be-d096-4693-a80e-c0fb1276d31c") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "13" (at 112.365 133.300) (layer "F.SilkS") (uuid "855f7112-e90d-4781-8b7d-afcd944e2a62") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "5" (at 113.635 140.700) (layer "F.SilkS") (uuid "b172e232-ad56-4b07-bd08-9f17231a65c1") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "12" (at 113.635 133.300) (layer "F.SilkS") (uuid "949fa22b-0496-4c8e-bfed-3ee3ac36e7ea") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "6" (at 114.905 140.700) (layer "F.SilkS") (uuid "485e93da-637b-4b8a-850e-7fb203186f39") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "11" (at 114.905 133.300) (layer "F.SilkS") (uuid "f7f71eee-1a22-46e8-a7f7-a336d2295684") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "7" (at 116.175 140.700) (layer "F.SilkS") (uuid "88454b69-2e7e-4807-8f15-5f2ba0cbaf04") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "10" (at 116.175 133.300) (layer "F.SilkS") (uuid "0c754e09-4df9-43a4-8b5f-1aacaf0777ce") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "8" (at 117.445 140.700) (layer "F.SilkS") (uuid "b117770c-9b8b-4e70-b8cc-e8f62c0a47a7") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "9" (at 117.445 133.300) (layer "F.SilkS") (uuid "27a94798-4c0f-4226-95fe-fb1dbdc21ee0") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_circle (center 108.055 140.500) (end 108.255 140.500) (layer "F.SilkS") (width 0.1) (fill solid) (uuid "4c1a3c18-2ee9-42e0-8bc6-737b451f80e4"))
(footprint "bm:A16N_FPC" (layer "F.Cu")
(at 113.000 137.000)
(uuid "8e9f970b-ca12-4814-ad94-1fd0b5a3852c")
(fp_text reference "A16N_FPC" (at 0 0) (layer "F.Fab") (uuid "ed8014e7-860d-47f7-a14c-5f05245686db")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "5a373ac3-80f4-4023-bfcd-67b4453453d7")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "F1" smd rect (at -4.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 76 "FPC_A16N_1") (uuid "0bc555f5-780c-4d00-a342-239ec5acaa4f"))
(pad "F2" smd rect (at -4.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 77 "FPC_A16N_2") (uuid "ae2171e2-e78e-4b74-b8f7-e389872c5f70"))
(pad "F3" smd rect (at -3.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 78 "FPC_A16N_3") (uuid "97bb0e99-e4c1-4c13-8bbd-e279e66e3d3f"))
(pad "F4" smd rect (at -3.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 79 "FPC_A16N_4") (uuid "4138072b-5dc9-4396-b6b2-f8031062ab3f"))
(pad "F5" smd rect (at -2.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 80 "FPC_A16N_5") (uuid "765ea27f-4c43-4e49-8902-e4a8981f8172"))
(pad "F6" smd rect (at -2.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 81 "FPC_A16N_6") (uuid "aad7d33c-f605-4e52-85e6-b9bd2f8e88e2"))
(pad "F7" smd rect (at -1.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 82 "FPC_A16N_7") (uuid "56a6a615-377e-4529-a51c-b92d8ee264ee"))
(pad "F8" smd rect (at -1.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 83 "FPC_A16N_8") (uuid "fd3d0b79-cd64-419b-a05b-b3d27c3cf6da"))
(pad "F9" smd rect (at -0.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 84 "FPC_A16N_9") (uuid "755fcea3-e219-4688-941f-171845a52b32"))
(pad "F10" smd rect (at -0.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 85 "FPC_A16N_10") (uuid "a6ef5721-49c6-457e-a0c8-49f92b8a9699"))
(pad "F11" smd rect (at 0.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 86 "FPC_A16N_11") (uuid "18de422e-5f1e-4878-990a-a055b5d360a7"))
(pad "F12" smd rect (at 0.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 87 "FPC_A16N_12") (uuid "e24dee78-6ecc-4140-8c37-6642840d4806"))
(pad "F13" smd rect (at 1.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 88 "FPC_A16N_13") (uuid "ee9acadb-1a2d-4dd2-ae58-9952e554dcf3"))
(pad "F14" smd rect (at 1.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 89 "FPC_A16N_14") (uuid "a14aee8b-2691-460d-9639-ccf960ad5dbb"))
(pad "F15" smd rect (at 2.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 90 "FPC_A16N_15") (uuid "34695dc7-80e4-4428-9cad-36a0a0da67de"))
(pad "F16" smd rect (at 2.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 91 "FPC_A16N_16") (uuid "c4366022-dca4-4836-83f7-6ba9c55b5cf1"))
(pad "F17" smd rect (at 3.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 92 "FPC_A16N_17") (uuid "fd493c98-97e0-4d0d-9546-031173746b50"))
(pad "F18" smd rect (at 3.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 93 "FPC_A16N_18") (uuid "295f88d6-b156-4a1a-aaa6-3049b4b73928"))
(pad "F19" smd rect (at 4.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 75 "A16N_GND") (uuid "9e117ab1-b77a-477e-ab40-4c7c9658e888"))
(pad "F20" smd rect (at 4.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 74 "A16N_VBAT") (uuid "727cf874-f5b0-4154-b0cb-3a0b7f302a59"))
(pad "SA" smd rect (at -6.000 1.500) (size 1.200 0.800) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "572afd92-9a36-437f-a337-ab448e7154f8"))
(pad "SB" smd rect (at 6.000 1.500) (size 1.200 0.800) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "8039bca5-e25c-4b19-b08e-4cb089df2e7d"))
)
(gr_text "FPC" (at 113.000 135.500) (layer "F.SilkS") (uuid "1bf5f1b5-c314-4b7a-99ac-80311b9a0cf3") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_circle (center 107.750 137.000) (end 107.900 137.000) (layer "F.SilkS") (width 0.1) (fill solid) (uuid "b3528300-d618-4c81-af50-380273cd1cbf"))
(gr_text "A16W" (at 113.000 149.000) (layer "F.SilkS") (uuid "f0d667bc-8cc2-4a5d-a744-03dd2e88cd29") (effects (font (size 0.5 0.5) (thickness 0.080))))
(footprint "bm:A16W_cast" (layer "B.Cu")
(at 113.000 149.000)
(uuid "99503dc6-2bf5-4029-bad1-3f483c6719a4")
(fp_text reference "A16W_cast" (at 0 0) (layer "B.Fab") (uuid "ce0f3024-68c9-4479-abd9-f0f7b073d89c")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "B.Fab") (uuid "f0163b26-b21d-4eb9-b8db-78ea3b94b299")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "1" thru_hole circle (at -4.445 5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 96 "A16W_P1") (uuid "056b8409-e52c-42f2-8079-69f7c8187cb5"))
(pad "16" thru_hole circle (at -4.445 -5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 111 "A16W_P16") (uuid "b35c4a4a-4815-4caf-b70b-50ce83c281a6"))
(pad "2" thru_hole circle (at -3.175 5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 97 "A16W_P2") (uuid "f8595b8a-933e-4402-801f-6c206995bb4a"))
(pad "15" thru_hole circle (at -3.175 -5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 110 "A16W_P15") (uuid "2d6caaab-a2ce-4395-af75-0e8edfcf71e8"))
(pad "3" thru_hole circle (at -1.905 5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 98 "A16W_P3") (uuid "d19a4f5a-90a8-4900-86a5-48c68e78de74"))
(pad "14" thru_hole circle (at -1.905 -5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 109 "A16W_P14") (uuid "e6728212-0b5e-4472-b3ff-18993837b3e5"))
(pad "4" thru_hole circle (at -0.635 5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 99 "A16W_P4") (uuid "47b1649d-bcd5-49fe-96dd-5b1565f293c7"))
(pad "13" thru_hole circle (at -0.635 -5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 108 "A16W_P13") (uuid "140b4446-32e4-498f-8550-432ac506f87f"))
(pad "5" thru_hole circle (at 0.635 5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 100 "A16W_P5") (uuid "829e8f71-f092-481a-a55d-a1e4cb2a41b7"))
(pad "12" thru_hole circle (at 0.635 -5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 107 "A16W_P12") (uuid "12713997-0538-4ada-bcee-4ffb1a1f6688"))
(pad "6" thru_hole circle (at 1.905 5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 101 "A16W_P6") (uuid "bf05bc8b-3e1b-4a9a-8bbb-1ecc754ff9be"))
(pad "11" thru_hole circle (at 1.905 -5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 106 "A16W_P11") (uuid "46989dc2-6771-45e5-9be3-8f02029dfcce"))
(pad "7" thru_hole circle (at 3.175 5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 102 "A16W_P7") (uuid "3cc92b16-b684-45d5-b738-30b95f9ef4e6"))
(pad "10" thru_hole circle (at 3.175 -5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 105 "A16W_P10") (uuid "de956d6a-3889-4cdb-ad69-21715d25fd12"))
(pad "8" thru_hole circle (at 4.445 5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 103 "A16W_P8") (uuid "b5999f7b-2242-4637-bad8-377e9ce670eb"))
(pad "9" thru_hole circle (at 4.445 -5.150) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net 104 "A16W_P9") (uuid "8d42d6ab-3480-4e71-a135-06bd90a0c23b"))
)
(gr_text "1" (at 108.555 154.850) (layer "F.SilkS") (uuid "e876a39a-7360-4980-b87b-cc4235359c3b") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "16" (at 108.555 143.150) (layer "F.SilkS") (uuid "05cd49c5-94fa-45bf-a72e-3fcfca902992") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "2" (at 109.825 154.850) (layer "F.SilkS") (uuid "8506690f-7712-486e-a1ae-8636ef231b5f") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "15" (at 109.825 143.150) (layer "F.SilkS") (uuid "18fd3746-13ff-40ce-8a01-1ad805ed5db9") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "3" (at 111.095 154.850) (layer "F.SilkS") (uuid "14b384c9-df5f-4412-bcc1-74adab757a06") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "14" (at 111.095 143.150) (layer "F.SilkS") (uuid "fceecbc6-0e35-4311-be15-c39f931e6357") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "4" (at 112.365 154.850) (layer "F.SilkS") (uuid "c1df4942-a775-478c-96c5-252df73b33df") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "13" (at 112.365 143.150) (layer "F.SilkS") (uuid "7d83a0f2-f1de-49ae-82c4-d6bf21de42d4") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "5" (at 113.635 154.850) (layer "F.SilkS") (uuid "b619d081-a89c-4b99-87e2-22dfaad3ba77") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "12" (at 113.635 143.150) (layer "F.SilkS") (uuid "91950814-a1ae-444a-981a-802854e8738a") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "6" (at 114.905 154.850) (layer "F.SilkS") (uuid "b801344b-47bd-4230-9a5b-62b24672eb98") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "11" (at 114.905 143.150) (layer "F.SilkS") (uuid "7f3df10e-8c09-4c24-80c4-3b7f2b0efeec") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "7" (at 116.175 154.850) (layer "F.SilkS") (uuid "f87dd1be-e7ea-4e75-93bb-15d98a54b03b") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "10" (at 116.175 143.150) (layer "F.SilkS") (uuid "e6586e20-8a6e-4335-903a-4d3b0b9ac173") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "8" (at 117.445 154.850) (layer "F.SilkS") (uuid "ff0d5117-bb33-4b3d-896c-24567b7176a9") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_text "9" (at 117.445 143.150) (layer "F.SilkS") (uuid "b197a1a5-c0ff-42d2-b422-6f7ea5db60bf") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_circle (center 108.055 154.650) (end 108.255 154.650) (layer "F.SilkS") (width 0.1) (fill solid) (uuid "ac9e7c36-489e-44f0-acca-52f10b01f048"))
(footprint "bm:A16W_FPC" (layer "F.Cu")
(at 113.000 149.000)
(uuid "970aabd5-4f8b-4986-a3b2-e62f3bb4a11d")
(fp_text reference "A16W_FPC" (at 0 0) (layer "F.Fab") (uuid "65882fcf-a241-4793-a510-e6a4f14298a5")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "F.Fab") (uuid "5768ec21-8078-4053-a96e-a7bc20b3e5d1")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(pad "F1" smd rect (at -4.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 114 "FPC_A16W_1") (uuid "d1ad76b1-4ba6-4f5d-b0f4-c39eff22367b"))
(pad "F2" smd rect (at -4.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 115 "FPC_A16W_2") (uuid "98a3c7d8-ef20-4a50-bd90-553a5807bc56"))
(pad "F3" smd rect (at -3.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 116 "FPC_A16W_3") (uuid "8c48c459-4d7c-49a6-8688-f9783f514fe5"))
(pad "F4" smd rect (at -3.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 117 "FPC_A16W_4") (uuid "98b83623-57b1-4272-95bc-7f00a15e2143"))
(pad "F5" smd rect (at -2.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 118 "FPC_A16W_5") (uuid "92577cba-a544-4943-8116-14d4f340d6c6"))
(pad "F6" smd rect (at -2.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 119 "FPC_A16W_6") (uuid "271dba86-2272-4ee1-b0cc-92fd3d4d5414"))
(pad "F7" smd rect (at -1.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 120 "FPC_A16W_7") (uuid "6e43b6b9-1bc3-4421-ade1-5c159f8175be"))
(pad "F8" smd rect (at -1.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 121 "FPC_A16W_8") (uuid "818400d5-3c4a-4908-ba40-95a6e561d3b9"))
(pad "F9" smd rect (at -0.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 122 "FPC_A16W_9") (uuid "f0631815-1616-4abe-9aa4-0c84e97e0a06"))
(pad "F10" smd rect (at -0.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 123 "FPC_A16W_10") (uuid "8a5bee5e-eba2-4485-88dc-dcfd206dbff3"))
(pad "F11" smd rect (at 0.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 124 "FPC_A16W_11") (uuid "3cff834e-a417-449c-8945-e8004f330477"))
(pad "F12" smd rect (at 0.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 125 "FPC_A16W_12") (uuid "cb6174d8-5058-4c4d-a30d-71385c782c1c"))
(pad "F13" smd rect (at 1.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 126 "FPC_A16W_13") (uuid "360b448b-93a8-4b26-a64a-4979b29df940"))
(pad "F14" smd rect (at 1.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 127 "FPC_A16W_14") (uuid "a026958f-077b-4917-9b94-47cd3ae98eb1"))
(pad "F15" smd rect (at 2.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 128 "FPC_A16W_15") (uuid "5c6b855a-f326-43c2-aebb-f5deaca0f1ea"))
(pad "F16" smd rect (at 2.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 129 "FPC_A16W_16") (uuid "deb34697-4345-4bb7-9a2f-7ee70445d057"))
(pad "F17" smd rect (at 3.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 130 "FPC_A16W_17") (uuid "c4d33771-2f82-4ad4-8937-d15ef5915856"))
(pad "F18" smd rect (at 3.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 131 "FPC_A16W_18") (uuid "4c767cfd-09de-4c67-884f-c8f962105d68"))
(pad "F19" smd rect (at 4.250 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 113 "A16W_GND") (uuid "db2338f4-bf36-48fa-bd02-7d9acdf7a57d"))
(pad "F20" smd rect (at 4.750 0.000) (size 0.300 1.000) (layers "F.Cu" "F.Paste" "F.Mask") (net 112 "A16W_VBAT") (uuid "2040e8b6-bb10-4a57-a802-a616edebe6a9"))
(pad "SA" smd rect (at -6.000 1.500) (size 1.200 0.800) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "9718e42f-cd94-4536-bb3b-22c35a22d355"))
(pad "SB" smd rect (at 6.000 1.500) (size 1.200 0.800) (layers "F.Cu" "F.Paste" "F.Mask") (net 0 "") (uuid "9455a897-bfdf-41be-b617-20561d9e6079"))
)
(gr_text "FPC" (at 113.000 147.500) (layer "F.SilkS") (uuid "4f14f339-bb71-4185-b05a-ff9db5cc6780") (effects (font (size 0.3 0.3) (thickness 0.080))))
(gr_circle (center 107.750 149.000) (end 107.900 149.000) (layer "F.SilkS") (width 0.1) (fill solid) (uuid "c91f59ef-7ee2-43b6-abcf-161d422ea4c3"))
(gr_text "Baby Mobile v5 — github.com/you/baby-mobile" (at 113.000 112.000) (layer "B.SilkS") (uuid "ab2d28e7-e371-4dce-8027-69df7d50f77c") (effects (font (size 0.4 0.4) (thickness 0.080))))
)
@@ -1,12 +1,13 @@
{
"meta": {
"filename": "baby-mobile-panel.kicad_pro",
"filename": "baby-mobile-v5.kicad_pro",
"version": 1
},
"board": {
"design_settings": {
"rules": {
"min_track_width": 0.15
"min_track_width": 0.15,
"min_via_diameter": 0.4
}
}
},
@@ -16,6 +17,11 @@
"name": "Default",
"clearance": 0.15,
"track_width": 0.25
},
{
"name": "Power",
"clearance": 0.2,
"track_width": 0.5
}
]
}
+318
View File
@@ -0,0 +1,318 @@
(kicad_sch (version 20230121) (generator "bm_v5_sch")
(uuid "3033f063-d051-4b2e-89f5-f1cfe4577b32")
(paper "A3")
(title_block
(title "Baby Mobile v5 — Schematic")
(date "2026-03-11") (rev "5.0")
(comment 1 "XIAO nRF52840 + IS25LP128F + TPS61220")
(comment 2 "Key-shaped panel with breakaway SOP adapters")
)
(lib_symbols
(symbol "bm:R" (in_bom yes) (on_board yes)
(property "Reference" "R" (at 2 0 0) (effects (font (size 1.27 1.27))))
(property "Value" "R" (at 2 -2 0) (effects (font (size 1.27 1.27))))
(property "Footprint" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
(property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
(symbol "R_0_1"
(rectangle (start -1 2.5) (end 1 -2.5) (stroke (width 0.254) (type default)) (fill (type background)))
)
(symbol "R_1_1"
(pin passive line (at 0 5 270) (length 2.5) (name "1" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
(pin passive line (at 0 -5 90) (length 2.5) (name "2" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
)
)
(symbol "bm:C" (in_bom yes) (on_board yes)
(property "Reference" "C" (at 2 0 0) (effects (font (size 1.27 1.27))))
(property "Value" "C" (at 2 -2 0) (effects (font (size 1.27 1.27))))
(property "Footprint" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
(property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
(symbol "C_0_1"
(rectangle (start -1 2.5) (end 1 -2.5) (stroke (width 0.254) (type default)) (fill (type background)))
)
(symbol "C_1_1"
(pin passive line (at 0 5 270) (length 2.5) (name "1" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
(pin passive line (at 0 -5 90) (length 2.5) (name "2" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
)
)
(symbol "bm:L" (in_bom yes) (on_board yes)
(property "Reference" "L" (at 2 0 0) (effects (font (size 1.27 1.27))))
(property "Value" "L" (at 2 -2 0) (effects (font (size 1.27 1.27))))
(property "Footprint" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
(property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
(symbol "L_0_1"
(rectangle (start -1 2.5) (end 1 -2.5) (stroke (width 0.254) (type default)) (fill (type background)))
)
(symbol "L_1_1"
(pin passive line (at 0 5 270) (length 2.5) (name "1" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
(pin passive line (at 0 -5 90) (length 2.5) (name "2" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
)
)
(symbol "bm:TPS61220" (in_bom yes) (on_board yes)
(property "Reference" "U" (at 0 6 0) (effects (font (size 1.27 1.27))))
(property "Value" "TPS61220" (at 0 -6 0) (effects (font (size 1.27 1.27))))
(property "Footprint" "Package_TO_SOT_SMD:SOT-353_SC-70-5" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
(property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
(symbol "TPS61220_0_1"
(rectangle (start -7 5) (end 7 -5) (stroke (width 0.254) (type default)) (fill (type background)))
)
(symbol "TPS61220_1_1"
(pin power_in line (at -10 3 0) (length 3) (name "VIN" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
(pin power_in line (at -10 -3 0) (length 3) (name "GND" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
(pin input line (at 10 -3 180) (length 3) (name "EN" (effects (font (size 1 1)))) (number "3" (effects (font (size 1 1)))))
(pin power_out line (at 10 3 180) (length 3) (name "VOUT" (effects (font (size 1 1)))) (number "4" (effects (font (size 1 1)))))
(pin passive line (at 0 8 270) (length 3) (name "L" (effects (font (size 1 1)))) (number "5" (effects (font (size 1 1)))))
)
)
(symbol "bm:IS25LP128F" (in_bom yes) (on_board yes)
(property "Reference" "U" (at 0 9 0) (effects (font (size 1.27 1.27))))
(property "Value" "IS25LP128F" (at 0 7 0) (effects (font (size 1.27 1.27))))
(property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
(property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
(symbol "IS25LP128F_0_1"
(rectangle (start -7 6) (end 7 -6) (stroke (width 0.254) (type default)) (fill (type background)))
)
(symbol "IS25LP128F_1_1"
(pin input line (at -10 4 0) (length 3) (name "~{CS}" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
(pin output line (at -10 1.5 0) (length 3) (name "SO" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
(pin input line (at -10 -1.5 0) (length 3) (name "~{WP}" (effects (font (size 1 1)))) (number "3" (effects (font (size 1 1)))))
(pin power_in line (at -10 -4 0) (length 3) (name "GND" (effects (font (size 1 1)))) (number "4" (effects (font (size 1 1)))))
(pin input line (at 10 -4 180) (length 3) (name "SI" (effects (font (size 1 1)))) (number "5" (effects (font (size 1 1)))))
(pin input line (at 10 -1.5 180) (length 3) (name "SCLK" (effects (font (size 1 1)))) (number "6" (effects (font (size 1 1)))))
(pin input line (at 10 1.5 180) (length 3) (name "~{HOLD}" (effects (font (size 1 1)))) (number "7" (effects (font (size 1 1)))))
(pin power_in line (at 10 4 180) (length 3) (name "VCC" (effects (font (size 1 1)))) (number "8" (effects (font (size 1 1)))))
)
)
(symbol "bm:FPC_10" (in_bom yes) (on_board yes)
(property "Reference" "J" (at 0 12 0) (effects (font (size 1.27 1.27))))
(property "Value" "FPC-10" (at 0 -12 0) (effects (font (size 1.27 1.27))))
(property "Footprint" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
(property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
(symbol "FPC_10_0_1"
(rectangle (start -3 10) (end 3 -10) (stroke (width 0.254) (type default)) (fill (type background)))
)
(symbol "FPC_10_1_1"
(pin passive line (at -6 9 0) (length 3) (name "P1" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
(pin passive line (at -6 7 0) (length 3) (name "P2" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
(pin passive line (at -6 5 0) (length 3) (name "P3" (effects (font (size 1 1)))) (number "3" (effects (font (size 1 1)))))
(pin passive line (at -6 3 0) (length 3) (name "P4" (effects (font (size 1 1)))) (number "4" (effects (font (size 1 1)))))
(pin passive line (at -6 1 0) (length 3) (name "P5" (effects (font (size 1 1)))) (number "5" (effects (font (size 1 1)))))
(pin passive line (at -6 -1 0) (length 3) (name "P6" (effects (font (size 1 1)))) (number "6" (effects (font (size 1 1)))))
(pin passive line (at -6 -3 0) (length 3) (name "P7" (effects (font (size 1 1)))) (number "7" (effects (font (size 1 1)))))
(pin passive line (at -6 -5 0) (length 3) (name "P8" (effects (font (size 1 1)))) (number "8" (effects (font (size 1 1)))))
(pin passive line (at -6 -7 0) (length 3) (name "P9" (effects (font (size 1 1)))) (number "9" (effects (font (size 1 1)))))
(pin passive line (at -6 -9 0) (length 3) (name "P10" (effects (font (size 1 1)))) (number "10" (effects (font (size 1 1)))))
)
)
(symbol "bm:FPC_20" (in_bom yes) (on_board yes)
(property "Reference" "J" (at 0 22 0) (effects (font (size 1.27 1.27))))
(property "Value" "FPC-20" (at 0 -22 0) (effects (font (size 1.27 1.27))))
(property "Footprint" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
(property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
(symbol "FPC_20_0_1"
(rectangle (start -3 20) (end 3 -20) (stroke (width 0.254) (type default)) (fill (type background)))
)
(symbol "FPC_20_1_1"
(pin passive line (at -6 19 0) (length 3) (name "P1" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
(pin passive line (at -6 17 0) (length 3) (name "P2" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
(pin passive line (at -6 15 0) (length 3) (name "P3" (effects (font (size 1 1)))) (number "3" (effects (font (size 1 1)))))
(pin passive line (at -6 13 0) (length 3) (name "P4" (effects (font (size 1 1)))) (number "4" (effects (font (size 1 1)))))
(pin passive line (at -6 11 0) (length 3) (name "P5" (effects (font (size 1 1)))) (number "5" (effects (font (size 1 1)))))
(pin passive line (at -6 9 0) (length 3) (name "P6" (effects (font (size 1 1)))) (number "6" (effects (font (size 1 1)))))
(pin passive line (at -6 7 0) (length 3) (name "P7" (effects (font (size 1 1)))) (number "7" (effects (font (size 1 1)))))
(pin passive line (at -6 5 0) (length 3) (name "P8" (effects (font (size 1 1)))) (number "8" (effects (font (size 1 1)))))
(pin passive line (at -6 3 0) (length 3) (name "P9" (effects (font (size 1 1)))) (number "9" (effects (font (size 1 1)))))
(pin passive line (at -6 1 0) (length 3) (name "P10" (effects (font (size 1 1)))) (number "10" (effects (font (size 1 1)))))
(pin passive line (at -6 -1 0) (length 3) (name "P11" (effects (font (size 1 1)))) (number "11" (effects (font (size 1 1)))))
(pin passive line (at -6 -3 0) (length 3) (name "P12" (effects (font (size 1 1)))) (number "12" (effects (font (size 1 1)))))
(pin passive line (at -6 -5 0) (length 3) (name "P13" (effects (font (size 1 1)))) (number "13" (effects (font (size 1 1)))))
(pin passive line (at -6 -7 0) (length 3) (name "P14" (effects (font (size 1 1)))) (number "14" (effects (font (size 1 1)))))
(pin passive line (at -6 -9 0) (length 3) (name "P15" (effects (font (size 1 1)))) (number "15" (effects (font (size 1 1)))))
(pin passive line (at -6 -11 0) (length 3) (name "P16" (effects (font (size 1 1)))) (number "16" (effects (font (size 1 1)))))
(pin passive line (at -6 -13 0) (length 3) (name "P17" (effects (font (size 1 1)))) (number "17" (effects (font (size 1 1)))))
(pin passive line (at -6 -15 0) (length 3) (name "P18" (effects (font (size 1 1)))) (number "18" (effects (font (size 1 1)))))
(pin passive line (at -6 -17 0) (length 3) (name "P19" (effects (font (size 1 1)))) (number "19" (effects (font (size 1 1)))))
(pin passive line (at -6 -19 0) (length 3) (name "P20" (effects (font (size 1 1)))) (number "20" (effects (font (size 1 1)))))
)
)
(symbol "bm:XIAO_nRF52840" (in_bom yes) (on_board yes)
(property "Reference" "U" (at 0 22 0) (effects (font (size 1.27 1.27))))
(property "Value" "XIAO_nRF52840" (at 0 20 0) (effects (font (size 1.27 1.27))))
(property "Footprint" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
(property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
(symbol "XIAO_nRF52840_0_1"
(rectangle (start -12 19) (end 12 -19) (stroke (width 0.254) (type default)) (fill (type background)))
)
(symbol "XIAO_nRF52840_1_1"
(pin bidirectional line (at -15 15 0) (length 3) (name "D0" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
(pin bidirectional line (at -15 12.5 0) (length 3) (name "D1" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
(pin bidirectional line (at -15 10 0) (length 3) (name "D2" (effects (font (size 1 1)))) (number "3" (effects (font (size 1 1)))))
(pin bidirectional line (at -15 7.5 0) (length 3) (name "D3" (effects (font (size 1 1)))) (number "4" (effects (font (size 1 1)))))
(pin bidirectional line (at -15 5 0) (length 3) (name "D4" (effects (font (size 1 1)))) (number "5" (effects (font (size 1 1)))))
(pin bidirectional line (at -15 2.5 0) (length 3) (name "D5" (effects (font (size 1 1)))) (number "6" (effects (font (size 1 1)))))
(pin bidirectional line (at -15 0 0) (length 3) (name "D6" (effects (font (size 1 1)))) (number "7" (effects (font (size 1 1)))))
(pin bidirectional line (at 15 15 180) (length 3) (name "D10" (effects (font (size 1 1)))) (number "8" (effects (font (size 1 1)))))
(pin bidirectional line (at 15 12.5 180) (length 3) (name "D9/SCK" (effects (font (size 1 1)))) (number "9" (effects (font (size 1 1)))))
(pin bidirectional line (at 15 10 180) (length 3) (name "D8/MOSI" (effects (font (size 1 1)))) (number "10" (effects (font (size 1 1)))))
(pin bidirectional line (at 15 7.5 180) (length 3) (name "D7/MISO" (effects (font (size 1 1)))) (number "11" (effects (font (size 1 1)))))
(pin power_in line (at 15 2.5 180) (length 3) (name "3V3" (effects (font (size 1 1)))) (number "12" (effects (font (size 1 1)))))
(pin power_in line (at 15 0 180) (length 3) (name "GND" (effects (font (size 1 1)))) (number "13" (effects (font (size 1 1)))))
(pin power_in line (at 15 -2.5 180) (length 3) (name "5V" (effects (font (size 1 1)))) (number "14" (effects (font (size 1 1)))))
)
)
)
(symbol (lib_id "bm:XIAO_nRF52840") (at 80 80 0) (unit 1)
(in_bom yes) (on_board yes) (dnp no)
(uuid "fe1b6661-12b7-4ecc-bcbc-62703a98c889")
(property "Reference" "U3" (at 83 77 0) (effects (font (size 1.27 1.27))))
(property "Value" "XIAO_nRF52840" (at 83 83 0) (effects (font (size 1.27 1.27))))
(property "Footprint" "" (at 80 80 0) (effects (font (size 1.27 1.27)) hide))
(property "Datasheet" "" (at 80 80 0) (effects (font (size 1.27 1.27)) hide))
)
(symbol (lib_id "bm:IS25LP128F") (at 180 60 0) (unit 1)
(in_bom yes) (on_board yes) (dnp no)
(uuid "99510a8f-20f8-4a1d-bd80-67345835871d")
(property "Reference" "U2" (at 183 57 0) (effects (font (size 1.27 1.27))))
(property "Value" "IS25LP128F" (at 183 63 0) (effects (font (size 1.27 1.27))))
(property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" (at 180 60 0) (effects (font (size 1.27 1.27)) hide))
(property "Datasheet" "" (at 180 60 0) (effects (font (size 1.27 1.27)) hide))
)
(symbol (lib_id "bm:TPS61220") (at 180 130 0) (unit 1)
(in_bom yes) (on_board yes) (dnp no)
(uuid "e47a68ed-6db7-48d9-bbe9-e2cda9f6e485")
(property "Reference" "U1" (at 183 127 0) (effects (font (size 1.27 1.27))))
(property "Value" "TPS61220" (at 183 133 0) (effects (font (size 1.27 1.27))))
(property "Footprint" "Package_TO_SOT_SMD:SOT-353_SC-70-5" (at 180 130 0) (effects (font (size 1.27 1.27)) hide))
(property "Datasheet" "" (at 180 130 0) (effects (font (size 1.27 1.27)) hide))
)
(symbol (lib_id "bm:FPC_20") (at 80 160 0) (unit 1)
(in_bom yes) (on_board yes) (dnp no)
(uuid "9426180e-9cc5-457d-9538-1387435d67fd")
(property "Reference" "J1" (at 83 157 0) (effects (font (size 1.27 1.27))))
(property "Value" "FPC-20 Carrier" (at 83 163 0) (effects (font (size 1.27 1.27))))
(property "Footprint" "" (at 80 160 0) (effects (font (size 1.27 1.27)) hide))
(property "Datasheet" "" (at 80 160 0) (effects (font (size 1.27 1.27)) hide))
)
(symbol (lib_id "bm:R") (at 140 80 0) (unit 1)
(in_bom yes) (on_board yes) (dnp no)
(uuid "a658da19-5644-4160-b300-be8c7c773405")
(property "Reference" "R1" (at 143 77 0) (effects (font (size 1.27 1.27))))
(property "Value" "4.7K" (at 143 83 0) (effects (font (size 1.27 1.27))))
(property "Footprint" "Resistor_SMD:R_0805_2012Metric" (at 140 80 0) (effects (font (size 1.27 1.27)) hide))
(property "Datasheet" "" (at 140 80 0) (effects (font (size 1.27 1.27)) hide))
)
(symbol (lib_id "bm:C") (at 150 90 0) (unit 1)
(in_bom yes) (on_board yes) (dnp no)
(uuid "16705866-bee7-4f26-a10e-6f7bfbff4c09")
(property "Reference" "C5" (at 153 87 0) (effects (font (size 1.27 1.27))))
(property "Value" "10nF" (at 153 93 0) (effects (font (size 1.27 1.27))))
(property "Footprint" "Capacitor_SMD:C_0805_2012Metric" (at 150 90 0) (effects (font (size 1.27 1.27)) hide))
(property "Datasheet" "" (at 150 90 0) (effects (font (size 1.27 1.27)) hide))
)
(symbol (lib_id "bm:R") (at 210 50 0) (unit 1)
(in_bom yes) (on_board yes) (dnp no)
(uuid "696b8ca8-97f4-4851-97cc-70c56c8f54f5")
(property "Reference" "R2" (at 213 47 0) (effects (font (size 1.27 1.27))))
(property "Value" "10K" (at 213 53 0) (effects (font (size 1.27 1.27))))
(property "Footprint" "Resistor_SMD:R_0805_2012Metric" (at 210 50 0) (effects (font (size 1.27 1.27)) hide))
(property "Datasheet" "" (at 210 50 0) (effects (font (size 1.27 1.27)) hide))
)
(symbol (lib_id "bm:C") (at 210 70 0) (unit 1)
(in_bom yes) (on_board yes) (dnp no)
(uuid "4ea7caff-53f9-4c00-bf01-2c0cfc1ebd9c")
(property "Reference" "C3" (at 213 67 0) (effects (font (size 1.27 1.27))))
(property "Value" "100nF" (at 213 73 0) (effects (font (size 1.27 1.27))))
(property "Footprint" "Capacitor_SMD:C_0805_2012Metric" (at 210 70 0) (effects (font (size 1.27 1.27)) hide))
(property "Datasheet" "" (at 210 70 0) (effects (font (size 1.27 1.27)) hide))
)
(symbol (lib_id "bm:L") (at 180 115 0) (unit 1)
(in_bom yes) (on_board yes) (dnp no)
(uuid "c358b595-8b13-497e-9e9e-49f65d43ca20")
(property "Reference" "L1" (at 183 112 0) (effects (font (size 1.27 1.27))))
(property "Value" "4.7uH" (at 183 118 0) (effects (font (size 1.27 1.27))))
(property "Footprint" "Inductor_SMD:L_0805_2012Metric" (at 180 115 0) (effects (font (size 1.27 1.27)) hide))
(property "Datasheet" "" (at 180 115 0) (effects (font (size 1.27 1.27)) hide))
)
(symbol (lib_id "bm:C") (at 160 140 0) (unit 1)
(in_bom yes) (on_board yes) (dnp no)
(uuid "be44b856-bd18-4c09-9ee0-04202caf4768")
(property "Reference" "C1" (at 163 137 0) (effects (font (size 1.27 1.27))))
(property "Value" "10uF" (at 163 143 0) (effects (font (size 1.27 1.27))))
(property "Footprint" "Capacitor_SMD:C_0805_2012Metric" (at 160 140 0) (effects (font (size 1.27 1.27)) hide))
(property "Datasheet" "" (at 160 140 0) (effects (font (size 1.27 1.27)) hide))
)
(symbol (lib_id "bm:C") (at 200 140 0) (unit 1)
(in_bom yes) (on_board yes) (dnp no)
(uuid "d225c3fa-9586-478d-a854-6d14dbaa4bfd")
(property "Reference" "C2" (at 203 137 0) (effects (font (size 1.27 1.27))))
(property "Value" "10uF" (at 203 143 0) (effects (font (size 1.27 1.27))))
(property "Footprint" "Capacitor_SMD:C_0805_2012Metric" (at 200 140 0) (effects (font (size 1.27 1.27)) hide))
(property "Datasheet" "" (at 200 140 0) (effects (font (size 1.27 1.27)) hide))
)
(symbol (lib_id "bm:FPC_10") (at 280 80 0) (unit 1)
(in_bom yes) (on_board yes) (dnp no)
(uuid "dbdc9c1a-6b0f-497d-87bf-2ba4cae89123")
(property "Reference" "J2" (at 283 77 0) (effects (font (size 1.27 1.27))))
(property "Value" "FPC-10 SOP-8" (at 283 83 0) (effects (font (size 1.27 1.27))))
(property "Footprint" "" (at 280 80 0) (effects (font (size 1.27 1.27)) hide))
(property "Datasheet" "" (at 280 80 0) (effects (font (size 1.27 1.27)) hide))
)
(symbol (lib_id "bm:FPC_20") (at 280 140 0) (unit 1)
(in_bom yes) (on_board yes) (dnp no)
(uuid "1e20e107-cee6-42e8-a075-64e6e08c59d3")
(property "Reference" "J3" (at 283 137 0) (effects (font (size 1.27 1.27))))
(property "Value" "FPC-20 SOP-16N" (at 283 143 0) (effects (font (size 1.27 1.27))))
(property "Footprint" "" (at 280 140 0) (effects (font (size 1.27 1.27)) hide))
(property "Datasheet" "" (at 280 140 0) (effects (font (size 1.27 1.27)) hide))
)
(symbol (lib_id "bm:FPC_20") (at 280 200 0) (unit 1)
(in_bom yes) (on_board yes) (dnp no)
(uuid "088f021c-2eb1-4377-ac14-7c561fdd9f65")
(property "Reference" "J4" (at 283 197 0) (effects (font (size 1.27 1.27))))
(property "Value" "FPC-20 SOP-16W" (at 283 203 0) (effects (font (size 1.27 1.27))))
(property "Footprint" "" (at 280 200 0) (effects (font (size 1.27 1.27)) hide))
(property "Datasheet" "" (at 280 200 0) (effects (font (size 1.27 1.27)) hide))
)
(label "SPI_SCK" (at 95 67.5 0) (effects (font (size 1.27 1.27))) (uuid "c42549fd-10be-4aad-afc7-8c810f319c36"))
(label "SPI_SCK" (at 190 58.5 0) (effects (font (size 1.27 1.27))) (uuid "b54a8fdc-6ac2-449c-ba67-22dc6766d98b"))
(label "SPI_MOSI" (at 95 70 0) (effects (font (size 1.27 1.27))) (uuid "fa1c1149-1576-4e88-8b85-a0eb1619bcea"))
(label "SPI_MOSI" (at 190 56 0) (effects (font (size 1.27 1.27))) (uuid "b88e4cf0-f774-4040-a7c2-24b10243d283"))
(label "SPI_MISO" (at 95 72.5 0) (effects (font (size 1.27 1.27))) (uuid "93297208-6d7b-4f46-888b-3eacc4f07f2d"))
(label "SPI_MISO" (at 170 61.5 0) (effects (font (size 1.27 1.27))) (uuid "7cc87975-f349-405a-8a10-37857fc82f63"))
(label "FLASH_CS" (at 170 64 0) (effects (font (size 1.27 1.27))) (uuid "7c602734-cf64-4579-b740-428c9d1bf4ca"))
(label "FLASH_CS" (at 210 45 0) (effects (font (size 1.27 1.27))) (uuid "71348c34-2666-48f0-a1d7-74038192d9ac"))
(label "C_3V3" (at 95 77.5 0) (effects (font (size 1.27 1.27))) (uuid "ee3c2698-ac21-4e70-a3c2-b7bf2488d174"))
(label "C_3V3" (at 190 64 0) (effects (font (size 1.27 1.27))) (uuid "0495d91b-e07e-42f8-97b5-e0f3ba1e8f04"))
(label "C_3V3" (at 190 133 0) (effects (font (size 1.27 1.27))) (uuid "3a6f36f4-a58d-4526-bbef-9adda98bf7c0"))
(label "GND" (at 95 80 0) (effects (font (size 1.27 1.27))) (uuid "5871e4a9-6710-4460-a682-9a0067aebbbf"))
(label "GND" (at 170 56 0) (effects (font (size 1.27 1.27))) (uuid "4efb8414-a693-4e31-a3f5-6fce8f1df21d"))
(label "GND" (at 170 127 0) (effects (font (size 1.27 1.27))) (uuid "018eeef1-8d0f-4e97-bfa8-f51f977577bf"))
(label "C_S1" (at 65 65 0) (effects (font (size 1.27 1.27))) (uuid "f644a442-355d-445d-8c08-7729fe701df7"))
(label "C_S2" (at 65 67.5 0) (effects (font (size 1.27 1.27))) (uuid "4d5124ce-b786-4ad8-92cd-20d493231b0f"))
(label "C_S3" (at 65 70 0) (effects (font (size 1.27 1.27))) (uuid "c15ff5c5-329a-4e35-a245-17f45d0f44c2"))
(label "C_S4" (at 65 72.5 0) (effects (font (size 1.27 1.27))) (uuid "7bc33049-5614-4b6a-98d5-8d6bcd9cb33e"))
(label "C_S5" (at 65 75 0) (effects (font (size 1.27 1.27))) (uuid "6e057bfa-6ec0-4b17-b32b-e4fa2dac8adb"))
(label "C_S6" (at 65 77.5 0) (effects (font (size 1.27 1.27))) (uuid "daf90d30-c0ba-4d82-8d00-7786902375c6"))
(label "C_S7" (at 65 80 0) (effects (font (size 1.27 1.27))) (uuid "f4d53fcf-2294-4087-adaa-5868e3e1cae4"))
(label "C_S8" (at 95 65 0) (effects (font (size 1.27 1.27))) (uuid "2392265d-3aa6-435c-955f-300296cebda5"))
(label "C_S8" (at 130 80 0) (effects (font (size 1.27 1.27))) (uuid "220dfbea-98b7-4cf5-9387-f4610df10a5d"))
(label "AUDIO_FILT" (at 150 80 0) (effects (font (size 1.27 1.27))) (uuid "652c7bf4-9751-42e0-8fcd-2d704769d29e"))
(label "C_VBAT" (at 170 133 0) (effects (font (size 1.27 1.27))) (uuid "38617934-d4a7-466c-9079-41ca1565072a"))
(label "C_VBAT" (at 180 110 0) (effects (font (size 1.27 1.27))) (uuid "af0e9186-887c-4293-8f51-af66874d2bd7"))
(label "BOOST_SW" (at 180 122 0) (effects (font (size 1.27 1.27))) (uuid "600b6dba-ff8f-449e-8d13-43f8afb71ade"))
(label "BOOST_SW" (at 180 120 0) (effects (font (size 1.27 1.27))) (uuid "caaed790-ed9a-4383-9419-464e625cd094"))
(text "CARRIER: XIAO nRF52840 + IS25LP128F (16MB) + TPS61220 (3.3V boost)" (at 40 30 0) (effects (font (size 1.5 1.5)) (justify left)) (uuid "f65d8fb2-42b9-41bd-9d1f-2510573aad78"))
(text "FPC-20 cable connects carrier to one of the SOP adapter boards" (at 40 35 0) (effects (font (size 1.5 1.5)) (justify left)) (uuid "54d89a0d-93b5-4be0-b8c6-e10b5bb24ab7"))
(text "ADAPTERS: Snap-off castellated SOP footprints" (at 250 30 0) (effects (font (size 1.5 1.5)) (justify left)) (uuid "5dc73088-8f3a-4c90-98e7-1b7f701966f9"))
(text "Each has its own FPC connector + unique net names" (at 250 35 0) (effects (font (size 1.5 1.5)) (justify left)) (uuid "8947ecc0-f63e-46c6-aef9-f5acf6373af4"))
)
-543
View File
@@ -1,543 +0,0 @@
#!/usr/bin/env python3
"""
Baby Mobile — Combined Panel v4
PANEL LAYOUT:
┌───────────────────────────────────────────────┐
│ CARRIER BOARD (44×26mm) │
│ ┌───────USB-C──┐ │
│ │ █████████████ │ │
│ │ │ [U2 IS25LP128F] [C3][R2] │
│ │ XIAO BLE │ ●1 │
│ │ nRF52840 │ [R1][C5] │
│ │ │ │
│ │ D0 D10│ [U1 TPS61220] │
│ │ D1 D9│ ●1 [L1][C1][C2] │
│ │ D2 D8│ │
│ │ D3 D7│ ┌────────────────┐ │
│ │ D4 3V3│ │ J1 FPC-20 0.5mm│ │
│ │ D5 GND│ └────────────────┘ │
│ │ D6 5V│ │
│ └───────────────┘ (M2) (M2) │
├ ─ ─ ─ ─ ─ SNAP ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┤
│ ┌──────┐ ┃ ┌──────────┐ ┃ ┌──────────┐ │
│ │SOP-8 │ ┃ │SOP-16 N │ ┃ │SOP-16 W │ │
│ C│ │C┃C│ │C┃C│ │C │
│ A│[FPC] │A┃A│ [FPC] │A┃A│ [FPC] │A │
│ S│ │S┃S│ │S┃S│ │S │
│ T│ │T┃T│ │T┃T│ │T │
│ └──────┘ ┃ └──────────┘ ┃ └──────────┘ │
└───────────┸──────────────┸─────────────────────┘
C=castellated edges ┃=v-score snap lines
Each SOP adapter:
- Long edges (top/bottom): castellated half-holes = SOP pads
- Short edges: v-score snap lines
- Center top: FPC 0.5mm connector (20-pin for SOP-16, 10-pin for SOP-8)
- All SOP pins netted to corresponding FPC pins
"""
import uuid, os, json
def uid():
return str(uuid.uuid4())
# ============================================================
# KiCad drawing primitives
# ============================================================
def gr_line(x1, y1, x2, y2, layer="Edge.Cuts", w=0.1):
return f' (gr_line (start {x1:.3f} {y1:.3f}) (end {x2:.3f} {y2:.3f}) (layer "{layer}") (width {w}) (uuid "{uid()}"))'
def gr_rect(x1, y1, x2, y2, layer="F.SilkS", w=0.15):
return f' (gr_rect (start {x1:.3f} {y1:.3f}) (end {x2:.3f} {y2:.3f}) (layer "{layer}") (width {w}) (uuid "{uid()}"))'
def gr_text(s, x, y, sz=0.8, layer="F.SilkS", mirror=False):
th = max(0.08, sz * 0.13)
mir = " (justify mirror)" if mirror else ""
return f' (gr_text "{s}" (at {x:.3f} {y:.3f}) (layer "{layer}") (uuid "{uid()}") (effects (font (size {sz} {sz}) (thickness {th:.3f})){mir}))'
def gr_circle(x, y, r=0.3, layer="F.SilkS", fill="solid"):
return f' (gr_circle (center {x:.3f} {y:.3f}) (end {x+r:.3f} {y:.3f}) (layer "{layer}") (width 0.1) (fill {fill}) (uuid "{uid()}"))'
def fp_hdr(name, x, y, layer="F.Cu"):
return f"""
(footprint "panel:{name}" (layer "{layer}")
(at {x:.3f} {y:.3f})
(uuid "{uid()}")
(fp_text reference "{name}" (at 0 0) (layer "{layer[0]}.Fab") (uuid "{uid()}")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "{layer[0]}.Fab") (uuid "{uid()}")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))"""
def pad_smd(name, x, y, w, h, net, nname, layer="F.Cu"):
layers = f'"{layer}" "{layer[0]}.Paste" "{layer[0]}.Mask"'
return f' (pad "{name}" smd rect (at {x:.3f} {y:.3f}) (size {w:.3f} {h:.3f}) (layers {layers}) (net {net} "{nname}") (uuid "{uid()}"))'
def pad_thru(name, x, y, pd, dd, net, nname):
return f' (pad "{name}" thru_hole circle (at {x:.3f} {y:.3f}) (size {pd} {pd}) (drill {dd}) (layers "*.Cu" "*.Mask") (net {net} "{nname}") (uuid "{uid()}"))'
def pad_cast(name, x, y, net, nname):
"""Castellated half-hole on board edge."""
return f' (pad "{name}" thru_hole circle (at {x:.3f} {y:.3f}) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net {net} "{nname}") (uuid "{uid()}"))'
# ============================================================
# XIAO nRF52840 Dimensions (from Seeed docs)
# ============================================================
# PCB: 21.0mm x 17.5mm
# USB-C: centered on one 17.5mm short edge, ~9mm wide, protrudes ~2.5mm
# Pin headers: 2x7, 2.54mm pitch, rows 17.78mm apart (center-center)
# Pin 1 (D0) at top-left when USB faces left
# Reset button on USB side, LED on opposite side
XIAO_W = 21.0
XIAO_H = 17.5
XIAO_ROW_SPAN = 17.78 # center to center of pin rows
XIAO_USB_W = 8.9
XIAO_USB_H = 3.2
XIAO_USB_PROTRUDE = 1.5 # how far USB sticks past PCB edge
# ============================================================
# Main generator
# ============================================================
def generate():
# Panel dimensions
CARRIER_W = 44.0
CARRIER_H = 26.0
ADAPTER_STRIP_H = 14.0
PANEL_W = 48.0
PANEL_H = CARRIER_H + ADAPTER_STRIP_H + 1.0 # 1mm v-score gap
ox, oy = 100.0, 100.0 # KiCad origin
pcb = []
# ---- File header ----
pcb.append(f"""(kicad_pcb (version 20221018) (generator "panel_v4")
(general (thickness 1.6))
(paper "A4")
(title_block
(title "Baby Mobile Combined Panel v4")
(date "2026-03-11")
(rev "4.0")
(comment 1 "Carrier: XIAO nRF52840 + IS25LP128F + TPS61220 + FPC-20")
(comment 2 "Adapters: SOP-8, SOP-16N, SOP-16W — castellated, FPC connected")
(comment 3 "Order: JLCPCB, 2-layer, castellated holes=yes, v-score=yes")
)
(layers
(0 "F.Cu" signal) (31 "B.Cu" signal)
(34 "B.Paste" user) (35 "F.Paste" user)
(36 "B.SilkS" user "B.Silkscreen") (37 "F.SilkS" user "F.Silkscreen")
(38 "B.Mask" user "B.Mask") (39 "F.Mask" user "F.Mask")
(44 "Edge.Cuts" user)
(48 "B.Fab" user "B.Fab") (49 "F.Fab" user "F.Fab")
)
(setup
(pad_to_mask_clearance 0.05)
(pcbplotparams (layerselection 0x00010fc_ffffffff) (outputdirectory "gerbers/"))
)
(net 0 "")
(net 1 "GND") (net 2 "VBAT") (net 3 "3V3")
(net 4 "SPI_MOSI") (net 5 "SPI_MISO") (net 6 "SPI_SCK") (net 7 "FLASH_CS")
(net 8 "BOOST_SW") (net 9 "AUDIO_FILT")
""")
# 16 signal nets for SOP pins / FPC
for i in range(1, 17):
pcb.append(f' (net {i+9} "S{i}")')
# Total nets: 0-25
# ================================================================
# PANEL OUTLINE
# ================================================================
# Outer rectangle
pcb.append(gr_line(ox, oy, ox+PANEL_W, oy))
pcb.append(gr_line(ox+PANEL_W, oy, ox+PANEL_W, oy+PANEL_H))
pcb.append(gr_line(ox+PANEL_W, oy+PANEL_H, ox, oy+PANEL_H))
pcb.append(gr_line(ox, oy+PANEL_H, ox, oy))
# V-score: carrier / adapter strip
vs_y = oy + CARRIER_H + 0.5
pcb.append(gr_line(ox, vs_y, ox+PANEL_W, vs_y))
pcb.append(gr_text("▼ SNAP ▼", ox + PANEL_W/2, vs_y - 0.3, 0.5))
# V-score: between adapters
adapt_base = vs_y + 0.5
# SOP-8: 10mm wide, SOP-16N: 16mm wide, SOP-16W: 16mm wide
a8_w = 12.0
a16n_w = 16.0
a16w_w = 16.0
gap = 0.0 # v-score is zero-width
vs_x1 = ox + a8_w + 1.0
vs_x2 = vs_x1 + a16n_w
pcb.append(gr_line(vs_x1, adapt_base, vs_x1, oy + PANEL_H))
pcb.append(gr_line(vs_x2, adapt_base, vs_x2, oy + PANEL_H))
# ================================================================
# CARRIER: XIAO SOCKET with accurate outline
# ================================================================
# Place XIAO with USB-C facing left edge of carrier
xiao_cx = ox + 3 + XIAO_W/2 # center of XIAO
xiao_cy = oy + CARRIER_H/2
# Board outline rectangle
xb_l = xiao_cx - XIAO_W/2 # left edge of XIAO PCB
xb_r = xiao_cx + XIAO_W/2 # right edge
xb_t = xiao_cy - XIAO_H/2 # top
xb_b = xiao_cy + XIAO_H/2 # bottom
pcb.append(gr_rect(xb_l, xb_t, xb_r, xb_b, "F.SilkS", 0.2))
# USB-C rectangle protruding from left edge
usb_l = xb_l - XIAO_USB_PROTRUDE
usb_t = xiao_cy - XIAO_USB_W/2
usb_b = xiao_cy + XIAO_USB_W/2
pcb.append(gr_rect(usb_l, usb_t, xb_l, usb_b, "F.SilkS", 0.2))
# Fill USB area
pcb.append(gr_rect(usb_l + 0.3, usb_t + 0.3, xb_l - 0.1, usb_b - 0.3, "F.SilkS", 0.15))
pcb.append(gr_text("USB-C", usb_l + 2, xiao_cy, 0.5))
pcb.append(gr_text("XIAO nRF52840", xiao_cx + 1, xiao_cy, 0.8))
# Reset button indicator (top-left corner of XIAO near USB)
pcb.append(gr_text("RST", xb_l + 2, xb_t + 1.5, 0.4))
pcb.append(gr_circle(xb_l + 1, xb_t + 1.5, 0.5, "F.SilkS", "none"))
# Pin labels
left_labels = ["D0","D1","D2","D3","D4","D5","D6"]
right_labels = ["D10","D9","D8","D7","3V3","GND","5V"]
# Left row nets: SIG_1..7 → S1..S7 (from toy via FPC)
left_nets = [(10,"S1"),(11,"S2"),(12,"S3"),(13,"S4"),(14,"S5"),(15,"S6"),(16,"S7")]
# Right row: D10→S8(audio), D9→SCK, D8→MOSI, D7→MISO, 3V3, GND, 5V(NC)
right_nets = [(17,"S8"),(6,"SPI_SCK"),(4,"SPI_MOSI"),(5,"SPI_MISO"),(3,"3V3"),(1,"GND"),(0,"")]
# Left header
pcb.append(fp_hdr("J2_XIAO_L", xiao_cx - XIAO_ROW_SPAN/2, xiao_cy))
for i in range(7):
y = -7.62 + i * 2.54
net_id, net_name = left_nets[i]
pcb.append(pad_thru(left_labels[i], 0, y, 1.7, 1.0, net_id, net_name))
pcb.append(" )")
for i, lbl in enumerate(left_labels):
pcb.append(gr_text(lbl, xiao_cx - XIAO_ROW_SPAN/2 - 2.5, xiao_cy - 7.62 + i*2.54, 0.45))
# Right header
pcb.append(fp_hdr("J3_XIAO_R", xiao_cx + XIAO_ROW_SPAN/2, xiao_cy))
for i in range(7):
y = -7.62 + i * 2.54
net_id, net_name = right_nets[i]
if net_id > 0:
pcb.append(pad_thru(right_labels[i], 0, y, 1.7, 1.0, net_id, net_name))
else:
pcb.append(f' (pad "{right_labels[i]}" thru_hole circle (at 0 {y:.2f}) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (uuid "{uid()}"))')
pcb.append(" )")
for i, lbl in enumerate(right_labels):
pcb.append(gr_text(lbl, xiao_cx + XIAO_ROW_SPAN/2 + 2.8, xiao_cy - 7.62 + i*2.54, 0.45))
# ================================================================
# CARRIER: IS25LP128F (SOIC-8)
# ================================================================
fl_cx = ox + 32
fl_cy = oy + 5.5
soic_span = 5.4
# SOIC-8 body outline on silk
pcb.append(gr_rect(fl_cx - 2.5, fl_cy - soic_span/2 - 0.5,
fl_cx + 2.5, fl_cy + soic_span/2 + 0.5))
# Pin 1 dot
pcb.append(gr_circle(fl_cx - 1.5, fl_cy + soic_span/2 - 0.5, 0.25))
# Notch on pin 1 end
pcb.append(gr_circle(fl_cx, fl_cy + soic_span/2 + 0.5, 0.4, "F.SilkS", "none"))
pcb.append(gr_text("U2", fl_cx, fl_cy - soic_span/2 - 1.5, 0.5))
pcb.append(gr_text("IS25LP128F", fl_cx, fl_cy + soic_span/2 + 2, 0.4))
# Pin numbers on silk
for i, num in enumerate([1,2,3,4]):
pcb.append(gr_text(str(num), fl_cx - 1.905 + i*1.27, fl_cy + soic_span/2 + 1.2, 0.3))
for i, num in enumerate([8,7,6,5]):
pcb.append(gr_text(str(num), fl_cx - 1.905 + i*1.27, fl_cy - soic_span/2 - 1.2, 0.3))
flash_pins = [
(1, -1.905, soic_span/2, 7, "FLASH_CS"),
(2, -0.635, soic_span/2, 5, "SPI_MISO"),
(3, 0.635, soic_span/2, 3, "3V3"), # ~WP tie high
(4, 1.905, soic_span/2, 1, "GND"),
(5, 1.905, -soic_span/2, 4, "SPI_MOSI"),
(6, 0.635, -soic_span/2, 6, "SPI_SCK"),
(7, -0.635, -soic_span/2, 3, "3V3"), # ~HOLD tie high
(8, -1.905, -soic_span/2, 3, "3V3"), # VCC
]
pcb.append(fp_hdr("U2_Flash", fl_cx, fl_cy))
for pin, x, y, net, nn in flash_pins:
pcb.append(pad_smd(str(pin), x, y, 0.6, 1.5, net, nn))
pcb.append(" )")
# Flash decoupling C3
pcb.append(fp_hdr("C3", fl_cx + 5.5, fl_cy - 1))
pcb.append(pad_smd("1", -1.0, 0, 1.0, 1.2, 3, "3V3"))
pcb.append(pad_smd("2", 1.0, 0, 1.0, 1.2, 1, "GND"))
pcb.append(" )")
pcb.append(gr_text("C3", fl_cx + 5.5, fl_cy - 2.3, 0.4))
pcb.append(gr_text("100n", fl_cx + 5.5, fl_cy + 0.3, 0.35))
# Flash CS pullup R2
pcb.append(fp_hdr("R2", fl_cx + 5.5, fl_cy + 2))
pcb.append(pad_smd("1", -1.0, 0, 1.0, 1.2, 7, "FLASH_CS"))
pcb.append(pad_smd("2", 1.0, 0, 1.0, 1.2, 3, "3V3"))
pcb.append(" )")
pcb.append(gr_text("R2", fl_cx + 5.5, fl_cy + 0.8, 0.4))
pcb.append(gr_text("10K", fl_cx + 5.5, fl_cy + 3.3, 0.35))
# ================================================================
# CARRIER: Audio RC filter (R1 + C5)
# ================================================================
rc_x = ox + 32
rc_y = oy + 14
pcb.append(fp_hdr("R1", rc_x, rc_y))
pcb.append(pad_smd("1", -1.0, 0, 1.0, 1.2, 17, "S8")) # from XIAO D10
pcb.append(pad_smd("2", 1.0, 0, 1.0, 1.2, 9, "AUDIO_FILT"))
pcb.append(" )")
pcb.append(gr_text("R1 4.7K", rc_x, rc_y - 1.3, 0.4))
pcb.append(fp_hdr("C5", rc_x, rc_y + 3))
pcb.append(pad_smd("1", -1.0, 0, 1.0, 1.2, 9, "AUDIO_FILT"))
pcb.append(pad_smd("2", 1.0, 0, 1.0, 1.2, 1, "GND"))
pcb.append(" )")
pcb.append(gr_text("C5 10n", rc_x, rc_y + 1.7, 0.4))
# ================================================================
# CARRIER: TPS61220 Boost Converter
# ================================================================
bx = ox + 32
by = oy + 21
# SC-70-5 outline
pcb.append(gr_rect(bx - 1.2, by - 1.1, bx + 1.2, by + 1.1))
pcb.append(gr_circle(bx - 0.8, by + 0.6, 0.2)) # pin 1 dot
pcb.append(gr_text("U1", bx, by - 2, 0.5))
pcb.append(gr_text("TPS61220", bx, by + 2, 0.4))
pcb.append(gr_text("●1", bx - 1.5, by + 0.7, 0.35))
pcb.append(fp_hdr("U1_Boost", bx, by))
pcb.append(pad_smd("1", -0.65, 0.7, 0.4, 0.55, 2, "VBAT")) # VIN
pcb.append(pad_smd("2", 0, 0.7, 0.4, 0.55, 1, "GND")) # GND
pcb.append(pad_smd("3", 0.65, 0.7, 0.4, 0.55, 2, "VBAT")) # EN=VIN
pcb.append(pad_smd("4", 0.65, -0.7, 0.4, 0.55, 3, "3V3")) # VOUT
pcb.append(pad_smd("5", -0.65, -0.7, 0.4, 0.55, 8, "BOOST_SW")) # L
pcb.append(" )")
# L1 (0805)
pcb.append(fp_hdr("L1", bx - 4, by))
pcb.append(pad_smd("1", -1.0, 0, 1.0, 1.2, 8, "BOOST_SW"))
pcb.append(pad_smd("2", 1.0, 0, 1.0, 1.2, 2, "VBAT"))
pcb.append(" )")
pcb.append(gr_text("L1 4.7u", bx - 4, by - 1.3, 0.4))
# C1 input (0805)
pcb.append(fp_hdr("C1", bx - 4, by + 3))
pcb.append(pad_smd("1", -1.0, 0, 1.0, 1.2, 2, "VBAT"))
pcb.append(pad_smd("2", 1.0, 0, 1.0, 1.2, 1, "GND"))
pcb.append(" )")
pcb.append(gr_text("C1 10u", bx - 4, by + 1.7, 0.4))
# C2 output (0805)
pcb.append(fp_hdr("C2", bx + 4, by))
pcb.append(pad_smd("1", -1.0, 0, 1.0, 1.2, 3, "3V3"))
pcb.append(pad_smd("2", 1.0, 0, 1.0, 1.2, 1, "GND"))
pcb.append(" )")
pcb.append(gr_text("C2 10u", bx + 4, by - 1.3, 0.4))
# ================================================================
# CARRIER: FPC-20 Connector (0.5mm pitch, bottom-contact)
# ================================================================
fpc_cx = ox + 38
fpc_cy = oy + 14
fpc_pitch = 0.5
n_fpc = 20
# FPC connector outline
fpc_w = (n_fpc - 1) * fpc_pitch + 2.0
pcb.append(gr_rect(fpc_cx - fpc_w/2, fpc_cy - 2, fpc_cx + fpc_w/2, fpc_cy + 2))
pcb.append(gr_text("J1 FPC-20", fpc_cx, fpc_cy - 3, 0.5))
pcb.append(gr_text("0.5mm TO TOY", fpc_cx, fpc_cy + 3, 0.35))
pcb.append(gr_circle(fpc_cx - (n_fpc-1)*fpc_pitch/2 - 0.8, fpc_cy, 0.2)) # pin 1
# FPC pin assignment:
# 1=VBAT 2=GND 3=S1 4=S2 ... 10=S8 11-16=S9-S14(spare) 17-20=spare/GND
fpc_nets = [
(1, 2, "VBAT"), (2, 1, "GND"),
(3, 10, "S1"), (4, 11, "S2"), (5, 12, "S3"), (6, 13, "S4"),
(7, 14, "S5"), (8, 15, "S6"), (9, 16, "S7"), (10, 17, "S8"),
(11, 18, "S9"), (12, 19, "S10"), (13, 20, "S11"), (14, 21, "S12"),
(15, 22, "S13"), (16, 23, "S14"), (17, 24, "S15"), (18, 25, "S16"),
(19, 1, "GND"), (20, 1, "GND"),
]
pcb.append(fp_hdr("J1_FPC20", fpc_cx, fpc_cy))
for pin, net, nn in fpc_nets:
x = -((n_fpc - 1) * fpc_pitch / 2) + (pin - 1) * fpc_pitch
pcb.append(pad_smd(str(pin), x, 0, 0.3, 1.2, net, nn))
# Anchor/lock pads
pcb.append(pad_smd("S1", -(fpc_w/2 - 0.5), 2.5, 1.5, 1.0, 0, ""))
pcb.append(pad_smd("S2", (fpc_w/2 - 0.5), 2.5, 1.5, 1.0, 0, ""))
pcb.append(" )")
# ================================================================
# CARRIER: Mounting holes
# ================================================================
for mx, my in [(ox + 2, oy + CARRIER_H - 2), (ox + CARRIER_W - 3, oy + CARRIER_H - 2)]:
pcb.append(fp_hdr("MH", mx, my))
pcb.append(f' (pad "" thru_hole circle (at 0 0) (size 3.5 3.5) (drill 2.2) (layers "*.Cu" "*.Mask") (uuid "{uid()}"))')
pcb.append(" )")
# Carrier back silk
pcb.append(gr_text("XIAO: D0-D6→SIG1-7 D7=MISO D8=MOSI D9=SCK D10=AUDIO(S8)", ox + CARRIER_W/2, oy + CARRIER_H/2, 0.4, "B.SilkS"))
pcb.append(gr_text("FPC: 1=VBAT 2=GND 3-10=S1-S8 19-20=GND", ox + CARRIER_W/2, oy + CARRIER_H/2 + 2, 0.4, "B.SilkS"))
# ================================================================
# ADAPTERS: Castellated SOP breakouts with FPC connectors
# ================================================================
SOP_PITCH = 1.27
def make_adapter(name, board_cx, board_cy, pins_per_side, row_span, n_fpc_pins):
"""
Adapter board with:
- Castellated half-holes on TOP and BOTTOM long edges (SOP pads)
- FPC connector centered on F.Cu
- Board edges through SOP pad centers
"""
total_pins = pins_per_side * 2
row_len = (pins_per_side - 1) * SOP_PITCH
bw = row_len + 3.0 # board width (along pin rows)
bh = row_span # board height = exactly SOP row spacing
# Board outline — edges at castellation centers
bl = board_cx - bw/2
br = board_cx + bw/2
bt = board_cy - bh/2 # top edge (pins N+1..2N)
bb = board_cy + bh/2 # bottom edge (pins 1..N)
# Don't draw left/right edges if they coincide with panel v-score
# (they'll be part of the panel outline or v-score already)
# Draw top and bottom edges
pcb.append(gr_line(bl, bt, br, bt))
pcb.append(gr_line(br, bt, br, bb))
pcb.append(gr_line(br, bb, bl, bb))
pcb.append(gr_line(bl, bb, bl, bt))
# Label
pcb.append(gr_text(name, board_cx, board_cy, 0.6))
# Castellated pads footprint
pcb.append(fp_hdr(f"{name}_cast", board_cx, board_cy, "B.Cu"))
for i in range(pins_per_side):
pin = i + 1
x = -row_len/2 + i * SOP_PITCH
net_id = pin + 9 # S1=net10, S2=net11, etc.
# Bottom edge: pins 1..N
pcb.append(pad_cast(str(pin), x, bh/2, net_id, f"S{pin}"))
# Top edge: pins 2N..N+1 (reversed, SOP convention)
top_pin = total_pins - i
top_net = top_pin + 9
pcb.append(pad_cast(str(top_pin), x, -bh/2, top_net, f"S{top_pin}"))
pcb.append(" )")
# Pin labels on front silk
for i in range(pins_per_side):
x = board_cx - row_len/2 + i * SOP_PITCH
pcb.append(gr_text(str(i+1), x, bb + 0.7, 0.3))
pcb.append(gr_text(str(total_pins - i), x, bt - 0.7, 0.3))
# Pin 1 dot
pcb.append(gr_circle(board_cx - row_len/2 - 0.5, bb + 0.5, 0.2))
pcb.append(gr_text("●1", board_cx - row_len/2 - 0.5, bb + 1.3, 0.3))
# Pin labels on back silk (mirror, for soldering reference)
pcb.append(gr_text(f"{name} ●1→", board_cx, board_cy, 0.5, "B.SilkS", mirror=True))
# FPC connector centered
fpc_pitch_a = 0.5
pcb.append(fp_hdr(f"{name}_FPC", board_cx, board_cy))
for j in range(n_fpc_pins):
x = -((n_fpc_pins - 1) * fpc_pitch_a / 2) + j * fpc_pitch_a
# Map FPC pins to SOP pin nets
if j < total_pins:
sop_pin = j + 1
net_id = sop_pin + 9
nn = f"S{sop_pin}"
elif j == n_fpc_pins - 2:
net_id = 1; nn = "GND" # second-to-last = GND
elif j == n_fpc_pins - 1:
net_id = 2; nn = "VBAT" # last = VBAT
else:
net_id = 0; nn = ""
pcb.append(pad_smd(f"F{j+1}", x, 0, 0.3, 1.0, net_id, nn))
# Anchor pads
aw = (n_fpc_pins - 1) * fpc_pitch_a / 2 + 1.5
pcb.append(pad_smd("SA", -aw, 1.5, 1.2, 0.8, 0, ""))
pcb.append(pad_smd("SB", aw, 1.5, 1.2, 0.8, 0, ""))
pcb.append(" )")
pcb.append(gr_text("FPC", board_cx, board_cy - 1.8, 0.35))
pcb.append(gr_circle(board_cx - (n_fpc_pins-1)*fpc_pitch_a/2 - 0.6, board_cy, 0.15))
# Place adapters in the strip
strip_cy = vs_y + 0.5 + ADAPTER_STRIP_H / 2
# SOP-8: 4+4 pins, 3.9mm span, 10-pin FPC (8 signals + GND + VBAT)
make_adapter("SOP-8", ox + a8_w/2 + 0.5, strip_cy, 4, 3.9, 10)
# SOP-16 narrow: 8+8 pins, 6.0mm span, 20-pin FPC (16 signals + GND + VBAT + 2 spare)
make_adapter("SOP-16N", vs_x1 + a16n_w/2, strip_cy, 8, 6.0, 20)
# SOP-16 wide: 8+8 pins, 10.3mm span, 20-pin FPC
make_adapter("SOP-16W", vs_x2 + a16w_w/2, strip_cy, 8, 10.3, 20)
# ================================================================
# Panel title
# ================================================================
pcb.append(gr_text("Baby Mobile v4 — JLCPCB Panel", ox + PANEL_W/2, oy - 2, 1.0))
pcb.append(gr_text("Castellated Holes=YES V-Score=YES 2-Layer 1.6mm", ox + PANEL_W/2, oy + PANEL_H + 2, 0.5))
pcb.append(")")
return "\n".join(pcb)
if __name__ == "__main__":
outdir = os.path.dirname(os.path.abspath(__file__))
pcb_text = generate()
pcb_path = os.path.join(outdir, "baby-mobile-panel.kicad_pcb")
with open(pcb_path, "w") as f:
f.write(pcb_text)
print(f"Written: {pcb_path} ({len(pcb_text)} bytes)")
proj = json.dumps({
"meta": {"filename": "baby-mobile-panel.kicad_pro", "version": 1},
"board": {"design_settings": {"rules": {"min_track_width": 0.15}}},
"net_settings": {"classes": [{"name":"Default","clearance":0.15,"track_width":0.25}]},
}, indent=2)
with open(os.path.join(outdir, "baby-mobile-panel.kicad_pro"), "w") as f:
f.write(proj)
print("\nPanel:")
print(" Carrier (44×26mm): XIAO(accurate outline+USB-C), IS25LP128F(pin1 dot+notch), TPS61220(pin1 dot), FPC-20")
print(" SOP-8 adapter: castellation on long edges, 10-pin FPC center")
print(" SOP-16N adapter: castellation on long edges, 20-pin FPC center")
print(" SOP-16W adapter: castellation on long edges, 20-pin FPC center")
print(" V-score between carrier and adapter strip, and between each adapter")
print(" All polarized parts have ●1 markers")
+720
View File
@@ -0,0 +1,720 @@
#!/usr/bin/env python3
"""
Baby Mobile v5 — Integrated Schematic + PCB Generator
Fixes from v4 feedback:
(a) Generates BOTH .kicad_sch and .kicad_pcb
(b) XIAO USB-C on TOP edge, pin rows 15mm apart,
carrier pads extended to 20mm with castellated edges
(c) Each sub-board has unique net names:
- Carrier: C_S1..C_S8, C_VBAT, C_3V3, SPI_*, FLASH_CS, BOOST_SW, AUDIO_FILT
- SOP-8 adapter: A8_P1..A8_P8, A8_VBAT, A8_GND
- SOP-16N adapter: A16N_P1..A16N_P16, A16N_VBAT, A16N_GND
- SOP-16W adapter: A16W_P1..A16W_P16, A16W_VBAT, A16W_GND
FPC connects carrier nets to adapter nets (separate pins, separate nets)
(d) Key-shaped board: wide carrier head, narrow adapter stem
Adapters stacked vertically in stem, v-scored on narrow (short) edges
Board shape:
┌────────────────────────────┐
│ CARRIER (26×22mm) │
│ XIAO, Flash, Boost, │ wide "head"
│ FPC connector │
├──────┬─────────────┬───────┤
│ ADAPTER │ narrow "stem"
│ STRIP │
│ (12×30mm) │
│ SOP-8 │←v-score
│ SOP-16N │←v-score
│ SOP-16W │
└─────────────┘
"""
import uuid, os, json, sys
LIB = "bm"
def uid():
return str(uuid.uuid4())
# ============================================================
# NET DEFINITIONS — unique per sub-board
# ============================================================
# We'll build a flat net list. Each net gets a unique integer ID.
NETS = {}
_net_counter = [0]
def net(name):
"""Register a net name and return its ID."""
if name not in NETS:
_net_counter[0] += 1
NETS[name] = _net_counter[0]
return NETS[name]
def net_decl():
"""Generate all (net N "name") declarations."""
lines = [' (net 0 "")']
for name, idx in sorted(NETS.items(), key=lambda x: x[1]):
lines.append(f' (net {idx} "{name}")')
return "\n".join(lines)
# Pre-register all nets
# Carrier power
net("GND"); net("C_VBAT"); net("C_3V3"); net("BOOST_SW"); net("AUDIO_FILT")
# Carrier SPI (on-board, XIAO to flash)
net("SPI_MOSI"); net("SPI_MISO"); net("SPI_SCK"); net("FLASH_CS")
# Carrier signal nets (XIAO GPIOs that connect to FPC)
for i in range(1, 9):
net(f"C_S{i}")
# Carrier FPC pins (carrier side of cable)
for i in range(1, 21):
net(f"FPC_C{i}")
# SOP-8 adapter nets
for i in range(1, 9):
net(f"A8_P{i}")
net("A8_VBAT"); net("A8_GND")
for i in range(1, 11):
net(f"FPC_A8_{i}")
# SOP-16N adapter nets
for i in range(1, 17):
net(f"A16N_P{i}")
net("A16N_VBAT"); net("A16N_GND")
for i in range(1, 21):
net(f"FPC_A16N_{i}")
# SOP-16W adapter nets
for i in range(1, 17):
net(f"A16W_P{i}")
net("A16W_VBAT"); net("A16W_GND")
for i in range(1, 21):
net(f"FPC_A16W_{i}")
# ============================================================
# XIAO DIMENSIONS
# ============================================================
XIAO_PCB_W = 17.5 # board width (the short dimension when USB is up)
XIAO_PCB_H = 21.0 # board height (USB to antenna end)
XIAO_ROW_SPAN = 15.0 # center-to-center between pin rows
XIAO_USB_W = 8.9
XIAO_USB_H = 3.2
CARRIER_W = 26.0 # wide enough for 20mm pad span + margin
CARRIER_H = 24.0 # tall enough for XIAO + components below
CARRIER_PAD_SPAN = 20.0 # extended pad span for castellated hand soldering
STEM_W = 14.0 # narrow stem for adapters
SOP_PITCH = 1.27
FPC_PITCH = 0.5
# ============================================================
# KiCad primitives (same as before, abbreviated)
# ============================================================
def gl(x1,y1,x2,y2,layer="Edge.Cuts",w=0.1):
return f' (gr_line (start {x1:.3f} {y1:.3f}) (end {x2:.3f} {y2:.3f}) (layer "{layer}") (width {w}) (uuid "{uid()}"))'
def gr(x1,y1,x2,y2,layer="F.SilkS",w=0.15):
return f' (gr_rect (start {x1:.3f} {y1:.3f}) (end {x2:.3f} {y2:.3f}) (layer "{layer}") (width {w}) (uuid "{uid()}"))'
def gt(s,x,y,sz=0.8,layer="F.SilkS"):
th=max(0.08,sz*0.13)
return f' (gr_text "{s}" (at {x:.3f} {y:.3f}) (layer "{layer}") (uuid "{uid()}") (effects (font (size {sz} {sz}) (thickness {th:.3f}))))'
def gc(x,y,r=0.3,layer="F.SilkS"):
return f' (gr_circle (center {x:.3f} {y:.3f}) (end {x+r:.3f} {y:.3f}) (layer "{layer}") (width 0.1) (fill solid) (uuid "{uid()}"))'
def fp(name,x,y,layer="F.Cu"):
return f"""
(footprint "bm:{name}" (layer "{layer}")
(at {x:.3f} {y:.3f})
(uuid "{uid()}")
(fp_text reference "{name}" (at 0 0) (layer "{layer[0]}.Fab") (uuid "{uid()}")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))
(fp_text value "" (at 0 0) (layer "{layer[0]}.Fab") (uuid "{uid()}")
(effects (font (size 0.5 0.5) (thickness 0.08)) hide))"""
def ps(name,x,y,w,h,nid,nn,layer="F.Cu"):
ls=f'"{layer}" "{layer[0]}.Paste" "{layer[0]}.Mask"'
return f' (pad "{name}" smd rect (at {x:.3f} {y:.3f}) (size {w:.3f} {h:.3f}) (layers {ls}) (net {nid} "{nn}") (uuid "{uid()}"))'
def pt(name,x,y,pd,dd,nid,nn):
return f' (pad "{name}" thru_hole circle (at {x:.3f} {y:.3f}) (size {pd} {pd}) (drill {dd}) (layers "*.Cu" "*.Mask") (net {nid} "{nn}") (uuid "{uid()}"))'
def pc(name,x,y,nid,nn):
return f' (pad "{name}" thru_hole circle (at {x:.3f} {y:.3f}) (size 1.0 1.0) (drill 0.6) (layers "*.Cu" "*.Mask") (net {nid} "{nn}") (uuid "{uid()}"))'
# ============================================================
# PCB GENERATOR
# ============================================================
def generate_pcb():
ox, oy = 100.0, 100.0
# Adapter heights in the stem
a8_h = 8.0 # SOP-8 adapter board height (= row span 3.9mm + FPC tab)
a16n_h = 10.0 # SOP-16 narrow
a16w_h = 14.0 # SOP-16 wide (10.3mm span + FPC tab)
stem_h = a8_h + a16n_h + a16w_h
total_h = CARRIER_H + stem_h
pcb = []
pcb.append(f"""(kicad_pcb (version 20221018) (generator "bm_v5")
(general (thickness 1.6))
(paper "A4")
(title_block
(title "Baby Mobile v5 — Key-Shaped Panel")
(date "2026-03-11") (rev "5.0")
(comment 1 "Carrier head + breakaway adapter stem")
(comment 2 "Unique nets per sub-board, FPC interconnect")
)
(layers
(0 "F.Cu" signal) (31 "B.Cu" signal)
(34 "B.Paste" user) (35 "F.Paste" user)
(36 "B.SilkS" user "B.Silkscreen") (37 "F.SilkS" user "F.Silkscreen")
(38 "B.Mask" user "B.Mask") (39 "F.Mask" user "F.Mask")
(44 "Edge.Cuts" user)
(48 "B.Fab" user "B.Fab") (49 "F.Fab" user "F.Fab")
)
(setup (pad_to_mask_clearance 0.05)
(pcbplotparams (layerselection 0x00010fc_ffffffff) (outputdirectory "gerbers/")))
""")
# ---- KEY-SHAPED OUTLINE ----
# Carrier head: ox to ox+CARRIER_W, oy to oy+CARRIER_H
# Stem: centered under carrier, STEM_W wide
stem_l = ox + (CARRIER_W - STEM_W) / 2
stem_r = stem_l + STEM_W
stem_top = oy + CARRIER_H
stem_bot = stem_top + stem_h
# Clockwise outline
pcb.append(gl(ox, oy, ox+CARRIER_W, oy)) # top
pcb.append(gl(ox+CARRIER_W, oy, ox+CARRIER_W, stem_top)) # right carrier
pcb.append(gl(ox+CARRIER_W, stem_top, stem_r, stem_top)) # step right
pcb.append(gl(stem_r, stem_top, stem_r, stem_bot)) # right stem
pcb.append(gl(stem_r, stem_bot, stem_l, stem_bot)) # bottom stem
pcb.append(gl(stem_l, stem_bot, stem_l, stem_top)) # left stem
pcb.append(gl(stem_l, stem_top, ox, stem_top)) # step left
pcb.append(gl(ox, stem_top, ox, oy)) # left carrier
# V-score lines between adapters (horizontal, across stem width)
vs1_y = stem_top + a8_h
vs2_y = vs1_y + a16n_h
pcb.append(gl(stem_l, vs1_y, stem_r, vs1_y))
pcb.append(gl(stem_l, vs2_y, stem_r, vs2_y))
pcb.append(gt("SNAP", (stem_l+stem_r)/2, vs1_y-0.3, 0.4))
pcb.append(gt("SNAP", (stem_l+stem_r)/2, vs2_y-0.3, 0.4))
# ---- XIAO (USB on top edge, centered) ----
xiao_cx = ox + CARRIER_W / 2
xiao_top = oy + 1.5 # small margin from carrier top
xiao_bot = xiao_top + XIAO_PCB_H
# XIAO board outline
pcb.append(gr(xiao_cx - XIAO_PCB_W/2, xiao_top,
xiao_cx + XIAO_PCB_W/2, xiao_bot, "F.SilkS", 0.2))
# USB-C on top
pcb.append(gr(xiao_cx - XIAO_USB_W/2, xiao_top - XIAO_USB_H,
xiao_cx + XIAO_USB_W/2, xiao_top, "F.SilkS", 0.2))
pcb.append(gt("USB-C", xiao_cx, xiao_top - XIAO_USB_H/2, 0.45))
pcb.append(gt("XIAO nRF52840", xiao_cx, (xiao_top+xiao_bot)/2, 0.6))
pcb.append(gt("RST", xiao_cx - XIAO_PCB_W/2 + 2, xiao_top + 1.5, 0.35))
# Pin rows: 7 pins each, 2.54mm pitch, running vertically
# Left row at xiao_cx - 7.5mm, right row at xiao_cx + 7.5mm
# Pin 1 (D0) at top of left row
# Extended pads: each pad extends from 15mm span to carrier edge (20mm or board edge)
left_x = xiao_cx - XIAO_ROW_SPAN / 2
right_x = xiao_cx + XIAO_ROW_SPAN / 2
pin1_y = xiao_top + 3.0 # first pin position (some margin from USB)
left_pins = [
("D0", "C_S1"), ("D1", "C_S2"), ("D2", "C_S3"), ("D3", "C_S4"),
("D4", "C_S5"), ("D5", "C_S6"), ("D6", "C_S7"),
]
right_pins = [
("D10", "C_S8"), # audio PWM
("D9", "SPI_SCK"),
("D8", "SPI_MOSI"),
("D7", "SPI_MISO"),
("3V3", "C_3V3"),
("GND", "GND"),
("5V", ""), # not connected
]
# Left pin row with extended pads
pcb.append(fp("XIAO_L", left_x, pin1_y))
for i, (label, nn) in enumerate(left_pins):
y = i * 2.54
nid = net(nn) if nn else 0
# Through-hole at XIAO position
pcb.append(pt(label, 0, y, 1.7, 1.0, nid, nn))
# Extended SMD pad toward board left edge for castellated soldering
ext_x = -(CARRIER_PAD_SPAN/2 - XIAO_ROW_SPAN/2) # offset toward left edge
pcb.append(ps(f"{label}_ext", ext_x/2, y, abs(ext_x), 1.2, nid, nn))
pcb.append(" )")
# Right pin row with extended pads
pcb.append(fp("XIAO_R", right_x, pin1_y))
for i, (label, nn) in enumerate(right_pins):
y = i * 2.54
nid = net(nn) if nn else 0
if nid > 0:
pcb.append(pt(label, 0, y, 1.7, 1.0, nid, nn))
ext_x = (CARRIER_PAD_SPAN/2 - XIAO_ROW_SPAN/2)
pcb.append(ps(f"{label}_ext", ext_x/2, y, abs(ext_x), 1.2, nid, nn))
else:
pcb.append(f' (pad "{label}" thru_hole circle (at 0 {y:.2f}) (size 1.7 1.7) (drill 1.0) (layers "*.Cu" "*.Mask") (uuid "{uid()}"))')
pcb.append(" )")
# Pin labels
for i, (label, _) in enumerate(left_pins):
pcb.append(gt(label, left_x - 3.5, pin1_y + i*2.54, 0.4))
for i, (label, _) in enumerate(right_pins):
pcb.append(gt(label, right_x + 3.5, pin1_y + i*2.54, 0.4))
# ---- IS25LP128F (SOIC-8, below XIAO on carrier) ----
fl_cx = ox + 5
fl_cy = oy + CARRIER_H - 5
soic_span = 5.4
pcb.append(gr(fl_cx-2.5, fl_cy-soic_span/2-0.5, fl_cx+2.5, fl_cy+soic_span/2+0.5))
pcb.append(gc(fl_cx-1.5, fl_cy+soic_span/2-0.5, 0.25)) # pin 1
pcb.append(gt("U2 IS25LP128F", fl_cx, fl_cy-soic_span/2-1.5, 0.4))
pcb.append(gt("●1", fl_cx-2.2, fl_cy+soic_span/2+1, 0.3))
flash_pins = [
(1,-1.905, soic_span/2, "FLASH_CS"),
(2,-0.635, soic_span/2, "SPI_MISO"),
(3, 0.635, soic_span/2, "C_3V3"),
(4, 1.905, soic_span/2, "GND"),
(5, 1.905,-soic_span/2, "SPI_MOSI"),
(6, 0.635,-soic_span/2, "SPI_SCK"),
(7,-0.635,-soic_span/2, "C_3V3"),
(8,-1.905,-soic_span/2, "C_3V3"),
]
pcb.append(fp("U2", fl_cx, fl_cy))
for pin, x, y, nn in flash_pins:
pcb.append(ps(str(pin), x, y, 0.6, 1.5, net(nn), nn))
pcb.append(" )")
# C3 flash decoupling
pcb.append(fp("C3", fl_cx+5, fl_cy))
pcb.append(ps("1",-1.0,0, 1.0,1.2, net("C_3V3"),"C_3V3"))
pcb.append(ps("2", 1.0,0, 1.0,1.2, net("GND"),"GND"))
pcb.append(" )")
pcb.append(gt("C3 100n", fl_cx+5, fl_cy-1.3, 0.35))
# R2 CS pullup
pcb.append(fp("R2", fl_cx+5, fl_cy+3))
pcb.append(ps("1",-1.0,0, 1.0,1.2, net("FLASH_CS"),"FLASH_CS"))
pcb.append(ps("2", 1.0,0, 1.0,1.2, net("C_3V3"),"C_3V3"))
pcb.append(" )")
pcb.append(gt("R2 10K", fl_cx+5, fl_cy+1.7, 0.35))
# ---- TPS61220 + passives (bottom-right of carrier) ----
bx = ox + CARRIER_W - 6
by = oy + CARRIER_H - 5
pcb.append(gr(bx-1.2, by-1.1, bx+1.2, by+1.1))
pcb.append(gc(bx-0.8, by+0.6, 0.2))
pcb.append(gt("U1 TPS61220", bx, by-2.2, 0.4))
pcb.append(gt("●1", bx-1.5, by+0.7, 0.3))
pcb.append(fp("U1", bx, by))
pcb.append(ps("1",-0.65, 0.7, 0.4,0.55, net("C_VBAT"),"C_VBAT"))
pcb.append(ps("2", 0, 0.7, 0.4,0.55, net("GND"),"GND"))
pcb.append(ps("3", 0.65, 0.7, 0.4,0.55, net("C_VBAT"),"C_VBAT"))
pcb.append(ps("4", 0.65,-0.7, 0.4,0.55, net("C_3V3"),"C_3V3"))
pcb.append(ps("5",-0.65,-0.7, 0.4,0.55, net("BOOST_SW"),"BOOST_SW"))
pcb.append(" )")
pcb.append(fp("L1", bx-4, by))
pcb.append(ps("1",-1.0,0, 1.0,1.2, net("BOOST_SW"),"BOOST_SW"))
pcb.append(ps("2", 1.0,0, 1.0,1.2, net("C_VBAT"),"C_VBAT"))
pcb.append(" )")
pcb.append(gt("L1 4.7u", bx-4, by-1.3, 0.35))
pcb.append(fp("C1", bx-4, by+3))
pcb.append(ps("1",-1.0,0, 1.0,1.2, net("C_VBAT"),"C_VBAT"))
pcb.append(ps("2", 1.0,0, 1.0,1.2, net("GND"),"GND"))
pcb.append(" )")
pcb.append(gt("C1 10u", bx-4, by+1.7, 0.35))
pcb.append(fp("C2", bx+4, by))
pcb.append(ps("1",-1.0,0, 1.0,1.2, net("C_3V3"),"C_3V3"))
pcb.append(ps("2", 1.0,0, 1.0,1.2, net("GND"),"GND"))
pcb.append(" )")
pcb.append(gt("C2 10u", bx+4, by-1.3, 0.35))
# R1 + C5 audio filter
pcb.append(fp("R1", bx, by-6))
pcb.append(ps("1",-1.0,0, 1.0,1.2, net("C_S8"),"C_S8"))
pcb.append(ps("2", 1.0,0, 1.0,1.2, net("AUDIO_FILT"),"AUDIO_FILT"))
pcb.append(" )")
pcb.append(gt("R1 4.7K", bx, by-7.3, 0.35))
pcb.append(fp("C5", bx+4, by-6))
pcb.append(ps("1",-1.0,0, 1.0,1.2, net("AUDIO_FILT"),"AUDIO_FILT"))
pcb.append(ps("2", 1.0,0, 1.0,1.2, net("GND"),"GND"))
pcb.append(" )")
pcb.append(gt("C5 10n", bx+4, by-7.3, 0.35))
# ---- Carrier FPC-20 (at bottom of carrier, connecting to stem) ----
fpc_cx = ox + CARRIER_W / 2
fpc_cy = oy + CARRIER_H - 1.5
n_fpc = 20
pcb.append(gr(fpc_cx - n_fpc*FPC_PITCH/2 - 1, fpc_cy-1.5,
fpc_cx + n_fpc*FPC_PITCH/2 + 1, fpc_cy+1.5))
pcb.append(gt("J1 FPC-20 0.5mm", fpc_cx, fpc_cy-2.5, 0.4))
pcb.append(gc(fpc_cx - (n_fpc-1)*FPC_PITCH/2 - 0.6, fpc_cy, 0.15))
# FPC pin mapping: carrier side uses FPC_C1..FPC_C20
# 1=C_VBAT 2=GND 3-10=C_S1..C_S8 11-18=spare 19-20=GND
fpc_c_map = [
("FPC_C1","C_VBAT"), ("FPC_C2","GND"),
] + [(f"FPC_C{i+3}", f"C_S{i+1}") for i in range(8)] + [
(f"FPC_C{i}", "") for i in range(11,19)
] + [("FPC_C19","GND"), ("FPC_C20","GND")]
pcb.append(fp("J1_FPC", fpc_cx, fpc_cy))
for j in range(n_fpc):
x = -((n_fpc-1)*FPC_PITCH/2) + j*FPC_PITCH
nn = fpc_c_map[j][0]
nid = net(nn)
pcb.append(ps(str(j+1), x, 0, 0.3, 1.2, nid, nn))
pcb.append(ps("SA", -(n_fpc*FPC_PITCH/2+1), 2, 1.5, 1.0, 0, ""))
pcb.append(ps("SB", (n_fpc*FPC_PITCH/2+1), 2, 1.5, 1.0, 0, ""))
pcb.append(" )")
# ---- Mounting holes ----
for mx,my in [(ox+2, oy+2), (ox+CARRIER_W-2, oy+2)]:
pcb.append(fp("MH",mx,my))
pcb.append(f' (pad "" thru_hole circle (at 0 0) (size 3.5 3.5) (drill 2.2) (layers "*.Cu" "*.Mask") (uuid "{uid()}"))')
pcb.append(" )")
# ================================================================
# ADAPTER: SOP-8
# ================================================================
def make_adapter(prefix, center_x, top_y, height, pins_per_side, row_span, n_fpc_pins):
total_pins = pins_per_side * 2
row_len = (pins_per_side - 1) * SOP_PITCH
cy = top_y + height / 2
pcb.append(gt(prefix, center_x, cy, 0.5))
# Castellation pads on long (left/right) edges
# Bottom row: pins 1..N at cy + row_span/2
# Top row: pins 2N..N+1 at cy - row_span/2
pcb.append(fp(f"{prefix}_cast", center_x, cy, "B.Cu"))
for i in range(pins_per_side):
pin = i + 1
x = -row_len/2 + i * SOP_PITCH
nn = f"{prefix}_P{pin}"
pcb.append(pc(str(pin), x, row_span/2, net(nn), nn))
top_pin = total_pins - i
nn2 = f"{prefix}_P{top_pin}"
pcb.append(pc(str(top_pin), x, -row_span/2, net(nn2), nn2))
pcb.append(" )")
# Pin labels
for i in range(pins_per_side):
x = center_x - row_len/2 + i * SOP_PITCH
pcb.append(gt(str(i+1), x, cy + row_span/2 + 0.7, 0.3))
pcb.append(gt(str(total_pins-i), x, cy - row_span/2 - 0.7, 0.3))
pcb.append(gc(center_x - row_len/2 - 0.5, cy + row_span/2 + 0.5, 0.2))
# FPC connector centered
fpc_y = cy # centered vertically
pcb.append(fp(f"{prefix}_FPC", center_x, fpc_y))
for j in range(n_fpc_pins):
x = -((n_fpc_pins-1)*FPC_PITCH/2) + j*FPC_PITCH
if j < total_pins:
sop_pin = j + 1
nn = f"FPC_{prefix}_{j+1}"
elif j == n_fpc_pins - 2:
nn = f"{prefix}_GND"
elif j == n_fpc_pins - 1:
nn = f"{prefix}_VBAT"
else:
nn = f"FPC_{prefix}_{j+1}"
nid = net(nn)
pcb.append(ps(f"F{j+1}", x, 0, 0.3, 1.0, nid, nn))
pcb.append(ps("SA", -(n_fpc_pins*FPC_PITCH/2+1), 1.5, 1.2, 0.8, 0, ""))
pcb.append(ps("SB", (n_fpc_pins*FPC_PITCH/2+1), 1.5, 1.2, 0.8, 0, ""))
pcb.append(" )")
pcb.append(gt("FPC", center_x, fpc_y - 1.5, 0.3))
pcb.append(gc(center_x - (n_fpc_pins-1)*FPC_PITCH/2 - 0.5, fpc_y, 0.15))
stem_cx = (stem_l + stem_r) / 2
make_adapter("A8", stem_cx, stem_top, a8_h, 4, 3.9, 10)
make_adapter("A16N", stem_cx, vs1_y, a16n_h, 8, 6.0, 20)
make_adapter("A16W", stem_cx, vs2_y, a16w_h, 8, 10.3, 20)
# Back silk instructions
pcb.append(gt("Baby Mobile v5 — github.com/you/baby-mobile", ox+CARRIER_W/2, oy+CARRIER_H/2, 0.4, "B.SilkS"))
# ---- Insert net declarations at the top ----
# We need to do this after all nets are registered
net_block = net_decl()
pcb.insert(1, "") # placeholder, we'll join later
pcb.append(")")
# Splice net declarations in after the setup block
result = "\n".join(pcb)
result = result.replace("(setup (pad_to_mask_clearance 0.05)",
f"{net_block}\n\n (setup (pad_to_mask_clearance 0.05)")
return result
# ============================================================
# SCHEMATIC GENERATOR
# ============================================================
def generate_schematic():
"""Generate a matching .kicad_sch with all components and nets."""
sch = []
sch.append(f"""(kicad_sch (version 20230121) (generator "bm_v5_sch")
(uuid "{uid()}")
(paper "A3")
(title_block
(title "Baby Mobile v5 — Schematic")
(date "2026-03-11") (rev "5.0")
(comment 1 "XIAO nRF52840 + IS25LP128F + TPS61220")
(comment 2 "Key-shaped panel with breakaway SOP adapters")
)
""")
# Lib symbols (using the v2 fix: no library prefix on sub-symbols)
sch.append(" (lib_symbols")
# Generic 2-pin (for R, C, L)
for name, ref in [("R","R"), ("C","C"), ("L","L")]:
sch.append(f"""
(symbol "{LIB}:{name}" (in_bom yes) (on_board yes)
(property "Reference" "{ref}" (at 2 0 0) (effects (font (size 1.27 1.27))))
(property "Value" "{name}" (at 2 -2 0) (effects (font (size 1.27 1.27))))
(property "Footprint" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
(property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
(symbol "{name}_0_1"
(rectangle (start -1 2.5) (end 1 -2.5) (stroke (width 0.254) (type default)) (fill (type background)))
)
(symbol "{name}_1_1"
(pin passive line (at 0 5 270) (length 2.5) (name "1" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
(pin passive line (at 0 -5 90) (length 2.5) (name "2" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
)
)""")
# TPS61220
sch.append(f"""
(symbol "{LIB}:TPS61220" (in_bom yes) (on_board yes)
(property "Reference" "U" (at 0 6 0) (effects (font (size 1.27 1.27))))
(property "Value" "TPS61220" (at 0 -6 0) (effects (font (size 1.27 1.27))))
(property "Footprint" "Package_TO_SOT_SMD:SOT-353_SC-70-5" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
(property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
(symbol "TPS61220_0_1"
(rectangle (start -7 5) (end 7 -5) (stroke (width 0.254) (type default)) (fill (type background)))
)
(symbol "TPS61220_1_1"
(pin power_in line (at -10 3 0) (length 3) (name "VIN" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
(pin power_in line (at -10 -3 0) (length 3) (name "GND" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
(pin input line (at 10 -3 180) (length 3) (name "EN" (effects (font (size 1 1)))) (number "3" (effects (font (size 1 1)))))
(pin power_out line (at 10 3 180) (length 3) (name "VOUT" (effects (font (size 1 1)))) (number "4" (effects (font (size 1 1)))))
(pin passive line (at 0 8 270) (length 3) (name "L" (effects (font (size 1 1)))) (number "5" (effects (font (size 1 1)))))
)
)""")
# IS25LP128F
sch.append(f"""
(symbol "{LIB}:IS25LP128F" (in_bom yes) (on_board yes)
(property "Reference" "U" (at 0 9 0) (effects (font (size 1.27 1.27))))
(property "Value" "IS25LP128F" (at 0 7 0) (effects (font (size 1.27 1.27))))
(property "Footprint" "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
(property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
(symbol "IS25LP128F_0_1"
(rectangle (start -7 6) (end 7 -6) (stroke (width 0.254) (type default)) (fill (type background)))
)
(symbol "IS25LP128F_1_1"
(pin input line (at -10 4 0) (length 3) (name "~{{CS}}" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
(pin output line (at -10 1.5 0) (length 3) (name "SO" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
(pin input line (at -10 -1.5 0) (length 3) (name "~{{WP}}" (effects (font (size 1 1)))) (number "3" (effects (font (size 1 1)))))
(pin power_in line (at -10 -4 0) (length 3) (name "GND" (effects (font (size 1 1)))) (number "4" (effects (font (size 1 1)))))
(pin input line (at 10 -4 180) (length 3) (name "SI" (effects (font (size 1 1)))) (number "5" (effects (font (size 1 1)))))
(pin input line (at 10 -1.5 180) (length 3) (name "SCLK" (effects (font (size 1 1)))) (number "6" (effects (font (size 1 1)))))
(pin input line (at 10 1.5 180) (length 3) (name "~{{HOLD}}" (effects (font (size 1 1)))) (number "7" (effects (font (size 1 1)))))
(pin power_in line (at 10 4 180) (length 3) (name "VCC" (effects (font (size 1 1)))) (number "8" (effects (font (size 1 1)))))
)
)""")
# FPC connector (generic N-pin)
for npins in [10, 20]:
sch.append(f"""
(symbol "{LIB}:FPC_{npins}" (in_bom yes) (on_board yes)
(property "Reference" "J" (at 0 {npins+2} 0) (effects (font (size 1.27 1.27))))
(property "Value" "FPC-{npins}" (at 0 {-npins-2} 0) (effects (font (size 1.27 1.27))))
(property "Footprint" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
(property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
(symbol "FPC_{npins}_0_1"
(rectangle (start -3 {npins}) (end 3 {-npins}) (stroke (width 0.254) (type default)) (fill (type background)))
)
(symbol "FPC_{npins}_1_1"
""")
for i in range(npins):
y = npins - 1 - i * 2
sch.append(f' (pin passive line (at -6 {y} 0) (length 3) (name "P{i+1}" (effects (font (size 1 1)))) (number "{i+1}" (effects (font (size 1 1)))))')
sch.append(" )\n )")
# XIAO module symbol
sch.append(f"""
(symbol "{LIB}:XIAO_nRF52840" (in_bom yes) (on_board yes)
(property "Reference" "U" (at 0 22 0) (effects (font (size 1.27 1.27))))
(property "Value" "XIAO_nRF52840" (at 0 20 0) (effects (font (size 1.27 1.27))))
(property "Footprint" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
(property "Datasheet" "" (at 0 0 0) (effects (font (size 1.27 1.27)) hide))
(symbol "XIAO_nRF52840_0_1"
(rectangle (start -12 19) (end 12 -19) (stroke (width 0.254) (type default)) (fill (type background)))
)
(symbol "XIAO_nRF52840_1_1"
(pin bidirectional line (at -15 15 0) (length 3) (name "D0" (effects (font (size 1 1)))) (number "1" (effects (font (size 1 1)))))
(pin bidirectional line (at -15 12.5 0) (length 3) (name "D1" (effects (font (size 1 1)))) (number "2" (effects (font (size 1 1)))))
(pin bidirectional line (at -15 10 0) (length 3) (name "D2" (effects (font (size 1 1)))) (number "3" (effects (font (size 1 1)))))
(pin bidirectional line (at -15 7.5 0) (length 3) (name "D3" (effects (font (size 1 1)))) (number "4" (effects (font (size 1 1)))))
(pin bidirectional line (at -15 5 0) (length 3) (name "D4" (effects (font (size 1 1)))) (number "5" (effects (font (size 1 1)))))
(pin bidirectional line (at -15 2.5 0) (length 3) (name "D5" (effects (font (size 1 1)))) (number "6" (effects (font (size 1 1)))))
(pin bidirectional line (at -15 0 0) (length 3) (name "D6" (effects (font (size 1 1)))) (number "7" (effects (font (size 1 1)))))
(pin bidirectional line (at 15 15 180) (length 3) (name "D10" (effects (font (size 1 1)))) (number "8" (effects (font (size 1 1)))))
(pin bidirectional line (at 15 12.5 180) (length 3) (name "D9/SCK" (effects (font (size 1 1)))) (number "9" (effects (font (size 1 1)))))
(pin bidirectional line (at 15 10 180) (length 3) (name "D8/MOSI" (effects (font (size 1 1)))) (number "10" (effects (font (size 1 1)))))
(pin bidirectional line (at 15 7.5 180) (length 3) (name "D7/MISO" (effects (font (size 1 1)))) (number "11" (effects (font (size 1 1)))))
(pin power_in line (at 15 2.5 180) (length 3) (name "3V3" (effects (font (size 1 1)))) (number "12" (effects (font (size 1 1)))))
(pin power_in line (at 15 0 180) (length 3) (name "GND" (effects (font (size 1 1)))) (number "13" (effects (font (size 1 1)))))
(pin power_in line (at 15 -2.5 180) (length 3) (name "5V" (effects (font (size 1 1)))) (number "14" (effects (font (size 1 1)))))
)
)""")
sch.append(" )") # end lib_symbols
# Component instances (placed with net labels for connectivity)
def inst(lib_id, ref, value, footprint, x, y, angle=0):
return f""" (symbol (lib_id "{LIB}:{lib_id}") (at {x} {y} {angle}) (unit 1)
(in_bom yes) (on_board yes) (dnp no)
(uuid "{uid()}")
(property "Reference" "{ref}" (at {x+3} {y-3} 0) (effects (font (size 1.27 1.27))))
(property "Value" "{value}" (at {x+3} {y+3} 0) (effects (font (size 1.27 1.27))))
(property "Footprint" "{footprint}" (at {x} {y} 0) (effects (font (size 1.27 1.27)) hide))
(property "Datasheet" "" (at {x} {y} 0) (effects (font (size 1.27 1.27)) hide))
)"""
def label(name, x, y):
return f' (label "{name}" (at {x} {y} 0) (effects (font (size 1.27 1.27))) (uuid "{uid()}"))'
# Place components
sch.append(inst("XIAO_nRF52840", "U3", "XIAO_nRF52840", "", 80, 80))
sch.append(inst("IS25LP128F", "U2", "IS25LP128F", "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm", 180, 60))
sch.append(inst("TPS61220", "U1", "TPS61220", "Package_TO_SOT_SMD:SOT-353_SC-70-5", 180, 130))
sch.append(inst("FPC_20", "J1", "FPC-20 Carrier", "", 80, 160))
sch.append(inst("R", "R1", "4.7K", "Resistor_SMD:R_0805_2012Metric", 140, 80))
sch.append(inst("C", "C5", "10nF", "Capacitor_SMD:C_0805_2012Metric", 150, 90))
sch.append(inst("R", "R2", "10K", "Resistor_SMD:R_0805_2012Metric", 210, 50))
sch.append(inst("C", "C3", "100nF", "Capacitor_SMD:C_0805_2012Metric", 210, 70))
sch.append(inst("L", "L1", "4.7uH", "Inductor_SMD:L_0805_2012Metric", 180, 115))
sch.append(inst("C", "C1", "10uF", "Capacitor_SMD:C_0805_2012Metric", 160, 140))
sch.append(inst("C", "C2", "10uF", "Capacitor_SMD:C_0805_2012Metric", 200, 140))
# Adapter schematics (separate sections for clarity)
sch.append(inst("FPC_10", "J2", "FPC-10 SOP-8", "", 280, 80))
sch.append(inst("FPC_20", "J3", "FPC-20 SOP-16N", "", 280, 140))
sch.append(inst("FPC_20", "J4", "FPC-20 SOP-16W", "", 280, 200))
# Net labels (connecting everything logically)
# XIAO to SPI flash
labels = [
("SPI_SCK", 95, 67.5), ("SPI_SCK", 190, 58.5),
("SPI_MOSI", 95, 70), ("SPI_MOSI", 190, 56),
("SPI_MISO", 95, 72.5), ("SPI_MISO", 170, 61.5),
("FLASH_CS", 170, 64), ("FLASH_CS", 210, 45),
("C_3V3", 95, 77.5), ("C_3V3", 190, 64), ("C_3V3", 190, 133),
("GND", 95, 80), ("GND", 170, 56), ("GND", 170, 127),
# XIAO signals to carrier FPC
("C_S1", 65, 65), ("C_S2", 65, 67.5), ("C_S3", 65, 70),
("C_S4", 65, 72.5), ("C_S5", 65, 75), ("C_S6", 65, 77.5),
("C_S7", 65, 80), ("C_S8", 95, 65),
("C_S8", 130, 80), # to R1
("AUDIO_FILT", 150, 80),
# Boost
("C_VBAT", 170, 133), ("C_VBAT", 180, 110),
("BOOST_SW", 180, 122), ("BOOST_SW", 180, 120),
]
for name, x, y in labels:
sch.append(label(name, x, y))
# Text notes
notes = [
(40, 30, "CARRIER: XIAO nRF52840 + IS25LP128F (16MB) + TPS61220 (3.3V boost)"),
(40, 35, "FPC-20 cable connects carrier to one of the SOP adapter boards"),
(250, 30, "ADAPTERS: Snap-off castellated SOP footprints"),
(250, 35, "Each has its own FPC connector + unique net names"),
]
for x, y, text in notes:
sch.append(f' (text "{text}" (at {x} {y} 0) (effects (font (size 1.5 1.5)) (justify left)) (uuid "{uid()}"))')
sch.append(")")
return "\n".join(sch)
# ============================================================
# MAIN
# ============================================================
if __name__ == "__main__":
outdir = os.path.dirname(os.path.abspath(__file__))
# Generate PCB
pcb_text = generate_pcb()
pcb_path = os.path.join(outdir, "baby-mobile-v5.kicad_pcb")
with open(pcb_path, "w") as f:
f.write(pcb_text)
print(f"PCB: {pcb_path} ({len(pcb_text)} bytes)")
# Generate Schematic
sch_text = generate_schematic()
sch_path = os.path.join(outdir, "baby-mobile-v5.kicad_sch")
with open(sch_path, "w") as f:
f.write(sch_text)
print(f"SCH: {sch_path} ({len(sch_text)} bytes)")
# Generate Project
proj = json.dumps({
"meta": {"filename": "baby-mobile-v5.kicad_pro", "version": 1},
"board": {"design_settings": {"rules": {"min_track_width": 0.15, "min_via_diameter": 0.4}}},
"net_settings": {"classes": [
{"name": "Default", "clearance": 0.15, "track_width": 0.25},
{"name": "Power", "clearance": 0.2, "track_width": 0.5},
]},
}, indent=2)
with open(os.path.join(outdir, "baby-mobile-v5.kicad_pro"), "w") as f:
f.write(proj)
print(f"\n{len(NETS)} unique nets registered:")
print(f" Carrier: C_S1-8, C_VBAT, C_3V3, SPI_*, FLASH_CS, BOOST_SW, AUDIO_FILT")
print(f" SOP-8: A8_P1-8, A8_VBAT, A8_GND, FPC_A8_1-10")
print(f" SOP-16N: A16N_P1-16, A16N_VBAT, A16N_GND, FPC_A16N_1-20")
print(f" SOP-16W: A16W_P1-16, A16W_VBAT, A16W_GND, FPC_A16W_1-20")
print(f" No shared nets between carrier and adapters (FPC bridges them)")
print(f"\nKey-shaped board:")
print(f" Head (carrier): {CARRIER_W}×{CARRIER_H}mm")
print(f" Stem (adapters): {STEM_W}mm wide, stacked SOP-8 + SOP-16N + SOP-16W")
print(f" XIAO: USB-C on top, rows {XIAO_ROW_SPAN}mm apart, pads extended to {CARRIER_PAD_SPAN}mm")