\documentclass[crop,tikz]{standalone} \usepackage{tikz} \begin{document} \usetikzlibrary{shapes.misc,positioning,circuits.ee.IEC,fit} \tikzstyle{system}=[shape=rounded rectangle,fill=green!20,text centered,draw] \tikzstyle{sensor}=[rectangle,fill=orange!20,text centered,draw] \tikzstyle{processor}=[rectangle,fill=blue!20,text centered,draw] \tikzstyle{connector}=[rectangle,fill=yellow!20,text centered,draw] \tikzstyle{memory}=[rectangle,fill=green!20,text centered,draw] \tikzstyle{radio}=[rectangle,fill=magenta!20,text centered,draw] \tikzstyle{bus}=[<->,color=black,draw] \tikzstyle{buslabel}=[near end,color=black,font=\tiny,auto] \tikzstyle{vcc}=[->,color=red,font=\tiny,draw,text=black] \pgfdeclarelayer{background} \pgfdeclarelayer{foreground} \pgfsetlayers{background,main,foreground} \begin{tikzpicture} % CN part \node[processor] (cpu)[minimum width=50,minimum height=50] {M3}; \node[radio] (wireless) [right of=cpu,right=0.5] {Radio}; \node[radio] (bridge) [below of=cpu,below=0.5] {USB Bridge}; \path[bus] (bridge.120) -- node [buslabel,left] {JTAG} (cpu.260); \path[bus] (bridge.60) -- node [buslabel,right] {SPI} (cpu.280); \path[bus] (wireless.north west) -- node [buslabel,above] {SPI} (cpu.15); \path[bus] (wireless.south west) -- node [buslabel,below] {GPIO} (cpu.-15); \begin{pgfonlayer}{background} \node [draw,fit=(cpu)(wireless)(bridge),label=above:\tiny{Control Node},fill=gray!20] (cn) {}; \end{pgfonlayer} \node[processor] (a8) [minimum width=100,minimum height=100,left of=cn,left=4,above of=cpu] (a8) {A8}; \node[processor] (eth) [below of=a8,below=1] {ETH SW}; \node[connector] (eth0) [below of=eth,right of=eth,below=0.001] {ETH}; \node[connector] (eth1) [below of=eth,below=0.001] {ETH}; \node[connector] (eth2) [below of=eth,left of=eth,below=0.001] {ETH}; \path[bus] (eth) -- node[buslabel,above] {ETH} (a8); \path[bus] (eth1) -- (eth); \path[bus] (eth0) |- (eth); \path[bus] (eth2) |- (eth); \node[processor] (uhub) [above of=a8,above=2,left of=a8] {USB Hub}; \path[bus] (uhub) -- node[buslabel,below] {USB} (a8.120); \node[connector] (usb0) [above of=uhub] {USB}; \node[connector] (usb1) [above of=uhub,left of=uhub] {USB}; \node[connector] (usb2) [above of=uhub,right of=uhub] {USB}; \path[bus] (usb2) |- (uhub); \path[bus] (usb0) -- (uhub); \path[bus] (usb1) |- (uhub); \node[processor] (ubridge2) [right of=uhub,right=2,above of=a8,above=1] {USB Bridge}; \path[bus] (ubridge2) -- node[buslabel,below] {UART} (a8.60); \node[connector] (onc) [minimum width=200,right of=usb2,right=0.5] {Open Node Connector}; \node[connector] (pwr) [right of=onc,right=3] {Power}; \node[processor] (pwrmgnt) [below of=pwr,below=1] {Power Mgnt}; \node[processor] (cmsr) [below of=pwrmgnt,left of=pwrmgnt,left=2] {Current Msr}; \path[bus] (ubridge2) |- node[buslabel] {USB} (onc.south west); \path[bus] (eth.north east) -| node[buslabel] {ETH} (onc.187); \path[bus] (bridge.north west) -| node[buslabel] {UART} (onc.190); \path[bus] (cpu.160) -| node[buslabel,left] {GPIO} (onc.192); \path[bus] (cpu.north west) -| node[buslabel,right] {I2C} (onc.194); \path[vcc,<-] (usb2.south east) |- (3.55,4) -- (pwrmgnt.north west); \node[label=above left:\tiny{5V}] at (3.55,4) {}; \path[vcc] (3.55,4) -| (cmsr.100); \path[vcc] (pwrmgnt.north west) -- (onc.south east); \path[vcc] (pwr) -- node[buslabel,right] {+3.3V to 5V} (pwrmgnt); \path[vcc,<->] (cmsr.north east) |- (pwrmgnt); \path[vcc] (pwrmgnt) |- node[buslabel] {+48V} (4.5,-2.4) -| (eth0.east); \path[vcc,orange] (pwrmgnt.160) |- (onc.east); \path[vcc,orange] (pwrmgnt.160) |- node[buslabel,below] {+3.3V} (1,3.5) -- (cmsr.28); \node[draw,rounded rectangle] (gnd) at (2.8,2) {GND}; \path[vcc] (gnd) |- (pwrmgnt); \end{tikzpicture} \begin{tikzpicture} \node[processor] (cpu)[minimum width=50,minimum height=50] {CPU}; %STM32F103RKEY \node[memory] (flash) [below of=cpu,below=0.5] {Flash}; %N25Q128A \draw[bus,transform canvas={xshift=-10}] (flash) edge node[buslabel] {GPIO} (cpu); \draw[bus,transform canvas={xshift=10}] (flash) edge node[buslabel] {SPI} (cpu); \node[radio] (wireless) [right of=cpu,above of=cpu,right=0.4] {Radio}; %AT86RF231 \path[bus] (wireless.240) |- node[buslabel,above] {GPIO} (cpu.10); \path[bus] (wireless) |- node[buslabel] {SPI} (cpu); \node[system] (usbb) [above of=cpu,above=1] {USB Bridge}; \path[bus] (usbb) edge node[buslabel] {JTAG} (cpu); \path[bus,transform canvas={xshift= 20}] (usbb) edge node[buslabel] {UART} (cpu); \node[connector] (oc) [above of=usbb,above=1,minimum width=100] {Open Node Connector}; \path[bus] (usbb) edge node[buslabel]{USB} (oc) ; \path[bus] (oc.190) |- node[buslabel]{GPIO} (cpu.160) ; \node[connector] (usb) [right of=oc,below of=oc,right=0.5] {USB}; \path[bus] (oc) |- (usb); \node[system] (pm) [below of=usb] {Power}; \node[sensor] (light) [minimum width=80,below left of=oc,left=1.5] {Light Sensor}; %ISL29020 \node[sensor] (pressure)[minimum width=80,below of=light] {Pressure Sensor}; %LPS331AP \node[sensor] (gyro) [minimum width=80,below of=pressure] {Gyroscope}; %L3G4200D \node[sensor] (magneto) [minimum width=80,below of=gyro] {Magnetometer}; %LSM303DLHC \path[bus] (oc.188) |- (light); \path[bus] (oc.188) |- (gyro); \path[bus] (oc.188) |- (magneto); \path[bus] (oc.188) |- (pressure); \path[bus] (oc.188) |- node[buslabel,below] {I2C} (cpu.190); \path[bus] (gyro) -| node[buslabel,below] {GPIO} (cpu.120); \path[bus] (magneto.10)-| (cpu.120); \path[vcc] (pm.210) |- node[auto] {+3.3 V} (usbb.10); \path[vcc,yellow,text=black] (pm) -- node[auto] {+3.3 V mon.} (wireless); \path[vcc] (usb) -- node[left] {+5} (pm); \path[vcc] (oc.340) |- node[near start,auto] {+3.3} (pm.175); \path[vcc,yellow,text=black] (oc.330) |- node[near start,left] {+5} (pm.185); \end{tikzpicture} \end{document}