aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--demo/kicad/bom/A64-OlinuXino_Rev_C.xml211
-rw-r--r--demo/notebooks/BOM Demo.ipynb1400
-rw-r--r--requirements.txt5
-rw-r--r--src/ee/kicad/bom/__init__.py77
-rw-r--r--src/ee/kicad/bom_tool/__init__.py110
-rw-r--r--src/ee/kicad/bom_tool/predef.py6
-rw-r--r--test/test_bom.py41
-rw-r--r--test/test_digikey.py16
-rw-r--r--tox.ini3
10 files changed, 1861 insertions, 9 deletions
diff --git a/.gitignore b/.gitignore
index 53b822f..3b76ab3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,4 @@ demo/*/*.raw
demo/*/*.log
.tox
+.ipynb*/
diff --git a/demo/kicad/bom/A64-OlinuXino_Rev_C.xml b/demo/kicad/bom/A64-OlinuXino_Rev_C.xml
index be920c1..39d4006 100644
--- a/demo/kicad/bom/A64-OlinuXino_Rev_C.xml
+++ b/demo/kicad/bom/A64-OlinuXino_Rev_C.xml
@@ -1,7 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
+<!--
+Downloaded from Github: OLIMEX/OLINUXINO/HARDWARE/A64-OLinuXino/A64-OLinuXino_Rev_C/A64-OlinuXino_Rev_C.sch.
+
+Slightly modified to create more interesting data.
+-->
<export version="D">
<design>
- <source>/home/trygvis/dev/com.github/OLIMEX/OLINUXINO/HARDWARE/A64-OLinuXino/A64-OLinuXino_Rev_C/A64-OlinuXino_Rev_C.sch</source>
+ <source>/wat/OLIMEX/OLINUXINO/HARDWARE/A64-OLinuXino/A64-OLinuXino_Rev_C/A64-OlinuXino_Rev_C.sch</source>
<date>ma. 07. aug. 2017 kl. 22.36 +0200</date>
<tool>Eeschema 4.0.6+dfsg1-1</tool>
<sheet number="1" name="/" tstamps="/">
@@ -64,6 +69,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/" tstamps="/"/>
<tstamp>561E4D88</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C28">
<value>100nF/10V/10%</value>
@@ -71,6 +80,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/" tstamps="/"/>
<tstamp>561E4EAA</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C27">
<value>1uF/10V/10%</value>
@@ -92,6 +105,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/" tstamps="/"/>
<tstamp>561E4E92</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C29">
<value>100nF/10V/10%</value>
@@ -99,6 +116,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/" tstamps="/"/>
<tstamp>561E57FE</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="R7">
<value>243R/1%</value>
@@ -113,6 +134,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/" tstamps="/"/>
<tstamp>561E6CD8</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="R3">
<value>22R</value>
@@ -162,6 +187,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/" tstamps="/"/>
<tstamp>562050DC</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C23">
<value>100nF/10V/10%</value>
@@ -169,6 +198,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/" tstamps="/"/>
<tstamp>5620575E</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C24">
<value>100nF/10V/10%</value>
@@ -176,6 +209,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/" tstamps="/"/>
<tstamp>56207D58</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C12">
<value>100nF/10V/10%</value>
@@ -183,6 +220,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/" tstamps="/"/>
<tstamp>56208905</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C13">
<value>100nF/10V/10%</value>
@@ -190,6 +231,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/" tstamps="/"/>
<tstamp>5620A865</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C14">
<value>100nF/10V/10%</value>
@@ -197,6 +242,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/" tstamps="/"/>
<tstamp>5620AB64</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C15">
<value>100nF/10V/10%</value>
@@ -204,6 +253,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/" tstamps="/"/>
<tstamp>5620ADAF</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C16">
<value>10uF/6.3V/20%</value>
@@ -218,6 +271,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/" tstamps="/"/>
<tstamp>5621202A</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C2">
<value>100nF/10V/10%</value>
@@ -225,6 +282,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/" tstamps="/"/>
<tstamp>56212030</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C3">
<value>100nF/10V/10%</value>
@@ -232,6 +293,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/" tstamps="/"/>
<tstamp>56212036</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C4">
<value>100nF/10V/10%</value>
@@ -239,6 +304,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/" tstamps="/"/>
<tstamp>5621203C</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C5">
<value>10uF/6.3V/20%</value>
@@ -267,6 +336,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/" tstamps="/"/>
<tstamp>56217802</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C33">
<value>100nF/10V/10%</value>
@@ -274,6 +347,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/" tstamps="/"/>
<tstamp>56217880</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="R10">
<value>243R/1%</value>
@@ -295,6 +372,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/" tstamps="/"/>
<tstamp>5621CFF8</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C17">
<value>100nF/10V/10%</value>
@@ -302,6 +383,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/" tstamps="/"/>
<tstamp>5621CFFE</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C18">
<value>100nF/10V/10%</value>
@@ -309,6 +394,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/" tstamps="/"/>
<tstamp>5621D004</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C19">
<value>100nF/10V/10%</value>
@@ -316,6 +405,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/" tstamps="/"/>
<tstamp>5621D00A</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C20">
<value>100nF/10V/10%</value>
@@ -323,6 +416,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/" tstamps="/"/>
<tstamp>5621D010</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C21">
<value>10uF/6.3V/20%</value>
@@ -337,6 +434,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/" tstamps="/"/>
<tstamp>5621D028</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C7">
<value>100nF/10V/10%</value>
@@ -344,6 +445,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/" tstamps="/"/>
<tstamp>5621D02E</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C8">
<value>100nF/10V/10%</value>
@@ -351,6 +456,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/" tstamps="/"/>
<tstamp>5621D034</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C9">
<value>100nF/10V/10%</value>
@@ -358,6 +467,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/" tstamps="/"/>
<tstamp>5621D03A</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C10">
<value>10uF/6.3V/20%</value>
@@ -481,6 +594,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/>
<tstamp>562677EF</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C38">
<value>1uF/10V/10%</value>
@@ -495,6 +612,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/>
<tstamp>5624F9D4</tstamp>
+ <fields>
+ <field name="digikey">587-1819-2-ND</field>
+ <field name="part">JMK063BJ224MP-F</field>
+ </fields>
</comp>
<comp ref="C35">
<value>100nF/10V/10%</value>
@@ -502,6 +623,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/>
<tstamp>5624F9CD</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C43">
<value>1uF/10V/10%</value>
@@ -516,6 +641,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/>
<tstamp>56251915</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="L1">
<value>FB0805/600R/2A</value>
@@ -586,6 +715,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/>
<tstamp>56274CAA</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="R15">
<value>NA(10k)</value>
@@ -677,6 +810,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/>
<tstamp>562CBE9C</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C49">
<value>10uF/6.3V/20%</value>
@@ -691,6 +828,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/>
<tstamp>562D84AB</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C53">
<value>10uF/6.3V/20%</value>
@@ -754,6 +895,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/>
<tstamp>56299DA1</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C60">
<value>100nF/10V/10%</value>
@@ -761,6 +906,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/>
<tstamp>5629AC30</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="R26">
<value>2k/1%</value>
@@ -824,6 +973,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/>
<tstamp>562D6A02</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C66">
<value>100nF/10V/10%</value>
@@ -831,6 +984,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/>
<tstamp>562D74CB</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="R35">
<value>100k</value>
@@ -880,6 +1037,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/>
<tstamp>56326ED5</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C47">
<value>10uF/6.3V/20%</value>
@@ -992,6 +1153,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/>
<tstamp>57BB8E9B</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C58">
<value>100nF/10V/10%</value>
@@ -999,6 +1164,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/>
<tstamp>57BB8EA1</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C82">
<value>100nF/10V/10%</value>
@@ -1006,6 +1175,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/>
<tstamp>57BBB6F8</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C83">
<value>100nF/10V/10%</value>
@@ -1013,6 +1186,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/>
<tstamp>57BBB931</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C84">
<value>33pF/50V/5%</value>
@@ -1034,6 +1211,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/>
<tstamp>57BC455C</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C87">
<value>100nF/10V/10%</value>
@@ -1041,6 +1222,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/NAND Flash , eMMC, T-Card and Audio/" tstamps="/5623625A/"/>
<tstamp>57BC4562</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="GNDA1">
<value>TESTPAD</value>
@@ -1181,6 +1366,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/USB&amp;HDMI,WiFi&amp;BT,Ethernet,LCD/" tstamps="/563556AE/"/>
<tstamp>562AFE85</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="USB-OTG1">
<value>MICRO_USB/MISB-SWMM-5B_LF</value>
@@ -1216,6 +1405,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/USB&amp;HDMI,WiFi&amp;BT,Ethernet,LCD/" tstamps="/563556AE/"/>
<tstamp>562A7F62</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="C70">
<value>NA(47uF/6.3V/20%)</value>
@@ -1265,6 +1458,10 @@
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/USB&amp;HDMI,WiFi&amp;BT,Ethernet,LCD/" tstamps="/563556AE/"/>
<tstamp>562C1028</tstamp>
+ <fields>
+ <field name="digikey">478-1129-2-ND</field>
+ <field name="part">0402ZD104KAT2A</field>
+ </fields>
</comp>
<comp ref="R40">
<value>10k</value>
@@ -1752,6 +1949,8 @@
<field name="Fieldname 1">Value 1</field>
<field name="Fieldname2">Value2</field>
<field name="Fieldname3">Value3</field>
+ <field name="digikey">587-1819-2-ND</field>
+ <field name="part">JMK063BJ224MP-F</field>
</fields>
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/USB&amp;HDMI,WiFi&amp;BT,Ethernet,LCD/" tstamps="/563556AE/"/>
@@ -1819,6 +2018,8 @@
<field name="Fieldname 1">Value 1</field>
<field name="Fieldname2">Value2</field>
<field name="Fieldname3">Value3</field>
+ <field name="digikey">587-1819-2-ND</field>
+ <field name="part">JMK063BJ224MP-F</field>
</fields>
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/USB&amp;HDMI,WiFi&amp;BT,Ethernet,LCD/" tstamps="/563556AE/"/>
@@ -1843,6 +2044,8 @@
<field name="Fieldname 1">Value 1</field>
<field name="Fieldname2">Value2</field>
<field name="Fieldname3">Value3</field>
+ <field name="digikey">587-1819-2-ND</field>
+ <field name="part">JMK063BJ224MP-F</field>
</fields>
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/USB&amp;HDMI,WiFi&amp;BT,Ethernet,LCD/" tstamps="/563556AE/"/>
@@ -2013,6 +2216,8 @@
<field name="Fieldname 1">Value 1</field>
<field name="Fieldname2">Value2</field>
<field name="Fieldname3">Value3</field>
+ <field name="digikey">587-1819-2-ND</field>
+ <field name="part">JMK063BJ224MP-F</field>
</fields>
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/USB&amp;HDMI,WiFi&amp;BT,Ethernet,LCD/" tstamps="/563556AE/"/>
@@ -2049,6 +2254,8 @@
<field name="Fieldname 1">Value 1</field>
<field name="Fieldname2">Value2</field>
<field name="Fieldname3">Value3</field>
+ <field name="digikey">587-1819-2-ND</field>
+ <field name="part">JMK063BJ224MP-F</field>
</fields>
<libsource lib="A64-OlinuXino_Rev_C-cache" part="C"/>
<sheetpath names="/USB&amp;HDMI,WiFi&amp;BT,Ethernet,LCD/" tstamps="/563556AE/"/>
@@ -4800,7 +5007,7 @@
</libparts>
<libraries>
<library logical="A64-OlinuXino_Rev_C-cache">
- <uri>/home/trygvis/dev/com.github/OLIMEX/OLINUXINO/HARDWARE/A64-OLinuXino/A64-OLinuXino_Rev_C/A64-OlinuXino_Rev_C-cache.lib</uri>
+ <uri>/wat/OLIMEX/OLINUXINO/HARDWARE/A64-OLinuXino/A64-OLinuXino_Rev_C/A64-OlinuXino_Rev_C-cache.lib</uri>
</library>
</libraries>
<nets>
diff --git a/demo/notebooks/BOM Demo.ipynb b/demo/notebooks/BOM Demo.ipynb
new file mode 100644
index 0000000..f9d6faa
--- /dev/null
+++ b/demo/notebooks/BOM Demo.ipynb
@@ -0,0 +1,1400 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Notebook configuration"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 115,
+ "metadata": {},
+ "outputs": [
+ {
+ "name": "stdout",
+ "output_type": "stream",
+ "text": [
+ "The autoreload extension is already loaded. To reload it, use:\n",
+ " %reload_ext autoreload\n"
+ ]
+ }
+ ],
+ "source": [
+ "%load_ext autoreload\n",
+ "%autoreload 2\n",
+ "\n",
+ "%aimport ee.kicad.bom\n",
+ "%aimport ee.kicad.bom.io\n",
+ "\n",
+ "from ee.kicad.bom import *\n",
+ "from ee.kicad.bom.io import read_bom"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 170,
+ "metadata": {
+ "collapsed": true
+ },
+ "outputs": [],
+ "source": [
+ "bom_file = \"../kicad/bom/A64-OlinuXino_Rev_C.xml\"\n",
+ "bom_file = \"../kicad/bom/gw.xml\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Load the BOM, sort by reference"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 199,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [],
+ "source": [
+ "import os\n",
+ "import os.path\n",
+ "import pandas\n",
+ "\n",
+ "bom = read_bom(bom_file).to_pandas()"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# Sort a BOM"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 200,
+ "metadata": {
+ "scrolled": true
+ },
+ "outputs": [],
+ "source": [
+ "f=lambda x: pandas.Series(data=x, index=['ref_name', 'ref_num', 'ref_rest'])\n",
+ "sort_fields=bom[\"ref\"].map(ee.kicad.bom.split_ref).apply(f)\n",
+ "\n",
+ "bom=pandas.concat([bom, sort_fields], axis=1, join_axes=[bom.index])\n",
+ "bom=bom.sort_values(by=list(sort_fields.columns))\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 201,
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/html": [
+ "<div>\n",
+ "<style>\n",
+ " .dataframe thead tr:only-child th {\n",
+ " text-align: right;\n",
+ " }\n",
+ "\n",
+ " .dataframe thead th {\n",
+ " text-align: left;\n",
+ " }\n",
+ "\n",
+ " .dataframe tbody tr th {\n",
+ " vertical-align: top;\n",
+ " }\n",
+ "</style>\n",
+ "<table border=\"1\" class=\"dataframe\">\n",
+ " <thead>\n",
+ " <tr style=\"text-align: right;\">\n",
+ " <th></th>\n",
+ " <th>Capacitance</th>\n",
+ " <th>Color</th>\n",
+ " <th>Description</th>\n",
+ " <th>Frequency</th>\n",
+ " <th>Impedance</th>\n",
+ " <th>Inductance</th>\n",
+ " <th>Manufacturer</th>\n",
+ " <th>Part Number</th>\n",
+ " <th>Resistance</th>\n",
+ " <th>ref</th>\n",
+ " <th>value</th>\n",
+ " <th>ref_name</th>\n",
+ " <th>ref_num</th>\n",
+ " <th>ref_rest</th>\n",
+ " </tr>\n",
+ " </thead>\n",
+ " <tbody>\n",
+ " <tr>\n",
+ " <th>C1</th>\n",
+ " <td>1.0uF</td>\n",
+ " <td>None</td>\n",
+ " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Murata</td>\n",
+ " <td>GRM153R61A105ME95</td>\n",
+ " <td>None</td>\n",
+ " <td>C1</td>\n",
+ " <td>C0402_1u_10Vdc_X5R</td>\n",
+ " <td>C</td>\n",
+ " <td>1</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>C2</th>\n",
+ " <td>1.0uF</td>\n",
+ " <td>None</td>\n",
+ " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Murata</td>\n",
+ " <td>GRM153R61A105ME95</td>\n",
+ " <td>None</td>\n",
+ " <td>C2</td>\n",
+ " <td>C0402_1u_10Vdc_X5R</td>\n",
+ " <td>C</td>\n",
+ " <td>2</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>C3</th>\n",
+ " <td>1.0uF</td>\n",
+ " <td>None</td>\n",
+ " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Murata</td>\n",
+ " <td>GRM153R61A105ME95</td>\n",
+ " <td>None</td>\n",
+ " <td>C3</td>\n",
+ " <td>C0402_1u_10Vdc_X5R</td>\n",
+ " <td>C</td>\n",
+ " <td>3</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>C4</th>\n",
+ " <td>1.0uF</td>\n",
+ " <td>None</td>\n",
+ " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Murata</td>\n",
+ " <td>GRM153R61A105ME95</td>\n",
+ " <td>None</td>\n",
+ " <td>C4</td>\n",
+ " <td>C0402_1u_10Vdc_X5R</td>\n",
+ " <td>C</td>\n",
+ " <td>4</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>C5</th>\n",
+ " <td>1.0uF</td>\n",
+ " <td>None</td>\n",
+ " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Murata</td>\n",
+ " <td>GRM153R61A105ME95</td>\n",
+ " <td>None</td>\n",
+ " <td>C5</td>\n",
+ " <td>C0402_1u_10Vdc_X5R</td>\n",
+ " <td>C</td>\n",
+ " <td>5</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>C6</th>\n",
+ " <td>1.0uF</td>\n",
+ " <td>None</td>\n",
+ " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Murata</td>\n",
+ " <td>GRM153R61A105ME95</td>\n",
+ " <td>None</td>\n",
+ " <td>C6</td>\n",
+ " <td>C0402_1u_10Vdc_X5R</td>\n",
+ " <td>C</td>\n",
+ " <td>6</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>C7</th>\n",
+ " <td>1.0uF</td>\n",
+ " <td>None</td>\n",
+ " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Murata</td>\n",
+ " <td>GRM153R61A105ME95</td>\n",
+ " <td>None</td>\n",
+ " <td>C7</td>\n",
+ " <td>C0402_1u_10Vdc_X5R</td>\n",
+ " <td>C</td>\n",
+ " <td>7</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>C8</th>\n",
+ " <td>1.0uF</td>\n",
+ " <td>None</td>\n",
+ " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Murata</td>\n",
+ " <td>GRM153R61A105ME95</td>\n",
+ " <td>None</td>\n",
+ " <td>C8</td>\n",
+ " <td>C0402_1u_10Vdc_X5R</td>\n",
+ " <td>C</td>\n",
+ " <td>8</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>C9</th>\n",
+ " <td>1.0uF</td>\n",
+ " <td>None</td>\n",
+ " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Murata</td>\n",
+ " <td>GRM153R61A105ME95</td>\n",
+ " <td>None</td>\n",
+ " <td>C9</td>\n",
+ " <td>C0402_1u_10Vdc_X5R</td>\n",
+ " <td>C</td>\n",
+ " <td>9</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>C10</th>\n",
+ " <td>4.7uF</td>\n",
+ " <td>None</td>\n",
+ " <td>4.7uF, 6.3Vdc, ±20%, X5R</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Murata</td>\n",
+ " <td>GRM185R60J475ME15</td>\n",
+ " <td>None</td>\n",
+ " <td>C10</td>\n",
+ " <td>C0603_4u7_6.3Vdc_X5R</td>\n",
+ " <td>C</td>\n",
+ " <td>10</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>C11</th>\n",
+ " <td>4.7uF</td>\n",
+ " <td>None</td>\n",
+ " <td>4.7uF, 6.3Vdc, ±20%, X5R</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Murata</td>\n",
+ " <td>GRM185R60J475ME15</td>\n",
+ " <td>None</td>\n",
+ " <td>C11</td>\n",
+ " <td>C0603_4u7_6.3Vdc_X5R</td>\n",
+ " <td>C</td>\n",
+ " <td>11</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>C12</th>\n",
+ " <td>4.7uF</td>\n",
+ " <td>None</td>\n",
+ " <td>4.7uF, 6.3Vdc, ±20%, X5R</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Murata</td>\n",
+ " <td>GRM185R60J475ME15</td>\n",
+ " <td>None</td>\n",
+ " <td>C12</td>\n",
+ " <td>C0603_4u7_6.3Vdc_X5R</td>\n",
+ " <td>C</td>\n",
+ " <td>12</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>C13</th>\n",
+ " <td>1.0uF</td>\n",
+ " <td>None</td>\n",
+ " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Murata</td>\n",
+ " <td>GRM153R61A105ME95</td>\n",
+ " <td>None</td>\n",
+ " <td>C13</td>\n",
+ " <td>C0402_1u_10Vdc_X5R</td>\n",
+ " <td>C</td>\n",
+ " <td>13</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>C14</th>\n",
+ " <td>1.0uF</td>\n",
+ " <td>None</td>\n",
+ " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Murata</td>\n",
+ " <td>GRM153R61A105ME95</td>\n",
+ " <td>None</td>\n",
+ " <td>C14</td>\n",
+ " <td>C0402_1u_10Vdc_X5R</td>\n",
+ " <td>C</td>\n",
+ " <td>14</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>C15</th>\n",
+ " <td>10000pF</td>\n",
+ " <td>None</td>\n",
+ " <td>10000pF, 10Vdc, ±10%, X5R</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Murata</td>\n",
+ " <td>GRM155R61A103KA01</td>\n",
+ " <td>None</td>\n",
+ " <td>C15</td>\n",
+ " <td>C0402_10n_10Vdc_X5R</td>\n",
+ " <td>C</td>\n",
+ " <td>15</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>C16</th>\n",
+ " <td>10000pF</td>\n",
+ " <td>None</td>\n",
+ " <td>10000pF, 10Vdc, ±10%, X5R</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Murata</td>\n",
+ " <td>GRM155R61A103KA01</td>\n",
+ " <td>None</td>\n",
+ " <td>C16</td>\n",
+ " <td>C0402_10n_10Vdc_X5R</td>\n",
+ " <td>C</td>\n",
+ " <td>16</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>C17</th>\n",
+ " <td>10000pF</td>\n",
+ " <td>None</td>\n",
+ " <td>10000pF, 10Vdc, ±10%, X5R</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Murata</td>\n",
+ " <td>GRM155R61A103KA01</td>\n",
+ " <td>None</td>\n",
+ " <td>C17</td>\n",
+ " <td>C0402_10n_10Vdc_X5R</td>\n",
+ " <td>C</td>\n",
+ " <td>17</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>C18</th>\n",
+ " <td>1.0uF</td>\n",
+ " <td>None</td>\n",
+ " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Murata</td>\n",
+ " <td>GRM153R61A105ME95</td>\n",
+ " <td>None</td>\n",
+ " <td>C18</td>\n",
+ " <td>C0402_1u_10Vdc_X5R</td>\n",
+ " <td>C</td>\n",
+ " <td>18</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>C19</th>\n",
+ " <td>1.0uF</td>\n",
+ " <td>None</td>\n",
+ " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Murata</td>\n",
+ " <td>GRM153R61A105ME95</td>\n",
+ " <td>None</td>\n",
+ " <td>C19</td>\n",
+ " <td>C0402_1u_10Vdc_X5R</td>\n",
+ " <td>C</td>\n",
+ " <td>19</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>C20</th>\n",
+ " <td>1.0uF</td>\n",
+ " <td>None</td>\n",
+ " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Murata</td>\n",
+ " <td>GRM153R61A105ME95</td>\n",
+ " <td>None</td>\n",
+ " <td>C20</td>\n",
+ " <td>C0402_1u_10Vdc_X5R</td>\n",
+ " <td>C</td>\n",
+ " <td>20</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>C21</th>\n",
+ " <td>1.0uF</td>\n",
+ " <td>None</td>\n",
+ " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Murata</td>\n",
+ " <td>GRM153R61A105ME95</td>\n",
+ " <td>None</td>\n",
+ " <td>C21</td>\n",
+ " <td>C0402_1u_10Vdc_X5R</td>\n",
+ " <td>C</td>\n",
+ " <td>21</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>C22</th>\n",
+ " <td>10pF</td>\n",
+ " <td>None</td>\n",
+ " <td>10pF, 100Vdc, ±2%, C0G</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Murata</td>\n",
+ " <td>GRM1555C2A100GA01</td>\n",
+ " <td>None</td>\n",
+ " <td>C22</td>\n",
+ " <td>C0402_10p_100Vdc_C0G</td>\n",
+ " <td>C</td>\n",
+ " <td>22</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>C23</th>\n",
+ " <td>10pF</td>\n",
+ " <td>None</td>\n",
+ " <td>10pF, 100Vdc, ±2%, C0G</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Murata</td>\n",
+ " <td>GRM1555C2A100GA01</td>\n",
+ " <td>None</td>\n",
+ " <td>C23</td>\n",
+ " <td>C0402_10p_100Vdc_C0G</td>\n",
+ " <td>C</td>\n",
+ " <td>23</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>C24</th>\n",
+ " <td>10pF</td>\n",
+ " <td>None</td>\n",
+ " <td>10pF, 100Vdc, ±2%, C0G</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Murata</td>\n",
+ " <td>GRM1555C2A100GA01</td>\n",
+ " <td>None</td>\n",
+ " <td>C24</td>\n",
+ " <td>C0402_10p_100Vdc_C0G</td>\n",
+ " <td>C</td>\n",
+ " <td>24</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>C25</th>\n",
+ " <td>10pF</td>\n",
+ " <td>None</td>\n",
+ " <td>10pF, 100Vdc, ±2%, C0G</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Murata</td>\n",
+ " <td>GRM1555C2A100GA01</td>\n",
+ " <td>None</td>\n",
+ " <td>C25</td>\n",
+ " <td>C0402_10p_100Vdc_C0G</td>\n",
+ " <td>C</td>\n",
+ " <td>25</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>C26</th>\n",
+ " <td>10pF</td>\n",
+ " <td>None</td>\n",
+ " <td>10pF, 100Vdc, ±2%, C0G</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Murata</td>\n",
+ " <td>GRM1555C2A100GA01</td>\n",
+ " <td>None</td>\n",
+ " <td>C26</td>\n",
+ " <td>C0402_10p_100Vdc_C0G</td>\n",
+ " <td>C</td>\n",
+ " <td>26</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>C27</th>\n",
+ " <td>1.0uF</td>\n",
+ " <td>None</td>\n",
+ " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Murata</td>\n",
+ " <td>GRM153R61A105ME95</td>\n",
+ " <td>None</td>\n",
+ " <td>C27</td>\n",
+ " <td>C0402_1u_10Vdc_X5R</td>\n",
+ " <td>C</td>\n",
+ " <td>27</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>C28</th>\n",
+ " <td>15pF</td>\n",
+ " <td>None</td>\n",
+ " <td>15pF, 100Vdc, ±2%, C0G</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Murata</td>\n",
+ " <td>GRM1555C2A150GA01</td>\n",
+ " <td>None</td>\n",
+ " <td>C28</td>\n",
+ " <td>C0402_15p_100Vdc_C0G</td>\n",
+ " <td>C</td>\n",
+ " <td>28</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>C29</th>\n",
+ " <td>1.0uF</td>\n",
+ " <td>None</td>\n",
+ " <td>1.0uF, 10Vdc, ±20%, X5R</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Murata</td>\n",
+ " <td>GRM153R61A105ME95</td>\n",
+ " <td>None</td>\n",
+ " <td>C29</td>\n",
+ " <td>C0402_1u_10Vdc_X5R</td>\n",
+ " <td>C</td>\n",
+ " <td>29</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>C30</th>\n",
+ " <td>15pF</td>\n",
+ " <td>None</td>\n",
+ " <td>15pF, 100Vdc, ±2%, C0G</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Murata</td>\n",
+ " <td>GRM1555C2A150GA01</td>\n",
+ " <td>None</td>\n",
+ " <td>C30</td>\n",
+ " <td>C0402_15p_100Vdc_C0G</td>\n",
+ " <td>C</td>\n",
+ " <td>30</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>...</th>\n",
+ " <td>...</td>\n",
+ " <td>...</td>\n",
+ " <td>...</td>\n",
+ " <td>...</td>\n",
+ " <td>...</td>\n",
+ " <td>...</td>\n",
+ " <td>...</td>\n",
+ " <td>...</td>\n",
+ " <td>...</td>\n",
+ " <td>...</td>\n",
+ " <td>...</td>\n",
+ " <td>...</td>\n",
+ " <td>...</td>\n",
+ " <td>...</td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>R32</th>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>1.5k, ±1%, 0.063W</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Vishay</td>\n",
+ " <td>CRCW04021K50FKED</td>\n",
+ " <td>1.5k</td>\n",
+ " <td>R32</td>\n",
+ " <td>R0402_1k50</td>\n",
+ " <td>R</td>\n",
+ " <td>32</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>R33</th>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>10k, ±1%, 0.063W</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Vishay</td>\n",
+ " <td>CRCW040210K0FKED</td>\n",
+ " <td>10k</td>\n",
+ " <td>R33</td>\n",
+ " <td>R0402_10k</td>\n",
+ " <td>R</td>\n",
+ " <td>33</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>R34</th>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>330, ±1%, 0.063W</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Vishay</td>\n",
+ " <td>CRCW0402330RFKED</td>\n",
+ " <td>330</td>\n",
+ " <td>R34</td>\n",
+ " <td>R0402_330R</td>\n",
+ " <td>R</td>\n",
+ " <td>34</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>R35</th>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>330, ±1%, 0.063W</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Vishay</td>\n",
+ " <td>CRCW0402330RFKED</td>\n",
+ " <td>330</td>\n",
+ " <td>R35</td>\n",
+ " <td>R0402_330R</td>\n",
+ " <td>R</td>\n",
+ " <td>35</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>R36</th>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>10k, ±1%, 0.063W</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Vishay</td>\n",
+ " <td>CRCW040210K0FKED</td>\n",
+ " <td>10k</td>\n",
+ " <td>R36</td>\n",
+ " <td>R0402_10k</td>\n",
+ " <td>R</td>\n",
+ " <td>36</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>R37</th>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>100k, ±1%, 0.063W</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Vishay</td>\n",
+ " <td>CRCW0402100KFKED</td>\n",
+ " <td>100k</td>\n",
+ " <td>R37</td>\n",
+ " <td>R0402_100k</td>\n",
+ " <td>R</td>\n",
+ " <td>37</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>R38</th>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>100k, ±1%, 0.063W</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Vishay</td>\n",
+ " <td>CRCW0402100KFKED</td>\n",
+ " <td>100k</td>\n",
+ " <td>R38</td>\n",
+ " <td>R0402_100k</td>\n",
+ " <td>R</td>\n",
+ " <td>38</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>R39</th>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>100k, ±1%, 0.063W</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Vishay</td>\n",
+ " <td>CRCW0402100KFKED</td>\n",
+ " <td>100k</td>\n",
+ " <td>R39</td>\n",
+ " <td>R0402_100k</td>\n",
+ " <td>R</td>\n",
+ " <td>39</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>R40</th>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>100, ±1%, 0.063W</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Vishay</td>\n",
+ " <td>CRCW0402100RFKED</td>\n",
+ " <td>100</td>\n",
+ " <td>R40</td>\n",
+ " <td>R0402_100R</td>\n",
+ " <td>R</td>\n",
+ " <td>40</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>R41</th>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>100, ±1%, 0.063W</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Vishay</td>\n",
+ " <td>CRCW0402100RFKED</td>\n",
+ " <td>100</td>\n",
+ " <td>R41</td>\n",
+ " <td>R0402_100R</td>\n",
+ " <td>R</td>\n",
+ " <td>41</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>R42</th>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>39, ±1%, 0.063W</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Vishay</td>\n",
+ " <td>CRCW040239R0FKED</td>\n",
+ " <td>39</td>\n",
+ " <td>R42</td>\n",
+ " <td>R0402_39R</td>\n",
+ " <td>R</td>\n",
+ " <td>42</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>R43</th>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>39, ±1%, 0.063W</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Vishay</td>\n",
+ " <td>CRCW040239R0FKED</td>\n",
+ " <td>39</td>\n",
+ " <td>R43</td>\n",
+ " <td>R0402_39R</td>\n",
+ " <td>R</td>\n",
+ " <td>43</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>R44</th>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>10k, ±1%, 0.063W</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Vishay</td>\n",
+ " <td>CRCW040210K0FKED</td>\n",
+ " <td>10k</td>\n",
+ " <td>R44</td>\n",
+ " <td>R0402_10k</td>\n",
+ " <td>R</td>\n",
+ " <td>44</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>T1</th>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>T1</td>\n",
+ " <td>S558-5999-T7-F</td>\n",
+ " <td>T</td>\n",
+ " <td>1</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>U1</th>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>U1</td>\n",
+ " <td>AT91SAM9G25</td>\n",
+ " <td>U</td>\n",
+ " <td>1</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>U2</th>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>U2</td>\n",
+ " <td>USBLC6-4</td>\n",
+ " <td>U</td>\n",
+ " <td>2</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>U3</th>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>U3</td>\n",
+ " <td>CC2520</td>\n",
+ " <td>U</td>\n",
+ " <td>3</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>U4</th>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>U4</td>\n",
+ " <td>NCP360SNAET1G</td>\n",
+ " <td>U</td>\n",
+ " <td>4</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>U5</th>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>U5</td>\n",
+ " <td>TPS62742</td>\n",
+ " <td>U</td>\n",
+ " <td>5</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>U6</th>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>U6</td>\n",
+ " <td>MIC23254</td>\n",
+ " <td>U</td>\n",
+ " <td>6</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>U7</th>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>U7</td>\n",
+ " <td>IS46DR16640B</td>\n",
+ " <td>U</td>\n",
+ " <td>7</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>U8</th>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>U8</td>\n",
+ " <td>MX30LF1G08AA</td>\n",
+ " <td>U</td>\n",
+ " <td>8</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>U9</th>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>U9</td>\n",
+ " <td>LAN8710</td>\n",
+ " <td>U</td>\n",
+ " <td>9</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>U10</th>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>U10</td>\n",
+ " <td>USBLC6-4</td>\n",
+ " <td>U</td>\n",
+ " <td>10</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>U11</th>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>U11</td>\n",
+ " <td>LP3470M5-3.08</td>\n",
+ " <td>U</td>\n",
+ " <td>11</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>X1</th>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>f=12MHz, Stability:±150ppm, Tol:±50ppm,Load ca...</td>\n",
+ " <td>12MHz</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>NDK</td>\n",
+ " <td>NX3225GA-12.000M-STD-CRA-1</td>\n",
+ " <td>None</td>\n",
+ " <td>X1</td>\n",
+ " <td>NX3225GA-12.000M-STD-CRA-1</td>\n",
+ " <td>X</td>\n",
+ " <td>1</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>X2</th>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>f=32.768kHz, Stability:-, Tol:±20ppm,Load capa...</td>\n",
+ " <td>32.768kHz</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>NDK</td>\n",
+ " <td>NX2012SA-32.768K-STD-MUB-1</td>\n",
+ " <td>None</td>\n",
+ " <td>X2</td>\n",
+ " <td>NX2012SA-32.768K-STD-MUB-1</td>\n",
+ " <td>X</td>\n",
+ " <td>2</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>X3</th>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>f=32MHz, Stability:±10ppm, Tol:±10ppm,Load cap...</td>\n",
+ " <td>32MHz</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>NDK</td>\n",
+ " <td>NX2520SA-32.000000MHZ</td>\n",
+ " <td>None</td>\n",
+ " <td>X3</td>\n",
+ " <td>NX2520SA-32.000000MHZ</td>\n",
+ " <td>X</td>\n",
+ " <td>3</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>X4</th>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>f=25MHz, Stability:±25ppm, Tol:±15ppm,Load cap...</td>\n",
+ " <td>25MHz</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>NDK</td>\n",
+ " <td>NX2520SA-25.000M-STD-CSW-5</td>\n",
+ " <td>None</td>\n",
+ " <td>X4</td>\n",
+ " <td>NX2520SA-25.000M-STD-CSW-5</td>\n",
+ " <td>X</td>\n",
+ " <td>4</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " <tr>\n",
+ " <th>Z1</th>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>None</td>\n",
+ " <td>Z1</td>\n",
+ " <td>WLA.01</td>\n",
+ " <td>Z</td>\n",
+ " <td>1</td>\n",
+ " <td></td>\n",
+ " </tr>\n",
+ " </tbody>\n",
+ "</table>\n",
+ "<p>165 rows × 14 columns</p>\n",
+ "</div>"
+ ],
+ "text/plain": [
+ " Capacitance Color Description \\\n",
+ "C1 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n",
+ "C2 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n",
+ "C3 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n",
+ "C4 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n",
+ "C5 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n",
+ "C6 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n",
+ "C7 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n",
+ "C8 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n",
+ "C9 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n",
+ "C10 4.7uF None 4.7uF, 6.3Vdc, ±20%, X5R \n",
+ "C11 4.7uF None 4.7uF, 6.3Vdc, ±20%, X5R \n",
+ "C12 4.7uF None 4.7uF, 6.3Vdc, ±20%, X5R \n",
+ "C13 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n",
+ "C14 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n",
+ "C15 10000pF None 10000pF, 10Vdc, ±10%, X5R \n",
+ "C16 10000pF None 10000pF, 10Vdc, ±10%, X5R \n",
+ "C17 10000pF None 10000pF, 10Vdc, ±10%, X5R \n",
+ "C18 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n",
+ "C19 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n",
+ "C20 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n",
+ "C21 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n",
+ "C22 10pF None 10pF, 100Vdc, ±2%, C0G \n",
+ "C23 10pF None 10pF, 100Vdc, ±2%, C0G \n",
+ "C24 10pF None 10pF, 100Vdc, ±2%, C0G \n",
+ "C25 10pF None 10pF, 100Vdc, ±2%, C0G \n",
+ "C26 10pF None 10pF, 100Vdc, ±2%, C0G \n",
+ "C27 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n",
+ "C28 15pF None 15pF, 100Vdc, ±2%, C0G \n",
+ "C29 1.0uF None 1.0uF, 10Vdc, ±20%, X5R \n",
+ "C30 15pF None 15pF, 100Vdc, ±2%, C0G \n",
+ ".. ... ... ... \n",
+ "R32 None None 1.5k, ±1%, 0.063W \n",
+ "R33 None None 10k, ±1%, 0.063W \n",
+ "R34 None None 330, ±1%, 0.063W \n",
+ "R35 None None 330, ±1%, 0.063W \n",
+ "R36 None None 10k, ±1%, 0.063W \n",
+ "R37 None None 100k, ±1%, 0.063W \n",
+ "R38 None None 100k, ±1%, 0.063W \n",
+ "R39 None None 100k, ±1%, 0.063W \n",
+ "R40 None None 100, ±1%, 0.063W \n",
+ "R41 None None 100, ±1%, 0.063W \n",
+ "R42 None None 39, ±1%, 0.063W \n",
+ "R43 None None 39, ±1%, 0.063W \n",
+ "R44 None None 10k, ±1%, 0.063W \n",
+ "T1 None None None \n",
+ "U1 None None None \n",
+ "U2 None None None \n",
+ "U3 None None None \n",
+ "U4 None None None \n",
+ "U5 None None None \n",
+ "U6 None None None \n",
+ "U7 None None None \n",
+ "U8 None None None \n",
+ "U9 None None None \n",
+ "U10 None None None \n",
+ "U11 None None None \n",
+ "X1 None None f=12MHz, Stability:±150ppm, Tol:±50ppm,Load ca... \n",
+ "X2 None None f=32.768kHz, Stability:-, Tol:±20ppm,Load capa... \n",
+ "X3 None None f=32MHz, Stability:±10ppm, Tol:±10ppm,Load cap... \n",
+ "X4 None None f=25MHz, Stability:±25ppm, Tol:±15ppm,Load cap... \n",
+ "Z1 None None None \n",
+ "\n",
+ " Frequency Impedance Inductance Manufacturer Part Number \\\n",
+ "C1 None None None Murata GRM153R61A105ME95 \n",
+ "C2 None None None Murata GRM153R61A105ME95 \n",
+ "C3 None None None Murata GRM153R61A105ME95 \n",
+ "C4 None None None Murata GRM153R61A105ME95 \n",
+ "C5 None None None Murata GRM153R61A105ME95 \n",
+ "C6 None None None Murata GRM153R61A105ME95 \n",
+ "C7 None None None Murata GRM153R61A105ME95 \n",
+ "C8 None None None Murata GRM153R61A105ME95 \n",
+ "C9 None None None Murata GRM153R61A105ME95 \n",
+ "C10 None None None Murata GRM185R60J475ME15 \n",
+ "C11 None None None Murata GRM185R60J475ME15 \n",
+ "C12 None None None Murata GRM185R60J475ME15 \n",
+ "C13 None None None Murata GRM153R61A105ME95 \n",
+ "C14 None None None Murata GRM153R61A105ME95 \n",
+ "C15 None None None Murata GRM155R61A103KA01 \n",
+ "C16 None None None Murata GRM155R61A103KA01 \n",
+ "C17 None None None Murata GRM155R61A103KA01 \n",
+ "C18 None None None Murata GRM153R61A105ME95 \n",
+ "C19 None None None Murata GRM153R61A105ME95 \n",
+ "C20 None None None Murata GRM153R61A105ME95 \n",
+ "C21 None None None Murata GRM153R61A105ME95 \n",
+ "C22 None None None Murata GRM1555C2A100GA01 \n",
+ "C23 None None None Murata GRM1555C2A100GA01 \n",
+ "C24 None None None Murata GRM1555C2A100GA01 \n",
+ "C25 None None None Murata GRM1555C2A100GA01 \n",
+ "C26 None None None Murata GRM1555C2A100GA01 \n",
+ "C27 None None None Murata GRM153R61A105ME95 \n",
+ "C28 None None None Murata GRM1555C2A150GA01 \n",
+ "C29 None None None Murata GRM153R61A105ME95 \n",
+ "C30 None None None Murata GRM1555C2A150GA01 \n",
+ ".. ... ... ... ... ... \n",
+ "R32 None None None Vishay CRCW04021K50FKED \n",
+ "R33 None None None Vishay CRCW040210K0FKED \n",
+ "R34 None None None Vishay CRCW0402330RFKED \n",
+ "R35 None None None Vishay CRCW0402330RFKED \n",
+ "R36 None None None Vishay CRCW040210K0FKED \n",
+ "R37 None None None Vishay CRCW0402100KFKED \n",
+ "R38 None None None Vishay CRCW0402100KFKED \n",
+ "R39 None None None Vishay CRCW0402100KFKED \n",
+ "R40 None None None Vishay CRCW0402100RFKED \n",
+ "R41 None None None Vishay CRCW0402100RFKED \n",
+ "R42 None None None Vishay CRCW040239R0FKED \n",
+ "R43 None None None Vishay CRCW040239R0FKED \n",
+ "R44 None None None Vishay CRCW040210K0FKED \n",
+ "T1 None None None None None \n",
+ "U1 None None None None None \n",
+ "U2 None None None None None \n",
+ "U3 None None None None None \n",
+ "U4 None None None None None \n",
+ "U5 None None None None None \n",
+ "U6 None None None None None \n",
+ "U7 None None None None None \n",
+ "U8 None None None None None \n",
+ "U9 None None None None None \n",
+ "U10 None None None None None \n",
+ "U11 None None None None None \n",
+ "X1 12MHz None None NDK NX3225GA-12.000M-STD-CRA-1 \n",
+ "X2 32.768kHz None None NDK NX2012SA-32.768K-STD-MUB-1 \n",
+ "X3 32MHz None None NDK NX2520SA-32.000000MHZ \n",
+ "X4 25MHz None None NDK NX2520SA-25.000M-STD-CSW-5 \n",
+ "Z1 None None None None None \n",
+ "\n",
+ " Resistance ref value ref_name ref_num ref_rest \n",
+ "C1 None C1 C0402_1u_10Vdc_X5R C 1 \n",
+ "C2 None C2 C0402_1u_10Vdc_X5R C 2 \n",
+ "C3 None C3 C0402_1u_10Vdc_X5R C 3 \n",
+ "C4 None C4 C0402_1u_10Vdc_X5R C 4 \n",
+ "C5 None C5 C0402_1u_10Vdc_X5R C 5 \n",
+ "C6 None C6 C0402_1u_10Vdc_X5R C 6 \n",
+ "C7 None C7 C0402_1u_10Vdc_X5R C 7 \n",
+ "C8 None C8 C0402_1u_10Vdc_X5R C 8 \n",
+ "C9 None C9 C0402_1u_10Vdc_X5R C 9 \n",
+ "C10 None C10 C0603_4u7_6.3Vdc_X5R C 10 \n",
+ "C11 None C11 C0603_4u7_6.3Vdc_X5R C 11 \n",
+ "C12 None C12 C0603_4u7_6.3Vdc_X5R C 12 \n",
+ "C13 None C13 C0402_1u_10Vdc_X5R C 13 \n",
+ "C14 None C14 C0402_1u_10Vdc_X5R C 14 \n",
+ "C15 None C15 C0402_10n_10Vdc_X5R C 15 \n",
+ "C16 None C16 C0402_10n_10Vdc_X5R C 16 \n",
+ "C17 None C17 C0402_10n_10Vdc_X5R C 17 \n",
+ "C18 None C18 C0402_1u_10Vdc_X5R C 18 \n",
+ "C19 None C19 C0402_1u_10Vdc_X5R C 19 \n",
+ "C20 None C20 C0402_1u_10Vdc_X5R C 20 \n",
+ "C21 None C21 C0402_1u_10Vdc_X5R C 21 \n",
+ "C22 None C22 C0402_10p_100Vdc_C0G C 22 \n",
+ "C23 None C23 C0402_10p_100Vdc_C0G C 23 \n",
+ "C24 None C24 C0402_10p_100Vdc_C0G C 24 \n",
+ "C25 None C25 C0402_10p_100Vdc_C0G C 25 \n",
+ "C26 None C26 C0402_10p_100Vdc_C0G C 26 \n",
+ "C27 None C27 C0402_1u_10Vdc_X5R C 27 \n",
+ "C28 None C28 C0402_15p_100Vdc_C0G C 28 \n",
+ "C29 None C29 C0402_1u_10Vdc_X5R C 29 \n",
+ "C30 None C30 C0402_15p_100Vdc_C0G C 30 \n",
+ ".. ... ... ... ... ... ... \n",
+ "R32 1.5k R32 R0402_1k50 R 32 \n",
+ "R33 10k R33 R0402_10k R 33 \n",
+ "R34 330 R34 R0402_330R R 34 \n",
+ "R35 330 R35 R0402_330R R 35 \n",
+ "R36 10k R36 R0402_10k R 36 \n",
+ "R37 100k R37 R0402_100k R 37 \n",
+ "R38 100k R38 R0402_100k R 38 \n",
+ "R39 100k R39 R0402_100k R 39 \n",
+ "R40 100 R40 R0402_100R R 40 \n",
+ "R41 100 R41 R0402_100R R 41 \n",
+ "R42 39 R42 R0402_39R R 42 \n",
+ "R43 39 R43 R0402_39R R 43 \n",
+ "R44 10k R44 R0402_10k R 44 \n",
+ "T1 None T1 S558-5999-T7-F T 1 \n",
+ "U1 None U1 AT91SAM9G25 U 1 \n",
+ "U2 None U2 USBLC6-4 U 2 \n",
+ "U3 None U3 CC2520 U 3 \n",
+ "U4 None U4 NCP360SNAET1G U 4 \n",
+ "U5 None U5 TPS62742 U 5 \n",
+ "U6 None U6 MIC23254 U 6 \n",
+ "U7 None U7 IS46DR16640B U 7 \n",
+ "U8 None U8 MX30LF1G08AA U 8 \n",
+ "U9 None U9 LAN8710 U 9 \n",
+ "U10 None U10 USBLC6-4 U 10 \n",
+ "U11 None U11 LP3470M5-3.08 U 11 \n",
+ "X1 None X1 NX3225GA-12.000M-STD-CRA-1 X 1 \n",
+ "X2 None X2 NX2012SA-32.768K-STD-MUB-1 X 2 \n",
+ "X3 None X3 NX2520SA-32.000000MHZ X 3 \n",
+ "X4 None X4 NX2520SA-25.000M-STD-CSW-5 X 4 \n",
+ "Z1 None Z1 WLA.01 Z 1 \n",
+ "\n",
+ "[165 rows x 14 columns]"
+ ]
+ },
+ "execution_count": 201,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "bom"
+ ]
+ }
+ ],
+ "metadata": {
+ "kernelspec": {
+ "display_name": "Python 3",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.5.4rc1"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/requirements.txt b/requirements.txt
index d338937..627079e 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -6,3 +6,8 @@ matplotlib==2.0.2
pandas==0.20.3
Pillow==4.2.1
pytest==3.2.0
+
+mypy==0.521; python_version >= '3.0'
+
+# for development
+jupyter==1.0.0
diff --git a/src/ee/kicad/bom/__init__.py b/src/ee/kicad/bom/__init__.py
index 1808357..d0798a4 100644
--- a/src/ee/kicad/bom/__init__.py
+++ b/src/ee/kicad/bom/__init__.py
@@ -1,10 +1,34 @@
+import re
+import sys
+
__all__ = [
'Part',
'Library',
'Bom',
'Comp',
+ 'split_ref',
]
+def split_ref(ref):
+ """Split "C12" into a tuple that's useful for sorting by component reference.
+
+ For example: "C12" => ("C", 12, None). "Cfoo" => ("C", sys.maxsize, "").
+ """
+ m = split_ref.r.match(ref)
+ if not m:
+ return (ref, sys.maxsize, "")
+ groups = m.groups()
+ ref = groups[0]
+ val = groups[1]
+ rest = groups[2]
+ try:
+ return (ref, int(val), rest)
+ except ValueError:
+ pass
+
+ return (ref, val, rest)
+split_ref.r = re.compile("([A-Za-z]+)([0-9]+)(.*)")
+
class Part:
def __init__(self, name):
self.name = name
@@ -22,19 +46,26 @@ class Library:
self.parts[part] = p
return p
-class Bom:
+class Bom(object):
def __init__(self):
self.libraries = {}
- self.components = {}
+ self._components = {}
def add_component(self, component):
- self.components[component.ref] = component
+ self._components[component.ref] = component
def get_component(self, name):
- return self.components[name]
+ return self._components[name]
def get_components(self):
- return self.components
+ return self._components
+
+ def all_field_names(self):
+ fields = set(['ref', 'value'])
+ for c in self._components.values():
+ for f in c.fields:
+ fields.add(f)
+ return fields
def find_library(self, name):
try:
@@ -44,6 +75,27 @@ class Bom:
self.libraries[name] = lib
return lib
+ def to_pandas(self, ref_field_name = None, value_field_name = None):
+ import pandas
+
+ ref_field_name = ref_field_name or "ref"
+ value_field_name = value_field_name or "value"
+
+ fields = self.all_field_names()
+ data = {k: [] for k in fields}
+ refs = []
+ values = []
+ for ref, c in self.get_components().items():
+ refs.append(c.ref)
+ values.append(c.value)
+ for field in fields:
+ data[field].append(c[field] if field in c else None)
+
+# del data[ref_field_name]
+ data[ref_field_name] = refs
+ data[value_field_name] = values
+ return pandas.DataFrame(data=data, index=refs)
+
class Comp:
def __init__(self, ref, value, library, part, footprint):
self.ref = ref
@@ -56,3 +108,18 @@ class Comp:
def add_field(self, key, value):
self.fields[key] = value
+ def __contains__(self, key):
+ if key == 'ref':
+ return self.ref is not None
+ elif key == 'value':
+ return self.value is not None
+ else:
+ return key in self.fields
+
+ def __getitem__(self, key):
+ if key == 'ref':
+ return self.ref
+ elif key == 'value':
+ return self.value
+ else:
+ return self.fields[key]
diff --git a/src/ee/kicad/bom_tool/__init__.py b/src/ee/kicad/bom_tool/__init__.py
new file mode 100644
index 0000000..9f450c9
--- /dev/null
+++ b/src/ee/kicad/bom_tool/__init__.py
@@ -0,0 +1,110 @@
+from ee.kicad.bom import *
+import functools
+import itertools
+import pandas as pd
+
+def _none_if_empty(l):
+ return l if l is not None and len(l) > 0 else None
+
+class Supplier():
+ def __init__(self, name, bom_field = None):
+ self._name = name
+ self._bom_field = bom_field if not None else name
+
+ @property
+ def bom_field(self):
+ return self._bom_field
+
+class Settings():
+ def __init__(self, suppliers = None, part_field = None):
+ self._suppliers = suppliers if suppliers is not None else []
+ self._part_field = part_field if part_field is not None else 'part'
+
+ @property
+ def suppliers(self):
+ return self._suppliers
+
+ @property
+ def part_field(self):
+ return self._part_field
+
+ @part_field.setter
+ def part_field(self, value):
+ self._part_field = value
+
+class CsvFormat():
+ def __init__(self, supplier = None, group_by_fields = None, required_fields = None):
+ self._supplier = supplier
+ self._group_by_fields = _none_if_empty(group_by_fields)
+ self._required_fields = _none_if_empty(required_fields)
+
+ @property
+ def supplier(self):
+ return self._supplier
+
+ @property
+ def group_by_fields(self):
+ return self._group_by_fields
+
+ @property
+ def required_fields(self):
+ return self._required_fields
+
+def _all(fs, c):
+ for f in fs:
+ if not f(c):
+ return False
+ return True
+
+def to_panda(bom, bom_settings, csv_format): # type: (Bom, BomSettings, CsvFormat) -> None
+ filters = []
+
+ print("csv_format.supplier.bom_field={}".format(csv_format.supplier.bom_field))
+ if csv_format.supplier is not None:
+ filters.append(lambda c: csv_format.supplier.bom_field in c)
+
+ if csv_format.group_by_fields is not None:
+ filters.append(lambda c: all([field in c for field in csv_format.group_by_fields]))
+
+ if csv_format.required_fields is not None:
+ filters.append(lambda c: all([field in c for field in csv_format.required_fields]))
+
+ f = functools.partial(_all, filters)
+ print("len(filters)={}".format(len(filters)))
+ print("len(bom.get_components())={}".format(len(bom.get_components())))
+
+ filtered = [c for ref, c in bom.get_components().items() if f(c)]
+ print("filtered:, len={}".format(len(filtered)))
+ filtered.sort(key=lambda c: c.ref)
+ print("sorted filtered:, len={}".format(len(filtered)))
+
+ counts=None
+ parts=[]
+
+ frame = {}
+ for n in bom.all_field_names():
+ frame[n] = []
+
+ if csv_format.group_by_fields is not None:
+ counts, parts, refs=([],[],[])
+ for group, comps in itertools.groupby(filtered, key=lambda c: [field for field in c for c in csv_format.group_by_fields]):
+ gs = list(group)
+ cs = list(comps)
+# counts.append(len(cs))
+# dpns.append(part)
+# mpns.append(part)
+# refs.append(functools.reduce(lambda a, b: a + ' ' + b, [c.ref for c in cs], ''))
+ print("group={}".format(gs))
+
+# return pd.DataFrame(data={
+# 'count': counts,
+# 'mpn': mpns,
+# 'dpn': dpns,
+# 'refs': refs,
+# })
+ else:
+ for ref, c in filtered:
+ for key, value in c:
+ frame[key] = value
+
+ return pd.DataFrame(data=frame)
diff --git a/src/ee/kicad/bom_tool/predef.py b/src/ee/kicad/bom_tool/predef.py
new file mode 100644
index 0000000..717f6d3
--- /dev/null
+++ b/src/ee/kicad/bom_tool/predef.py
@@ -0,0 +1,6 @@
+from ee.kicad.bom_tool import *
+
+digikey = Supplier('Digi-Key', bom_field = 'digikey')
+
+def digikeyCsvFormat(digikey_supplier):
+ return CsvFormat(supplier = digikey, group_by_fields = [digikey_supplier.bom_field])
diff --git a/test/test_bom.py b/test/test_bom.py
index 1a54a9e..6da7798 100644
--- a/test/test_bom.py
+++ b/test/test_bom.py
@@ -1,11 +1,22 @@
import pytest
import os.path
+import sys
from ee.kicad.bom import *
from ee.kicad.bom.io import read_bom
basedir = os.path.dirname(os.path.abspath(__file__))
+@pytest.mark.parametrize("s, ref, val, rest", [
+ ("C12", "C", 12, ""),
+ ("C12n", "C", 12, "n"),
+ ("C", "C", sys.maxsize, ""),
+ ("Foo", "Foo", sys.maxsize, ""),
+ ("+3.0VA1", "+3.0VA1", sys.maxsize, ""),
+ ])
+def test_split_ref(s, ref, val, rest):
+ assert split_ref(s) == (ref, val, rest)
+
def test_read_bom_1():
bom = read_bom(basedir + '/../demo/kicad/bom/A64-OlinuXino_Rev_C.xml')
assert len(bom.get_components()) == 425
@@ -17,7 +28,37 @@ def test_read_bom_2():
r5 = bom.get_component("R5")
assert r5.ref == "R5"
assert r5.value == "R0402_100R"
+ assert r5["value"] == "R0402_100R"
assert r5.footprint == "Resistors_SMD:R_0402"
assert r5.library.name == "gw-cache"
assert len(r5.fields) == 4
assert r5.fields["Part Number"] == "CRCW0402100RFKED"
+ assert r5["Part Number"] == "CRCW0402100RFKED"
+ assert set(['ref', 'value', 'Capacitance', 'Color', 'Description', 'Frequency', 'Impedance', 'Inductance', 'Manufacturer', 'Part Number', 'Resistance']) == bom.all_field_names()
+
+ assert not "foo" in r5
+ with pytest.raises(KeyError):
+ r5["foo"]
+
+def test_read_bom_2_pandas():
+ bom = read_bom(basedir + '/../demo/kicad/bom/gw.xml').to_pandas()
+ assert len(bom) == 165
+
+ print("bom")
+ print(str(bom))
+ r5 = bom.loc["R5"]
+ print(str(r5.index))
+# assert r5.index == "R5"
+ assert r5["ref"] == "R5"
+ assert r5["value"] == "R0402_100R"
+ assert r5["value"] == "R0402_100R"
+# assert r5["footprint"] == "Resistors_SMD:R_0402"
+# assert r5.library.name == "gw-cache"
+# assert len(r5.fields) == 4
+# assert r5.fields["Part Number"] == "CRCW0402100RFKED"
+ assert r5["Part Number"] == "CRCW0402100RFKED"
+# assert set(['ref', 'value', 'Capacitance', 'Color', 'Description', 'Frequency', 'Impedance', 'Inductance', 'Manufacturer', 'Part Number', 'Resistance']) == bom.all_field_names()
+
+ assert not "foo" in r5
+ with pytest.raises(KeyError):
+ r5["foo"]
diff --git a/test/test_digikey.py b/test/test_digikey.py
new file mode 100644
index 0000000..148f56e
--- /dev/null
+++ b/test/test_digikey.py
@@ -0,0 +1,16 @@
+from ee.kicad.bom import *
+from ee.kicad.bom.io import read_bom
+import ee.kicad.bom_tool as bom_tool
+import ee.kicad.bom_tool.predef as predef
+import os.path
+import pytest
+
+basedir = os.path.dirname(os.path.abspath(__file__))
+
+@pytest.mark.skip(reason="disabled for now")
+def test_digikey():
+ print("")
+ bom = read_bom(basedir + '/../demo/kicad/bom/A64-OlinuXino_Rev_C.xml')
+ settings = bom_tool.Settings(suppliers = [predef.digikey])
+ pd = bom_tool.to_panda(bom, settings, predef.digikeyCsvFormat(predef.digikey))
+ print(pd.to_csv(index = False))
diff --git a/tox.ini b/tox.ini
index 2fc2fe3..8967df8 100644
--- a/tox.ini
+++ b/tox.ini
@@ -1,8 +1,7 @@
[testenv]
changedir=test
deps=
- pytest
- numpy
+ -rrequirements.txt
commands=
pytest \
--basetemp={envtmpdir} \