summaryrefslogtreecommitdiff
path: root/ir
diff options
context:
space:
mode:
authorWerner Almesberger <werner@almesberger.net>2014-07-23 01:10:45 -0300
committerWerner Almesberger <werner@almesberger.net>2014-07-23 01:10:45 -0300
commit4ad5b08774b05e6a879cc5ed1c35fe4754577d91 (patch)
tree78dbd8a91725b4739c4a88c1908b2cc9bcde374c /ir
parente22d2af38eaacb59e9497903461d743c805bece9 (diff)
downloadmisc-4ad5b08774b05e6a879cc5ed1c35fe4754577d91.tar.gz
misc-4ad5b08774b05e6a879cc5ed1c35fe4754577d91.tar.bz2
misc-4ad5b08774b05e6a879cc5ed1c35fe4754577d91.zip
ir/: complete first draft (still needs proofreading and review)
Diffstat (limited to 'ir')
-rw-r--r--ir/Makefile6
-rw-r--r--ir/cir.fig82
-rw-r--r--ir/ir.tex262
-rw-r--r--ir/irda.fig82
-rw-r--r--ir/sys.fig2
-rw-r--r--ir/uart.fig82
6 files changed, 468 insertions, 48 deletions
diff --git a/ir/Makefile b/ir/Makefile
index 213d493..285d5fb 100644
--- a/ir/Makefile
+++ b/ir/Makefile
@@ -1,11 +1,13 @@
+FIGS = sys cir irda uart window
+
.PHONY: all clean
.SUFFIXES: .fig .pdf
-all: ir.tex sys.pdf window.pdf
+all: ir.tex $(FIGS:%=%.pdf)
pdflatex ir
.fig.pdf:
fig2dev -L pdf $< $@
clean:
- rm -f sys.pdf window.pdf
+ rm -f $(FIGS:%=%.pdf)
diff --git a/ir/cir.fig b/ir/cir.fig
new file mode 100644
index 0000000..522ed0a
--- /dev/null
+++ b/ir/cir.fig
@@ -0,0 +1,82 @@
+#FIG 3.2 Produced by xfig version 3.2.5c
+Portrait
+Center
+Metric
+A3
+100.00
+Single
+-2
+1200 2
+0 32 #c0c0c0
+2 1 0 3 0 7 50 -1 -1 0.000 0 2 7 0 0 3
+ 1125 1350 2565 1350 2565 1620
+2 3 0 3 0 7 50 -1 -1 0.000 1 0 -1 0 0 4
+ 3150 1890 3150 1710 3330 1800 3150 1890
+2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 3195 1665 3240 1575
+2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 3285 1665 3330 1575
+2 1 0 3 0 7 50 -1 -1 0.000 0 1 -1 0 0 2
+ 3330 1710 3330 1890
+2 3 0 3 0 7 49 -1 -1 0.000 0 0 7 0 0 4
+ 2475 2025 2475 1575 2835 1800 2475 2025
+2 1 0 3 0 7 50 -1 -1 0.000 0 2 7 0 0 2
+ 2835 1800 3150 1800
+2 2 0 3 0 7 50 -1 -1 0.000 0 2 -1 0 0 5
+ 3015 3420 3015 3825 2835 3825 2835 3420 3015 3420
+2 1 0 3 0 7 60 -1 -1 0.000 0 0 7 0 0 2
+ 2925 4500 2925 4950
+2 1 0 3 0 7 50 -1 -1 0.000 0 2 7 0 0 2
+ 2925 3825 2925 4050
+2 1 0 3 0 7 50 -1 -1 0.000 0 2 -1 0 0 4
+ 3960 2070 4050 2070 4050 3375 3960 3375
+2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 3330 4230 3420 4185
+2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 3330 4320 3420 4275
+2 2 0 3 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 2610 4050 3240 4050 3240 4500 2610 4500 2610 4050
+2 1 0 3 0 7 50 -1 -1 0.000 0 2 7 0 0 2
+ 1125 4185 2610 4185
+2 1 0 3 32 7 50 -1 -1 0.000 0 2 7 0 0 2
+ 1125 2880 3600 2880
+2 1 0 3 0 7 50 -1 -1 0.000 0 2 7 0 0 2
+ 1125 3195 3600 3195
+2 1 0 3 0 7 50 -1 -1 0.000 0 2 7 0 0 2
+ 2925 3195 2925 3420
+2 1 0 3 0 7 50 -1 -1 0.000 0 2 7 0 0 2
+ 1755 2565 3600 2565
+2 1 0 3 0 7 49 -1 -1 0.000 0 2 7 0 0 3
+ 2025 2565 2025 1710 2475 1710
+2 2 0 3 0 7 50 -1 -1 0.000 0 2 -1 0 0 5
+ 1350 2475 1755 2475 1755 2655 1350 2655 1350 2475
+2 1 0 3 0 7 49 -1 -1 0.000 0 0 7 0 0 4
+ 0 900 1125 900 1125 4725 0 4725
+2 1 0 3 32 7 50 -1 -1 0.000 0 2 7 0 0 3
+ 2475 1890 2250 1890 2250 2250
+2 2 0 3 32 7 50 -1 -1 0.000 0 2 -1 0 0 5
+ 1350 2160 1755 2160 1755 2340 1350 2340 1350 2160
+2 1 0 3 32 7 50 -1 -1 0.000 0 2 -1 0 0 2
+ 1350 2250 1125 2250
+2 1 0 3 0 7 50 -1 -1 0.000 0 2 -1 0 0 2
+ 1350 2565 1125 2565
+2 1 0 3 32 7 50 -1 -1 0.000 0 2 7 0 0 2
+ 1755 2250 3600 2250
+4 0 0 50 -1 22 12 0.0000 4 135 660 3420 1890 CIR LED\001
+4 1 0 50 -1 22 12 0.0000 4 135 165 2925 4275 IR\001
+4 1 0 50 -1 22 12 0.0000 4 105 540 2925 4410 sensor\001
+4 1 0 50 -1 22 12 0.0000 4 135 1005 2880 5130 Audio codec\001
+4 0 0 50 -1 22 12 0.0000 4 135 330 3645 2970 RTS\001
+4 0 0 50 -1 22 12 0.0000 4 135 225 3645 3285 RX\001
+4 1 0 50 -1 22 12 4.7124 4 135 840 4140 2700 Hackerbus\001
+4 1 0 50 -1 22 12 0.0000 4 135 345 540 4950 CPU\001
+4 0 0 50 -1 22 12 0.0000 4 135 330 3645 2655 CTS\001
+4 0 0 50 -1 22 12 0.0000 4 135 210 3645 2340 TX\001
+4 2 0 50 -1 22 12 0.0000 4 180 570 1080 4230 gpio(s)\001
+4 2 0 50 -1 22 12 0.0000 4 165 990 1080 3240 uart3_rx_irrx\001
+4 2 0 50 -1 22 12 0.0000 4 165 990 1080 2925 uart3_rts_sd\001
+4 2 0 50 -1 22 12 0.0000 4 165 1125 1080 2610 uart3_cts_rctx\001
+4 2 0 50 -1 22 12 0.0000 4 165 990 1080 2295 uart3_tx_irtx\001
+4 2 0 50 -1 22 12 0.0000 4 180 570 1080 1395 gpio(s)\001
+4 1 0 50 -1 22 12 0.0000 4 180 510 1575 4095 config\001
+4 1 0 50 -1 22 12 0.0000 4 180 510 1575 1260 config\001
diff --git a/ir/ir.tex b/ir/ir.tex
index c200bda..a392878 100644
--- a/ir/ir.tex
+++ b/ir/ir.tex
@@ -2,13 +2,14 @@
\usepackage{a4}
\usepackage{fullpage}
\usepackage{graphicx}
+\usepackage{footnote}
\usepackage{url}
\title{GTA04b7 Infrared Subsystem}
\author{J\"org Reisenweber, Werner Almesberger}
-\date{July 21, 2014}
+\date{July 22, 2014}
-\def\todo#1{{\bf TO DO:} #1}
+\def\todo#1{\begin{center}{\bf TO DO:} #1\hfill~\end{center}}
\def\degree{\,^{\circ}}
\newenvironment{tab}{\vskip4mm\qquad\begin{minipage}{430pt}}%
{\end{minipage}\vskip4mm\noindent}
@@ -48,7 +49,6 @@ components:
The signal named bq.GPIO determines the configuration after CPU reset and
is described in section \ref{reset}.
-
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\subsection{IR modes}
@@ -75,6 +75,39 @@ Likewise, since the IR data path is shared between CPU and Hackerbus,
conflicting configurations are possible. Their resolution is described
in section \ref{conflict}.
+% -----------------------------------------------------------------------------
+
+\section{Physical layer}
+
+The following sections describe the main characteristics of the physical
+layers of CIR, IrDA, and IR-UART, and then define a set of hardware
+characteristics that achieve compatibility with all these modes of operation.
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+\subsection{CIR}
+
+While there is no common standard for CIR, the characteristics of most IR
+remote control typically lie in the following ranges,
+with amplitude-shift keying (ASK) being the most common form of modulation,
+although with other types of modulation being possible:
+
+\begin{tab}
+\begin{tabular}{l|cll}
+Parameter & Value & Unit & \\
+\hline
+Wavelength & 870, 930--950 & nm \\
+Data rate & 4--120 & bps \\
+Carrier & 33-60 & kHz \\
+Beam angle & $\ge 50$ & $\hbox to 0pt{}\degree$
+ & (estimate for IR remote) \\
+\end{tabular}
+\end{tab}%
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+\subsection{IrDA}
+
IrDA (SIR) uses a pulse modulation with UART-like framing and has the
following characteristics:
@@ -90,38 +123,39 @@ Duty cycle & 3/16 & & ``0`` bit \\
Pulse width & 1.6--19.5 & $\mu$s \\
Beam angle & $\ge 15$ & $\hbox to 0pt{}\degree$ \\
\end{tabular}
-\end{tab}%
-%
-The characteristics of CIR typically lie in the following ranges,
-with amplitude-shift keying (ASK) being the most common for of modulation,
-but other types of modulation being possible:
+\end{tab}
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+\subsection{IR-UART}
-\begin{tab}
-\begin{tabular}{l|cll}
-Parameter & Value & Unit & \\
-\hline
-Wavelength & 870, 930--950 & nm \\
-Data rate & 4--120 & bps \\
-Carrier & 33-60 & kHz \\
-Beam angle & $\ge 50$ & $\hbox to 0pt{}\degree$
- & (estimate for IR remote) \\
-\end{tabular}
-\end{tab}%
-%
Last but not least, IR-UART mode uses on-off keying (OOK), and we can define
the following characteristics:
+\begin{savenotes}
\begin{tab}
-\begin{tabular}{l|cl}
+\begin{tabular}{l|cll}
Parameter & Value & Unit \\
\hline
Data rate & 19.2--115.2 & kbps (typical) \\
-Duty cycle & 10--90 & \% \\
+Duty cycle & 9.1--91 & \% &%
+\footnote{The duty cycle range of 9.1--91\% (1/11 to 10/11) is for 8 bits plus
+one parity bit, as used by the DM3730 ROM boot loader.
+The duty cycle range would be 10--90\% for the more common 8 bits
+without parity format.} \\
\end{tabular}
\end{tab}%
-%
-Combining the above specifications, we obtain the following common
-characteristics for transmitter and receiver:
+\end{savenotes}%
+
+\todo{Just assumed some common bit rates. Are they reasonable for our
+scenario ?}
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+\subsection{Combined characteristics}
+
+Combining the specifications from the preceding sections, we obtain the
+following common characteristics for transmitter and receiver:
% Minimum beam angle
%
@@ -141,19 +175,68 @@ Wavelength & 940 & nm & transmit \\
Frequency & 20--312 & kHz \\
Beam angle & $\ge 50$ & $\hbox to 0pt{}\degree$ \\
\end{tabular}
-\end{tab}%
+\end{tab}
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+\subsection{Transmit power}
-Jul 07 23:57:01 <DocScrutinizer05> for the RX we want a phototransistor with filter gear to implement a highpass with cutoff @ ~20kHz
+While we do not know the radiant flux density required at the IR receivers
+of consumer devices and therefore cannot specify the minimum
+radiant intensity of the transmitter, we expect performance of the
+IR transmitter to be on par with the average TV remote control.
+For comparison, the N900 has a range of only approximately 2 m, which
+we would consider unacceptable.
+% Expected range
+%
+% Jul 07 23:12:51 <DocScrutinizer05> I'd expect it to be on par with the
+% average TV remote
+%
+% Jul 07 23:14:14 <DocScrutinizer05> N900 has a range of hardly 2m, that's
+% inacceptable
+
+% High-current operation
+%
+% Jul 07 23:29:55 <DocScrutinizer05> 300mA pulsed sounds good
-Jul 07 23:29:55 <DocScrutinizer05> 300mA pulsed sounds good
+In order to improve its range, the transmitter should be driven with as
+high a current as reasonably possible. This current would be well above
+the permissible continuous forward current In CIR and IrDA mode. Note
+that incorrect use could cause the IR LED to overheat and the length of
+a pulse therefore has to be limited. We discuss this in section \ref{overload}.
+
+\todo{Mention ``low-current'' mode here, too, if approved.}
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+\subsection{Received signal processing}
+
+% High=pass RX filter
+%
+% Jul 07 23:57:01 <DocScrutinizer05> for the RX we want a phototransistor
+% with filter gear to implement a highpass with cutoff @ ~20kHz
-% Jul 09 16:43:40 <DocScrutinizer05> the detector should get connected to UART3 RX, via proper signal shaping/filtering.
+% RX connections
+%
+% Jul 09 16:43:40 <DocScrutinizer05> the detector should get connected to UART3
+% RX, via proper signal shaping/filtering.
% and possibly also to audio-in
-% Jul 09 16:47:10 <DocScrutinizer05> re any multiplexing: I expect the whole IR section to get powered down by asserting a GPIO pin to a non-POR-default state, so the IR is active by default after power on reset. By connecting the whole IR via some series resistors to the UART, I expect anything on hackerbus to be able to override what comes from IR, particularly when IR is powered down
+On the receiving side, the signal should go through a high-pass filter with
+a cutoff frequency of about 20 kHz and then be shaped into a digital
+signal for the RX line. The analog signal should also be sent to an unused
+input of the audio codec. We have no further specification for the analog
+signal from the IR sensor at this time.
+
+% Analog IR RX TBD
+%
+% Jul 17 03:43:57 <DocScrutinizer05> IR RX: I have nothing specific in mind,
+% and I don't think we need to specify it right now. Will care about it later
+\todo{Given that IR-UART can have very long high or low pulses, should
+the cutoff frequency not be in the range of bps/10, e.g., 2 kHz if we
+assume 19.2 kbps to be the lowest supported data rate ?}
% -----------------------------------------------------------------------------
@@ -162,6 +245,17 @@ Jul 07 23:29:55 <DocScrutinizer05> 300mA pulsed sounds good
The IR subsystem can be configured for several different modes of operation.
The following sections detail the various configurations.
+\todo{J\"org once mentioned the possibility of Hackerbus overriding the
+CPU's configuration signals, but later seemed to care less about this
+unlikely use case. The
+following assumes that the CPU is exclusively in charge of configuring
+IR. Is that okay ?}
+
+The following sections show the configuration of both the transmitter and
+the receiver. In many real-life situations, only one direction will be
+used at a time while the other is deactivated. A deactivated transmitter
+or receiver should behave as described in section \ref{off}.
+
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\subsection{CPU powered down}
@@ -175,20 +269,27 @@ The following sections detail the various configurations.
When the control signals from the CPU are in their reset state, the
configuration of the IR system is determined by the state of the
-GPIO pin of the bq27200 battery fuel gauge. This chip is directly
-connected to the battery and retains its state during normal system
-reset.
-
-Note that the bq27200 does not preserve the entire GPIO state across power-on
-reset: while the direction of the GPIO pin is determined by EEPROM content,
+GPIO pin of the bq27200 battery fuel gauge.
+We call this pin ``bq.GPIO'' in the rest of the document.
+The fuel gauge chip is directly connected to the battery and retains its
+state during normal system reset.
+
+Note that the bq27200 does not preserve the entire state of bq.GPIO
+across power-on reset: while the direction of the pin is determined
+by EEPROM content and is therefore retained across power-cycling,
the open-collector output is always set to ``1'', i.e., it is high-Z.
-If GPIO is high-Z, the IR subsystem shall be deactivated: it must draw as
-little current as possible, and the transmitter must ignore its TX or CTS
-inputs.
+If bq.GPIO is high-Z and the CPU's control signals are in their reset
+state, the IR subsystem shall be deactivated: it must draw as
+little current as possible, the transmitter must ignore its TX or CTS
+inputs, and the receiver must not drive the RX line.
+
+If bq.GPIO is ``0'' and the CPU's control signals are in their reset state,
+both transmitter and receiver shall be active and operate in IR-UART mode.
+The purpose of this mode is allow the CPU's ROM boot loader to try to boot
+from UART3 via infrared.
-If GPIO is ``0'', both transmitter and receiver shall be active and operate
-in IrDA mode.
+\todo{Do we agree that bq27200 power on reset defaults to ``IR off'' ?}
The following table summarizes the IR configuration in power-down and
after CPU reset:
@@ -199,25 +300,87 @@ CPU.controls & bq.GPIO & IR configuration \\
\hline
CPU off & any & ??? \\
reset state & ``1'' (High-Z) & off (minimum power) \\
- & ``0'' & IrDA TX/RX \\
+ & ``0'' & IR-UART TX/RX \\
active & ignored & defined by controls \\
\end{tabular}
-\end{tab}
+\end{tab}%
+%
+Use of the data signals in IR-UART mode is is further explained in
+section {cfg:iruart}.
+Note that Hackerbus can override the receiver and the CPU can therefore
+boot from (wired) UART even if the IR-UART configuration is selected.
+\todo{Also mention hypothetical debug messages from the ROM boot loader ?}
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-\subsection{IrDA mode}
+\subsection{IR deactivated}
+\label{off}
+The CPU can deactivate the transmitter and receiver, either both or
+individually, through the control signals of the IR subsystem.
+
+When deactivated, the IR subsystem must draw as little current as possible.
+The transmitter must ignore its data inputs, e.g., TX and CTS, and under no
+circumstance activate the IR LED. The receiver must not drive the RX line.
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\subsection{CIR mode}
+In CIR mode the CPU uses CTS as an active-high output for transmit data.
+The CIR module in the CPU could also use RTS for configuration purposes,
+but we seem to have no use for this and the IR circuit must ignore its
+state.
+The use of RX in CIR mode is not specified and it seems safe to use it
+similar to IrDA mode.
+TX is not used and can be assigned to other tasks. The state of TX must
+therefore be ignored when the IR circuit is in CIR mode.
+
+CIR mode configuration is illustrated in the following drawing:
+\begin{center}
+\includegraphics[scale=0.9]{cir.pdf}
+\end{center}
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+\subsection{IrDA mode}
+
+In IrDA (SIR) mode, the CPU uses TX as active-high output and RX as
+active-low input. RTS could again be used for configuration but is not
+relevant in our application and must be ignored by the IR circuit.
+CTS is not used and its state must therefore be ignored when the IR
+circuit is in IrDA mode.
+
+IrDA mode configuration is illustrated in the following drawing:
+\begin{center}
+\includegraphics[scale=0.9]{irda.pdf}
+\end{center}
+
+% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+\subsection{IR-UART mode}
+\label{cfg:iruart}
+
+IR-UART mode is identical to IrDA mode as far as the use of UART
+signals is concerned. One important difference is that the IR LED
+driver must be configured at a current that does not exceed the
+allowable continuous forward current.
+
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
\subsection{UART mode}
+The IR subsystem is inactive in UART mode and must behave as described
+in section \ref{off}.
+While we call this ``UART mode'', this configuration
+applies to any setup where the UART signals are used for some form of
+communication with the Hackerbus that does not involve IR.
+
+UART mode configuration is illustrated in the following drawing:
+\begin{center}
+\includegraphics[scale=0.9]{uart.pdf}
+\end{center}
% -----------------------------------------------------------------------------
@@ -284,7 +447,7 @@ not have to rely on external filtering and shielding.
We considered the use of a phototransistor, but found that the readily
available SMT parts all had rise and fall times in the order of 15 $\mu$s
-and did not allow improving their response by biasing the transitor's base.
+and did not allow improving their response by biasing the transistore.
% -----------------------------------------------------------------------------
@@ -343,6 +506,7 @@ before entering the RX line.
% -----------------------------------------------------------------------------
\section{Overload protection}
+\label{overload}
% Pulse width limiting
%
@@ -354,10 +518,16 @@ permitted continuous forward current, the pulse width at high current
must be limited. This shall be done by hardware, apply to any mode,
and the maximum continuous pulse width shall be 100$\mu$s.
-Since IR-UART mode can operate with a duty cycle of up to 90\%,
+\todo{We didn't discuss this property of IR-UART yet. It okay to introduce
+this ``low-current'' mode ?}
+
+Since IR-UART mode can operate with a duty cycle of up to 91\%,
IR LED current should be reduced to the LED's maximum continuous
forward current in this mode. Furthermore, the maximum nominal pulse
length at 19.2 kbps is 469 $\mu$s and pulse width limiting must
therefore not be applied.
\end{document}
+
+% Jul 09 16:47:10 <DocScrutinizer05> re any multiplexing: I expect the whole IR section to get powered down by asserting a GPIO pin to a non-POR-default state, so the IR is active by default after power on reset. By connecting the whole IR via some series resistors to the UART, I expect anything on hackerbus to be able to override what comes from IR, particularly when IR is powered down
+
diff --git a/ir/irda.fig b/ir/irda.fig
new file mode 100644
index 0000000..9867151
--- /dev/null
+++ b/ir/irda.fig
@@ -0,0 +1,82 @@
+#FIG 3.2 Produced by xfig version 3.2.5c
+Portrait
+Center
+Metric
+A3
+100.00
+Single
+-2
+1200 2
+0 32 #c0c0c0
+2 1 0 3 0 7 49 -1 -1 0.000 0 0 7 0 0 4
+ 0 900 1125 900 1125 4725 0 4725
+2 1 0 3 0 7 50 -1 -1 0.000 0 2 7 0 0 3
+ 1125 1350 2565 1350 2565 1620
+2 3 0 3 0 7 50 -1 -1 0.000 1 0 -1 0 0 4
+ 3150 1890 3150 1710 3330 1800 3150 1890
+2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 3195 1665 3240 1575
+2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 3285 1665 3330 1575
+2 1 0 3 0 7 50 -1 -1 0.000 0 1 -1 0 0 2
+ 3330 1710 3330 1890
+2 3 0 3 0 7 49 -1 -1 0.000 0 0 7 0 0 4
+ 2475 2025 2475 1575 2835 1800 2475 2025
+2 1 0 3 0 7 50 -1 -1 0.000 0 2 7 0 0 2
+ 2835 1800 3150 1800
+2 2 0 3 0 7 50 -1 -1 0.000 0 2 -1 0 0 5
+ 3015 3420 3015 3825 2835 3825 2835 3420 3015 3420
+2 1 0 3 0 7 60 -1 -1 0.000 0 0 7 0 0 2
+ 2925 4500 2925 4950
+2 1 0 3 0 7 50 -1 -1 0.000 0 2 7 0 0 2
+ 2925 3825 2925 4050
+2 1 0 3 0 7 50 -1 -1 0.000 0 2 -1 0 0 4
+ 3960 2070 4050 2070 4050 3375 3960 3375
+2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 3330 4230 3420 4185
+2 1 0 3 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 3330 4320 3420 4275
+2 2 0 3 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 2610 4050 3240 4050 3240 4500 2610 4500 2610 4050
+2 1 0 3 0 7 50 -1 -1 0.000 0 2 7 0 0 2
+ 1125 4185 2610 4185
+2 1 0 3 32 7 50 -1 -1 0.000 0 2 7 0 0 2
+ 1125 2880 3600 2880
+2 1 0 3 0 7 50 -1 -1 0.000 0 2 7 0 0 2
+ 1125 3195 3600 3195
+2 1 0 3 0 7 50 -1 -1 0.000 0 2 7 0 0 2
+ 2925 3195 2925 3420
+2 1 0 3 32 7 50 -1 -1 0.000 0 2 7 0 0 3
+ 2025 2565 2025 1710 2475 1710
+2 2 0 3 32 7 50 -1 -1 0.000 0 2 -1 0 0 5
+ 1350 2475 1755 2475 1755 2655 1350 2655 1350 2475
+2 1 0 3 32 7 50 -1 -1 0.000 0 2 -1 0 0 2
+ 1350 2565 1125 2565
+2 1 0 3 32 7 50 -1 -1 0.000 0 2 7 0 0 2
+ 1755 2565 3600 2565
+2 1 0 3 0 7 50 -1 -1 0.000 0 2 7 0 0 3
+ 2475 1890 2250 1890 2250 2250
+2 1 0 3 0 7 49 -1 -1 0.000 0 2 7 0 0 2
+ 1755 2250 3600 2250
+2 2 0 3 0 7 50 -1 -1 0.000 0 2 -1 0 0 5
+ 1350 2160 1755 2160 1755 2340 1350 2340 1350 2160
+2 1 0 3 0 7 50 -1 -1 0.000 0 2 -1 0 0 2
+ 1350 2250 1125 2250
+4 0 0 50 -1 22 12 0.0000 4 135 660 3420 1890 CIR LED\001
+4 1 0 50 -1 22 12 0.0000 4 135 165 2925 4275 IR\001
+4 1 0 50 -1 22 12 0.0000 4 105 540 2925 4410 sensor\001
+4 1 0 50 -1 22 12 0.0000 4 135 1005 2880 5130 Audio codec\001
+4 0 0 50 -1 22 12 0.0000 4 135 330 3645 2970 RTS\001
+4 0 0 50 -1 22 12 0.0000 4 135 225 3645 3285 RX\001
+4 1 0 50 -1 22 12 4.7124 4 135 840 4140 2700 Hackerbus\001
+4 1 0 50 -1 22 12 0.0000 4 135 345 540 4950 CPU\001
+4 0 0 50 -1 22 12 0.0000 4 135 330 3645 2655 CTS\001
+4 0 0 50 -1 22 12 0.0000 4 135 210 3645 2340 TX\001
+4 2 0 50 -1 22 12 0.0000 4 180 570 1080 4230 gpio(s)\001
+4 2 0 50 -1 22 12 0.0000 4 165 990 1080 3240 uart3_rx_irrx\001
+4 2 0 50 -1 22 12 0.0000 4 165 990 1080 2925 uart3_rts_sd\001
+4 2 0 50 -1 22 12 0.0000 4 165 1125 1080 2610 uart3_cts_rctx\001
+4 2 0 50 -1 22 12 0.0000 4 165 990 1080 2295 uart3_tx_irtx\001
+4 2 0 50 -1 22 12 0.0000 4 180 570 1080 1395 gpio(s)\001
+4 1 0 50 -1 22 12 0.0000 4 180 510 1575 4095 config\001
+4 1 0 50 -1 22 12 0.0000 4 180 510 1575 1260 config\001
diff --git a/ir/sys.fig b/ir/sys.fig
index 5721cee..43907e3 100644
--- a/ir/sys.fig
+++ b/ir/sys.fig
@@ -83,3 +83,5 @@ Single
4 2 0 50 -1 22 12 0.0000 4 165 1125 1080 2610 uart3_cts_rctx\001
4 2 0 50 -1 22 12 0.0000 4 165 990 1080 2295 uart3_tx_irtx\001
4 2 0 50 -1 22 12 0.0000 4 180 570 1080 1395 gpio(s)\001
+4 1 0 50 -1 22 12 0.0000 4 180 510 1575 1260 config\001
+4 1 0 50 -1 22 12 0.0000 4 180 510 1575 4095 config\001
diff --git a/ir/uart.fig b/ir/uart.fig
new file mode 100644
index 0000000..1c7b762
--- /dev/null
+++ b/ir/uart.fig
@@ -0,0 +1,82 @@
+#FIG 3.2 Produced by xfig version 3.2.5c
+Portrait
+Center
+Metric
+A3
+100.00
+Single
+-2
+1200 2
+0 32 #c0c0c0
+2 1 0 3 0 7 50 -1 -1 0.000 0 2 7 0 0 3
+ 1125 1350 2565 1350 2565 1620
+2 1 0 3 0 7 50 -1 -1 0.000 0 2 -1 0 0 4
+ 3960 2070 4050 2070 4050 3375 3960 3375
+2 1 0 3 0 7 50 -1 -1 0.000 0 2 7 0 0 2
+ 1125 4185 2610 4185
+2 1 0 3 0 7 49 -1 -1 0.000 0 2 7 0 0 2
+ 1755 2565 3600 2565
+2 2 0 3 0 7 50 -1 -1 0.000 0 2 -1 0 0 5
+ 1350 2475 1755 2475 1755 2655 1350 2655 1350 2475
+2 1 0 3 0 7 49 -1 -1 0.000 0 0 7 0 0 4
+ 0 900 1125 900 1125 4725 0 4725
+2 1 0 3 0 7 50 -1 -1 0.000 0 2 -1 0 0 2
+ 1350 2565 1125 2565
+2 2 0 3 0 7 50 -1 -1 0.000 0 2 -1 0 0 5
+ 1350 2160 1755 2160 1755 2340 1350 2340 1350 2160
+2 1 0 3 0 7 50 -1 -1 0.000 0 2 -1 0 0 2
+ 1350 2250 1125 2250
+2 1 0 3 0 7 50 -1 -1 0.000 0 2 7 0 0 2
+ 1125 2880 3600 2880
+2 1 0 3 32 7 50 -1 -1 0.000 0 2 7 0 0 3
+ 2025 2565 2025 1710 2475 1710
+2 1 0 3 32 7 50 -1 -1 0.000 0 2 7 0 0 3
+ 2475 1890 2250 1890 2250 2250
+2 1 0 3 0 7 49 -1 -1 0.000 0 2 7 0 0 2
+ 1755 2250 3600 2250
+2 1 0 3 32 7 50 -1 -1 0.000 0 2 7 0 0 2
+ 2835 1800 3150 1800
+2 2 0 3 32 7 50 -1 -1 0.000 0 2 -1 0 0 5
+ 3015 3420 3015 3825 2835 3825 2835 3420 3015 3420
+2 1 0 3 32 7 50 -1 -1 0.000 0 2 7 0 0 2
+ 2925 3195 2925 3420
+2 1 0 3 32 7 50 -1 -1 0.000 0 2 7 0 0 2
+ 2925 3825 2925 4050
+2 1 0 3 32 7 60 -1 -1 0.000 0 0 7 0 0 2
+ 2925 4500 2925 4950
+2 2 0 3 32 7 49 -1 -1 0.000 0 0 -1 0 0 5
+ 2610 4050 3240 4050 3240 4500 2610 4500 2610 4050
+2 3 0 3 32 7 49 -1 -1 0.000 0 0 7 0 0 4
+ 2475 2025 2475 1575 2835 1800 2475 2025
+2 3 0 3 32 7 49 -1 -1 0.000 1 0 -1 0 0 4
+ 3150 1890 3150 1710 3330 1800 3150 1890
+2 1 0 3 32 7 50 -1 -1 0.000 0 1 -1 0 0 2
+ 3330 1710 3330 1890
+2 1 0 3 32 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 3195 1665 3240 1575
+2 1 0 3 32 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 3285 1665 3330 1575
+2 1 0 3 32 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 3330 4230 3420 4185
+2 1 0 3 32 7 50 -1 -1 0.000 0 0 -1 0 0 2
+ 3330 4320 3420 4275
+2 1 0 3 0 7 49 -1 -1 0.000 0 2 7 0 0 2
+ 1125 3195 3600 3195
+4 0 0 50 -1 22 12 0.0000 4 135 660 3420 1890 CIR LED\001
+4 1 0 50 -1 22 12 0.0000 4 135 165 2925 4275 IR\001
+4 1 0 50 -1 22 12 0.0000 4 105 540 2925 4410 sensor\001
+4 1 0 50 -1 22 12 0.0000 4 135 1005 2880 5130 Audio codec\001
+4 0 0 50 -1 22 12 0.0000 4 135 330 3645 2970 RTS\001
+4 0 0 50 -1 22 12 0.0000 4 135 225 3645 3285 RX\001
+4 1 0 50 -1 22 12 4.7124 4 135 840 4140 2700 Hackerbus\001
+4 1 0 50 -1 22 12 0.0000 4 135 345 540 4950 CPU\001
+4 0 0 50 -1 22 12 0.0000 4 135 330 3645 2655 CTS\001
+4 0 0 50 -1 22 12 0.0000 4 135 210 3645 2340 TX\001
+4 2 0 50 -1 22 12 0.0000 4 180 570 1080 4230 gpio(s)\001
+4 2 0 50 -1 22 12 0.0000 4 165 990 1080 3240 uart3_rx_irrx\001
+4 2 0 50 -1 22 12 0.0000 4 165 990 1080 2925 uart3_rts_sd\001
+4 2 0 50 -1 22 12 0.0000 4 165 1125 1080 2610 uart3_cts_rctx\001
+4 2 0 50 -1 22 12 0.0000 4 165 990 1080 2295 uart3_tx_irtx\001
+4 2 0 50 -1 22 12 0.0000 4 180 570 1080 1395 gpio(s)\001
+4 1 0 50 -1 22 12 0.0000 4 180 510 1575 4095 config\001
+4 1 0 50 -1 22 12 0.0000 4 180 510 1575 1260 config\001