Quellcode durchsuchen

WIP: reform2-handbook: test of interactive SVG diagram

mntmn vor 4 Jahren
Ursprung
Commit
5470e35412

+ 2 - 1
reform2-handbook/build.sh

@@ -1,8 +1,9 @@
 #!/bin/bash
 
 while :
-do inotifywait -e modify -r system-diagram.dot
+do inotifywait -e modify -r *.dot *.md
 dot -Tsvg system-diagram.dot -o system-diagram.svg
 rsvg-convert -f pdf -o system-diagram.pdf system-diagram.svg
+kramdown system.md >system.html
 done
 

+ 28 - 29
reform2-handbook/system-diagram.dot

@@ -3,17 +3,16 @@ digraph G {
   overlap=false;
   splines=ortho;
 
-  node [shape=box color=transparent fontname="Inter" width=1];
+  node [shape=box color=transparent fontname="Inter" width=1 target="_top"];
   edge [arrowsize="0.5"];
-  rankdir=TB;
-
+  rankdir=TB; 
   fontname="Inter";
   label=<<font point-size='24'> <br/>MNT Reform 2.0D-4 System Diagram<br/> </font>>;
   labelloc="t";
 
-  rtc  [label="Realtime\nClock" color=black];
+  rtc  [label="Realtime\nClock" color=black href="system.html#rtc"];
   rtcbat  [label="Coin Cell"];
-  
+   
   subgraph cluster_som {
     fontname="Inter";
     color=lightgrey;
@@ -30,36 +29,36 @@ digraph G {
       labelloc="t";
       margin="25.0";
       
-      dsi  [label="MIPI DSI"];
-      hdmi  [label="HDMI"];
-      sai  [label="SAI"];
-      i2c0  [label="I2C 1"];
+      dsi  [label="MIPI DSI" href="system.html#mipi-dsi"];
+      hdmi  [label="HDMI" href="system.html#hdmi"];
+      sai  [label="SAI" href="system.html#sai"];
+      i2c0  [label="I2C 1" href="system.html#i2c"];
       
-      usb0  [label="USB3 Root 1"];
-      usb1  [label="USB3 Root 2"];
+      usb0  [label="USB3 Root 1" href="system.html#usb3"];
+      usb1  [label="USB3 Root 2" href="system.html#usb3"];
 
-      ddrc [label="DDRC"];
+      ddrc [label="DDRC" href="system.html#ddrc"];
 
-      sd1  [label="MMC/SD1"];
-      sd2  [label="MMC/SD2"];
+      sd1  [label="MMC/SD1" href="system.html#mmc"];
+      sd2  [label="MMC/SD2" href="system.html#mmc"];
       
-      uart1 [label="UART 2"];
-      pcie0  [label="PCIe 1"];
-      pcie1  [label="PCIe 2"];
-      uart0 [label="UART 1"];
+      uart1 [label="UART 2" href="system.html#uart"];
+      pcie0  [label="PCIe 1" href="system.html#pcie"];
+      pcie1  [label="PCIe 2" href="system.html#pcie"];
+      uart0 [label="UART 1" href="system.html#uart"];
       
       //uart2 [label="UART 3"];
       
-      pwm [label="PWM"];
+      pwm [label="PWM" href="system.html#pwm"];
       
       ethmac  [label="ETH MAC"];
 
-      cpu0 [label="Cortex-A53"];
-      cpu1 [label="Cortex-M4F"];
-      gpu [label="GPU GC7000L"];
+      cpu0 [label="Cortex-A53" href="system.html#cortex-a53"];
+      cpu1 [label="Cortex-M4F" href="system.html#cortex-m4f"];
+      gpu [label="GPU GC7000L" href="system.html#gpu"];
       
-      i2c1  [label="I2C 2"];
-      spi1 [label="SPI"];
+      i2c1  [label="I2C 2" href="system.html#i2c"];
+      spi1 [label="SPI" href="system.html#spi"];
     }
 
     ram [label="LPDDR4\nRAM 4GB" color=black];
@@ -70,10 +69,10 @@ digraph G {
     s5v  [label="5V Input"];
   }
   
-  hub  [label="USB Hub" color=black];
+  hub  [label="USB Hub" color=black href="system.html#usb-hub"];
   
-  adac  [label="DAC WM8960" color=black];
-  dsi2edp  [label="DSI to eDP\nConverter" color=black];
+  adac  [label="DAC WM8960" color=black href="system.html#dac"];
+  dsi2edp  [label="DSI to eDP\nConverter" color=black href="system.html#dsi2edp"];
 
   subgraph cluster_headers {
     fontname="Inter"
@@ -326,6 +325,6 @@ digraph G {
   panel -> backlight [arrowhead=none];
   pwm -> backlight [constraint=false];
 
-  adac -> speakers [arrowhead=none,style=dotted];
-  adac -> paudio [arrowhead=none,style=dotted,constraint=false];
+  adac -> speakers [arrowhead=none,style=dashed];
+  adac -> paudio [arrowhead=none,style=dashed,constraint=false];
 }

BIN
reform2-handbook/system-diagram.pdf


+ 77 - 8
reform2-handbook/system-diagram.svg

@@ -22,6 +22,12 @@
 <polygon fill="white" stroke="white" points="221.5,-1011 221.5,-1356.8 1063.5,-1356.8 1063.5,-1011 221.5,-1011"/>
 <text text-anchor="start" x="558" y="-1326.6" font-family="Inter" font-size="14.00">System on Chip (i.MX8M)</text>
 </g>
+<g id="clust7" class="cluster">
+<title>cluster_ports</title>
+<polygon fill="lightgrey" stroke="lightgrey" points="1411.5,-854 1411.5,-1170 1799.5,-1170 1799.5,-854 1411.5,-854"/>
+<text text-anchor="start" x="1557" y="-875.8" font-family="Inter" font-weight="bold" font-size="14.00">External Ports</text>
+<text text-anchor="start" x="1603.5" y="-861.8" font-family="Inter" font-size="14.00"> </text>
+</g>
 <g id="clust3" class="cluster">
 <title>cluster_headers</title>
 <polygon fill="lightgrey" stroke="lightgrey" points="662.5,-854 662.5,-978 1252.5,-978 1252.5,-854 662.5,-854"/>
@@ -46,12 +52,6 @@
 <text text-anchor="middle" x="1810.5" y="-91.8" font-family="Inter" font-size="14.00">Power Rails</text>
 <text text-anchor="middle" x="1810.5" y="-76.8" font-family="Inter" font-size="14.00"> </text>
 </g>
-<g id="clust7" class="cluster">
-<title>cluster_ports</title>
-<polygon fill="lightgrey" stroke="lightgrey" points="1411.5,-854 1411.5,-1170 1799.5,-1170 1799.5,-854 1411.5,-854"/>
-<text text-anchor="start" x="1557" y="-875.8" font-family="Inter" font-weight="bold" font-size="14.00">External Ports</text>
-<text text-anchor="start" x="1603.5" y="-861.8" font-family="Inter" font-size="14.00"> </text>
-</g>
 <g id="clust8" class="cluster">
 <title>cluster_hmi</title>
 <polygon fill="lightgrey" stroke="lightgrey" points="368.5,-454 368.5,-846 1359.5,-846 1359.5,-454 368.5,-454"/>
@@ -79,9 +79,12 @@
 <!-- rtc -->
 <g id="node1" class="node">
 <title>rtc</title>
+<g id="a_node1"><a xlink:href="system.html#rtc" xlink:title="Realtime\nClock" target="_top">
 <polygon fill="none" stroke="black" points="74.5,-1146 0.5,-1146 0.5,-1108 74.5,-1108 74.5,-1146"/>
 <text text-anchor="middle" x="37.5" y="-1130.8" font-family="Inter" font-size="14.00">Realtime</text>
 <text text-anchor="middle" x="37.5" y="-1115.8" font-family="Inter" font-size="14.00">Clock</text>
+</a>
+</g>
 </g>
 <!-- rtcbat -->
 <g id="node2" class="node">
@@ -97,15 +100,21 @@
 <!-- dsi -->
 <g id="node3" class="node">
 <title>dsi</title>
+<g id="a_node3"><a xlink:href="system.html#mipi-dsi" xlink:title="MIPI DSI" target="_top">
 <polygon fill="none" stroke="transparent" points="498.5,-1072 426.5,-1072 426.5,-1036 498.5,-1036 498.5,-1072"/>
 <text text-anchor="middle" x="462.5" y="-1050.3" font-family="Inter" font-size="14.00">MIPI DSI</text>
+</a>
+</g>
 </g>
 <!-- dsi2edp -->
 <g id="node29" class="node">
 <title>dsi2edp</title>
+<g id="a_node29"><a xlink:href="system.html#dsi2edp" xlink:title="DSI to eDP\nConverter" target="_top">
 <polygon fill="none" stroke="black" points="506,-953 419,-953 419,-915 506,-915 506,-953"/>
 <text text-anchor="middle" x="462.5" y="-937.8" font-family="Inter" font-size="14.00">DSI to eDP</text>
 <text text-anchor="middle" x="462.5" y="-922.8" font-family="Inter" font-size="14.00">Converter</text>
+</a>
+</g>
 </g>
 <!-- dsi&#45;&gt;dsi2edp -->
 <g id="edge60" class="edge">
@@ -116,8 +125,11 @@
 <!-- hdmi -->
 <g id="node4" class="node">
 <title>hdmi</title>
+<g id="a_node4"><a xlink:href="system.html#hdmi" xlink:title="HDMI" target="_top">
 <polygon fill="none" stroke="transparent" points="1038.5,-1219 966.5,-1219 966.5,-1183 1038.5,-1183 1038.5,-1219"/>
 <text text-anchor="middle" x="1002.5" y="-1197.3" font-family="Inter" font-size="14.00">HDMI</text>
+</a>
+</g>
 </g>
 <!-- phdmi -->
 <g id="node58" class="node">
@@ -133,14 +145,20 @@
 <!-- sai -->
 <g id="node5" class="node">
 <title>sai</title>
+<g id="a_node5"><a xlink:href="system.html#sai" xlink:title="SAI" target="_top">
 <polygon fill="none" stroke="transparent" points="588.5,-1072 516.5,-1072 516.5,-1036 588.5,-1036 588.5,-1072"/>
 <text text-anchor="middle" x="552.5" y="-1050.3" font-family="Inter" font-size="14.00">SAI</text>
+</a>
+</g>
 </g>
 <!-- adac -->
 <g id="node28" class="node">
 <title>adac</title>
+<g id="a_node28"><a xlink:href="system.html#dac" xlink:title="DAC WM8960" target="_top">
 <polygon fill="none" stroke="black" points="637.5,-952 525.5,-952 525.5,-916 637.5,-916 637.5,-952"/>
 <text text-anchor="middle" x="581.5" y="-930.3" font-family="Inter" font-size="14.00">DAC WM8960</text>
+</a>
+</g>
 </g>
 <!-- sai&#45;&gt;adac -->
 <g id="edge35" class="edge">
@@ -150,8 +168,11 @@
 <!-- i2c0 -->
 <g id="node6" class="node">
 <title>i2c0</title>
+<g id="a_node6"><a xlink:href="system.html#i2c" xlink:title="I2C 1" target="_top">
 <polygon fill="none" stroke="transparent" points="678.5,-1072 606.5,-1072 606.5,-1036 678.5,-1036 678.5,-1072"/>
 <text text-anchor="middle" x="642.5" y="-1050.3" font-family="Inter" font-size="14.00">I2C 1</text>
+</a>
+</g>
 </g>
 <!-- i2c0&#45;&gt;adac -->
 <g id="edge58" class="edge">
@@ -161,8 +182,11 @@
 <!-- usb0 -->
 <g id="node7" class="node">
 <title>usb0</title>
+<g id="a_node7"><a xlink:href="system.html#usb3" xlink:title="USB3 Root 1" target="_top">
 <polygon fill="none" stroke="transparent" points="1038.5,-1145 940.5,-1145 940.5,-1109 1038.5,-1109 1038.5,-1145"/>
 <text text-anchor="middle" x="989.5" y="-1123.3" font-family="Inter" font-size="14.00">USB3 Root 1</text>
+</a>
+</g>
 </g>
 <!-- pusb3 -->
 <g id="node54" class="node">
@@ -178,14 +202,20 @@
 <!-- usb1 -->
 <g id="node8" class="node">
 <title>usb1</title>
+<g id="a_node8"><a xlink:href="system.html#usb3" xlink:title="USB3 Root 2" target="_top">
 <polygon fill="none" stroke="transparent" points="922,-1145 821,-1145 821,-1109 922,-1109 922,-1145"/>
 <text text-anchor="middle" x="871.5" y="-1123.3" font-family="Inter" font-size="14.00">USB3 Root 2</text>
+</a>
+</g>
 </g>
 <!-- hub -->
 <g id="node27" class="node">
 <title>hub</title>
+<g id="a_node27"><a xlink:href="system.html#usb-hub" xlink:title="USB Hub" target="_top">
 <polygon fill="none" stroke="black" points="1386,-1072 1309,-1072 1309,-1036 1386,-1036 1386,-1072"/>
 <text text-anchor="middle" x="1347.5" y="-1050.3" font-family="Inter" font-size="14.00">USB Hub</text>
+</a>
+</g>
 </g>
 <!-- usb1&#45;&gt;hub -->
 <g id="edge26" class="edge">
@@ -195,8 +225,11 @@
 <!-- ddrc -->
 <g id="node9" class="node">
 <title>ddrc</title>
+<g id="a_node9"><a xlink:href="system.html#ddrc" xlink:title="DDRC" target="_top">
 <polygon fill="none" stroke="transparent" points="833.5,-1292 761.5,-1292 761.5,-1256 833.5,-1256 833.5,-1292"/>
 <text text-anchor="middle" x="797.5" y="-1270.3" font-family="Inter" font-size="14.00">DDRC</text>
+</a>
+</g>
 </g>
 <!-- ram -->
 <g id="node23" class="node">
@@ -213,8 +246,11 @@
 <!-- sd1 -->
 <g id="node10" class="node">
 <title>sd1</title>
+<g id="a_node10"><a xlink:href="system.html#mmc" xlink:title="MMC/SD1" target="_top">
 <polygon fill="none" stroke="transparent" points="935,-1292 852,-1292 852,-1256 935,-1256 935,-1292"/>
 <text text-anchor="middle" x="893.5" y="-1270.3" font-family="Inter" font-size="14.00">MMC/SD1</text>
+</a>
+</g>
 </g>
 <!-- emmc -->
 <g id="node24" class="node">
@@ -231,8 +267,11 @@
 <!-- sd2 -->
 <g id="node11" class="node">
 <title>sd2</title>
+<g id="a_node11"><a xlink:href="system.html#mmc" xlink:title="MMC/SD2" target="_top">
 <polygon fill="none" stroke="transparent" points="1038,-1292 953,-1292 953,-1256 1038,-1256 1038,-1292"/>
 <text text-anchor="middle" x="995.5" y="-1270.3" font-family="Inter" font-size="14.00">MMC/SD2</text>
+</a>
+</g>
 </g>
 <!-- lshift -->
 <g id="node62" class="node">
@@ -248,8 +287,11 @@
 <!-- uart1 -->
 <g id="node12" class="node">
 <title>uart1</title>
+<g id="a_node12"><a xlink:href="system.html#uart" xlink:title="UART 2" target="_top">
 <polygon fill="none" stroke="transparent" points="948.5,-1072 876.5,-1072 876.5,-1036 948.5,-1036 948.5,-1072"/>
 <text text-anchor="middle" x="912.5" y="-1050.3" font-family="Inter" font-size="14.00">UART 2</text>
+</a>
+</g>
 </g>
 <!-- iuart1 -->
 <g id="node31" class="node">
@@ -266,8 +308,11 @@
 <!-- pcie0 -->
 <g id="node13" class="node">
 <title>pcie0</title>
+<g id="a_node13"><a xlink:href="system.html#pcie" xlink:title="PCIe 1" target="_top">
 <polygon fill="none" stroke="transparent" points="858.5,-1072 786.5,-1072 786.5,-1036 858.5,-1036 858.5,-1072"/>
 <text text-anchor="middle" x="822.5" y="-1050.3" font-family="Inter" font-size="14.00">PCIe 1</text>
+</a>
+</g>
 </g>
 <!-- impcie -->
 <g id="node34" class="node">
@@ -283,8 +328,11 @@
 <!-- pcie1 -->
 <g id="node14" class="node">
 <title>pcie1</title>
+<g id="a_node14"><a xlink:href="system.html#pcie" xlink:title="PCIe 2" target="_top">
 <polygon fill="none" stroke="transparent" points="768.5,-1072 696.5,-1072 696.5,-1036 768.5,-1036 768.5,-1072"/>
 <text text-anchor="middle" x="732.5" y="-1050.3" font-family="Inter" font-size="14.00">PCIe 2</text>
+</a>
+</g>
 </g>
 <!-- im2 -->
 <g id="node35" class="node">
@@ -301,8 +349,11 @@
 <!-- uart0 -->
 <g id="node15" class="node">
 <title>uart0</title>
+<g id="a_node15"><a xlink:href="system.html#uart" xlink:title="UART 1" target="_top">
 <polygon fill="none" stroke="transparent" points="1038.5,-1072 966.5,-1072 966.5,-1036 1038.5,-1036 1038.5,-1072"/>
 <text text-anchor="middle" x="1002.5" y="-1050.3" font-family="Inter" font-size="14.00">UART 1</text>
+</a>
+</g>
 </g>
 <!-- iuart0 -->
 <g id="node30" class="node">
@@ -318,8 +369,11 @@
 <!-- pwm -->
 <g id="node16" class="node">
 <title>pwm</title>
+<g id="a_node16"><a xlink:href="system.html#pwm" xlink:title="PWM" target="_top">
 <polygon fill="none" stroke="transparent" points="408.5,-1072 336.5,-1072 336.5,-1036 408.5,-1036 408.5,-1072"/>
 <text text-anchor="middle" x="372.5" y="-1050.3" font-family="Inter" font-size="14.00">PWM</text>
+</a>
+</g>
 </g>
 <!-- backlight -->
 <g id="node64" class="node">
@@ -353,26 +407,38 @@
 <!-- cpu0 -->
 <g id="node18" class="node">
 <title>cpu0</title>
+<g id="a_node18"><a xlink:href="system.html#cortex-a53" xlink:title="Cortex&#45;A53" target="_top">
 <polygon fill="none" stroke="transparent" points="724.5,-1292 628.5,-1292 628.5,-1256 724.5,-1256 724.5,-1292"/>
 <text text-anchor="middle" x="676.5" y="-1270.3" font-family="Inter" font-size="14.00">Cortex&#45;A53</text>
+</a>
+</g>
 </g>
 <!-- cpu1 -->
 <g id="node19" class="node">
 <title>cpu1</title>
+<g id="a_node19"><a xlink:href="system.html#cortex-m4f" xlink:title="Cortex&#45;M4F" target="_top">
 <polygon fill="none" stroke="transparent" points="572,-1292 473,-1292 473,-1256 572,-1256 572,-1292"/>
 <text text-anchor="middle" x="522.5" y="-1270.3" font-family="Inter" font-size="14.00">Cortex&#45;M4F</text>
+</a>
+</g>
 </g>
 <!-- gpu -->
 <g id="node20" class="node">
 <title>gpu</title>
+<g id="a_node20"><a xlink:href="system.html#gpu" xlink:title="GPU GC7000L" target="_top">
 <polygon fill="none" stroke="transparent" points="379.5,-1292 265.5,-1292 265.5,-1256 379.5,-1256 379.5,-1292"/>
 <text text-anchor="middle" x="322.5" y="-1270.3" font-family="Inter" font-size="14.00">GPU GC7000L</text>
+</a>
+</g>
 </g>
 <!-- i2c1 -->
 <g id="node21" class="node">
 <title>i2c1</title>
+<g id="a_node21"><a xlink:href="system.html#i2c" xlink:title="I2C 2" target="_top">
 <polygon fill="none" stroke="transparent" points="318.5,-1145 246.5,-1145 246.5,-1109 318.5,-1109 318.5,-1145"/>
 <text text-anchor="middle" x="282.5" y="-1123.3" font-family="Inter" font-size="14.00">I2C 2</text>
+</a>
+</g>
 </g>
 <!-- i2c1&#45;&gt;rtc -->
 <g id="edge57" class="edge">
@@ -382,8 +448,11 @@
 <!-- spi1 -->
 <g id="node22" class="node">
 <title>spi1</title>
+<g id="a_node22"><a xlink:href="system.html#spi" xlink:title="SPI" target="_top">
 <polygon fill="none" stroke="transparent" points="318.5,-1072 246.5,-1072 246.5,-1036 318.5,-1036 318.5,-1072"/>
 <text text-anchor="middle" x="282.5" y="-1050.3" font-family="Inter" font-size="14.00">SPI</text>
+</a>
+</g>
 </g>
 <!-- lpc -->
 <g id="node36" class="node">
@@ -467,7 +536,7 @@
 <!-- adac&#45;&gt;paudio -->
 <g id="edge65" class="edge">
 <title>adac&#45;&gt;paudio</title>
-<path fill="none" stroke="black" stroke-dasharray="1,5" d="M627.17,-952.13C627.17,-962.31 627.17,-973 627.17,-973 627.17,-973 1486.5,-973 1486.5,-973 1486.5,-973 1486.5,-962.94 1486.5,-953.04"/>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M627.17,-952.13C627.17,-962.31 627.17,-973 627.17,-973 627.17,-973 1486.5,-973 1486.5,-973 1486.5,-973 1486.5,-962.94 1486.5,-953.04"/>
 </g>
 <!-- speakers -->
 <g id="node65" class="node">
@@ -479,7 +548,7 @@
 <!-- adac&#45;&gt;speakers -->
 <g id="edge64" class="edge">
 <title>adac&#45;&gt;speakers</title>
-<path fill="none" stroke="black" stroke-dasharray="1,5" d="M599.75,-915.99C599.75,-886.19 599.75,-826.87 599.75,-796.27"/>
+<path fill="none" stroke="black" stroke-dasharray="5,2" d="M599.75,-915.99C599.75,-886.19 599.75,-826.87 599.75,-796.27"/>
 </g>
 <!-- panel -->
 <g id="node63" class="node">

+ 157 - 0
reform2-handbook/system.html

@@ -0,0 +1,157 @@
+<h1 id="reform-20d-4-electronic-system-components">Reform 2.0D-4 Electronic System Components</h1>
+
+<iframe src="system-diagram.svg" width="75%" height="100%"></iframe>
+<style>
+@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;700&display=swap');
+body {
+  font-family: 'Inter', sans-serif;
+  margin-left: 77%;
+}
+iframe {
+  position: fixed;
+  left: 0;
+  top: 0;
+  border: 0;
+}
+:target {
+  background-color: #ffa;
+}
+</style>
+
+<h2 id="system-on-module-boundary-devices-nitrogen8msom">System-on-Module: Boundary Devices Nitrogen8M_SOM</h2>
+
+<p>The default SOM of Reform.</p>
+
+<ul>
+  <li><a href="https://boundarydevices.com/product/nitrogen8m-som/">Website</a></li>
+  <li><a href="https://boundarydevices.com/download/36053/">Schematic</a></li>
+  <li>Mating Connector: SO-DIMM 200, Part Number: <a href="https://www.te.com/global-en/product-1717254-1.html">TE 1717254-1</a></li>
+</ul>
+
+<h3 id="system-on-chip-nxp-imx8m">System-on-Chip: NXP i.MX8M</h3>
+
+<p>The default SOC of Reform.</p>
+
+<ul>
+  <li><a href="https://www.nxp.com/docs/en/data-sheet/IMX8MDQLQCEC.pdf">Data Sheet</a></li>
+  <li><a href="https://www.nxp.com/webapp/Download?colCode=IMX8MDQLQRM">Reference Manual</a></li>
+</ul>
+
+<h4 id="cortex-a53">Cortex-A53</h4>
+
+<p>The four main 64-bit ARM cores of the default SOC of Reform.</p>
+
+<ul>
+  <li>Reference Manual: <a href="http://docs-api-peg.northeurope.cloudapp.azure.com/assets/ddi0500/g/DDI0500G_cortex_a53_trm.pdf">PDF</a></li>
+</ul>
+
+<h4 id="cortex-m4f">Cortex-M4F</h4>
+
+<p>The additional 32-bit ARM CPU core of the default SOC of Reform.</p>
+
+<ul>
+  <li>Reference Manual: <a href="http://infocenter.arm.com/help/topic/com.arm.doc.ddi0439b/DDI0439B_cortex_m4_r0p0_trm.pdf">PDF</a></li>
+</ul>
+
+<h4 id="gpu">Verisilicon Vivante GC7000L GPU</h4>
+
+<p>The GPU in the i.MX8M SOM. Official documentation is not public, but most of its functionality has been reverse engineered by the etnaviv project.</p>
+
+<ul>
+  <li>TODO: Spec/Capabilities</li>
+  <li>Documentation: See main i.MX8M Manual for integration in SOC</li>
+  <li><a href="https://github.com/torvalds/linux/tree/master/drivers/gpu/drm/etnaviv">Driver (Kernel Part)</a></li>
+  <li><a href="https://cgit.freedesktop.org/mesa/mesa/tree/src/gallium/drivers/etnaviv">Driver (Mesa Part)</a></li>
+</ul>
+
+<h4 id="mipi-dsi">MIPI DSI</h4>
+
+<p>i.MX8M has a MIPI DSI block by Northwest Logic and a DSI PHY by Mixel. Both have open source drivers in the Linux kernel. Reform accepts MIPI DSI signal on the motherboard header J24. The DSI to eDP Converter converts the signal to eDP to drive the display panel.</p>
+
+<ul>
+  <li>TODO: kernel sources</li>
+</ul>
+
+<h4 id="sai">SAI</h4>
+
+<p>i.MX8M has multiple SAI ports for digital audio.</p>
+
+<ul>
+  <li>TODO: kernel sources</li>
+</ul>
+
+<h4 id="i2c">I2C</h4>
+
+<ul>
+  <li>TODO: kernel sources</li>
+</ul>
+
+<h4 id="spi">SPI</h4>
+
+<ul>
+  <li>TODO: kernel sources</li>
+</ul>
+
+<h4 id="pwm">PWM</h4>
+
+<ul>
+  <li>TODO: kernel sources</li>
+</ul>
+
+<h4 id="pcie">PCIe</h4>
+
+<ul>
+  <li>TODO: kernel sources</li>
+</ul>
+
+<h4 id="uart">UART</h4>
+
+<ul>
+  <li>TODO: kernel sources</li>
+</ul>
+
+<h4 id="hdmi">HDMI</h4>
+
+<ul>
+  <li>TODO: kernel sources</li>
+</ul>
+
+<h4 id="usb3">USB3</h4>
+
+<ul>
+  <li>TODO: kernel sources</li>
+</ul>
+
+<h4 id="eth-mac">ETH MAC</h4>
+
+<ul>
+  <li>TODO: kernel sources</li>
+</ul>
+
+<h4 id="mmc">MMC/SD</h4>
+
+<ul>
+  <li>TODO: kernel sources</li>
+</ul>
+
+<h4 id="ddrc">DDRC</h4>
+
+<p>The DDRC connects the physical LPDDR4 RAM chip to the blocks inside of the SOC, including CPU and GPU.</p>
+
+<h3 id="eth-phy">ETH PHY</h3>
+
+<p>The PHY part of the Ethernet interface is on the SOM. It is an Atheros AR8035 chip.</p>
+
+<ul>
+  <li>TODO: kernel sources</li>
+</ul>
+
+<h2 id="usb-hub">USB Hub</h2>
+
+<p>Reform has a TI TUSB8041 USB Hub chip.</p>
+
+<ul>
+  <li><a href="https://www.ti.com/product/TUSB8041">Website</a></li>
+  <li><a href="https://www.ti.com/lit/ds/symlink/tusb8041.pdf?&amp;ts=1590007407171">Datasheet</a></li>
+</ul>
+

+ 121 - 0
reform2-handbook/system.md

@@ -0,0 +1,121 @@
+# Reform 2.0D-4 Electronic System Components
+
+<iframe src="system-diagram.svg" width="75%" height="100%"></iframe>
+<style>
+@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;700&display=swap');
+body {
+  font-family: 'Inter', sans-serif;
+  margin-left: 77%;
+}
+iframe {
+  position: fixed;
+  left: 0;
+  top: 0;
+  border: 0;
+}
+:target {
+  background-color: #ffa;
+}
+</style>
+
+## System-on-Module: Boundary Devices Nitrogen8M_SOM
+
+The default SOM of Reform.
+
+- [Website](https://boundarydevices.com/product/nitrogen8m-som/)
+- [Schematic](https://boundarydevices.com/download/36053/)
+- Mating Connector: SO-DIMM 200, Part Number: [TE 1717254-1]( https://www.te.com/global-en/product-1717254-1.html)
+
+### System-on-Chip: NXP i.MX8M
+
+The default SOC of Reform.
+
+- [Data Sheet](https://www.nxp.com/docs/en/data-sheet/IMX8MDQLQCEC.pdf)
+- [Reference Manual](https://www.nxp.com/webapp/Download?colCode=IMX8MDQLQRM)
+
+#### Cortex-A53 {#cortex-a53}
+
+The four main 64-bit ARM cores of the default SOC of Reform.
+
+- Reference Manual: [PDF](http://docs-api-peg.northeurope.cloudapp.azure.com/assets/ddi0500/g/DDI0500G_cortex_a53_trm.pdf)
+
+#### Cortex-M4F {#cortex-m4f}
+
+The additional 32-bit ARM CPU core of the default SOC of Reform.
+
+- Reference Manual: [PDF](http://infocenter.arm.com/help/topic/com.arm.doc.ddi0439b/DDI0439B_cortex_m4_r0p0_trm.pdf)
+
+#### Verisilicon Vivante GC7000L GPU {#gpu}
+
+The GPU in the i.MX8M SOM. Official documentation is not public, but most of its functionality has been reverse engineered by the etnaviv project.
+
+- TODO: Spec/Capabilities
+- Documentation: See main i.MX8M Manual for integration in SOC
+- [Driver (Kernel Part)]( https://github.com/torvalds/linux/tree/master/drivers/gpu/drm/etnaviv)
+- [Driver (Mesa Part)](https://cgit.freedesktop.org/mesa/mesa/tree/src/gallium/drivers/etnaviv)
+
+#### MIPI DSI {#mipi-dsi}
+
+i.MX8M has a MIPI DSI block by Northwest Logic and a DSI PHY by Mixel. Both have open source drivers in the Linux kernel. Reform accepts MIPI DSI signal on the motherboard header J24. The DSI to eDP Converter converts the signal to eDP to drive the display panel.
+
+- TODO: kernel sources
+
+#### SAI {#sai}
+
+i.MX8M has multiple SAI ports for digital audio. 
+
+- TODO: kernel sources
+
+#### I2C {#i2c}
+
+- TODO: kernel sources
+
+#### SPI {#spi}
+
+- TODO: kernel sources
+
+#### PWM {#pwm}
+
+- TODO: kernel sources
+
+#### PCIe {#pcie}
+
+- TODO: kernel sources
+
+#### UART {#uart}
+
+- TODO: kernel sources
+
+#### HDMI {#hdmi}
+
+- TODO: kernel sources
+
+#### USB3 {#usb3}
+
+- TODO: kernel sources
+
+#### ETH MAC {#eth-mac}
+
+- TODO: kernel sources
+
+#### MMC/SD {#mmc}
+
+- TODO: kernel sources
+
+#### DDRC {#ddrc}
+
+The DDRC connects the physical LPDDR4 RAM chip to the blocks inside of the SOC, including CPU and GPU.
+
+### ETH PHY {#eth-phy}
+
+The PHY part of the Ethernet interface is on the SOM. It is an Atheros AR8035 chip.
+
+- TODO: kernel sources
+
+## USB Hub {#usb-hub}
+
+Reform has a TI TUSB8041 USB Hub chip.
+
+- [Website](https://www.ti.com/product/TUSB8041)
+- [Datasheet](https://www.ti.com/lit/ds/symlink/tusb8041.pdf?&ts=1590007407171)
+