mirror of
git://projects.qi-hardware.com/ben-blinkenlights.git
synced 2025-04-21 12:27:27 +03:00
A series of measurements of
A# ./ubb-patgen -f 41kHz 1
A# ./ubb-patgen -f 41kHz -c
B# ./ubb-la -f 12 -n 10
yielded these results:
1 3 gap 2 0 1 3
------- ------- ------- ------- ------- ------- -------
106 77 11 98
120 78 11 83
134 79 11 68
3 79 11 53
18 78 11 39
33 78 11 24
47 79 11 9
62 79 5 6 140 147
77 79 11 125 147
Where for example the last entry corresponds to
...1{146}3{77}
0{11}1{125}3{147}...
Since this looks as if DAT1 was 1 for 77 samples before the first capture
ended, was 0 throughout the pulling low of DAT0 (11 cycles), stayed low
for another 125 cycles, and then went high for the 146.29 nominal
half-period, we thus get a gap length of 2*146-77-11-125 = 79
UBB pattern capture
===================
ubb-la is the counterpart of ubb-patgen: it captures a pattern on DATx
and prints on standard output what it has received. The output format
is the same as the one used by ubb-patgen, i.e., hex digits with
repetitions indicated by {number}.
ubb-la is currently a proof of concept implementation and therefore
only provides the most basic functions.
Capture frequencies are the same as for ubb-patgen. The sample size is
fixed at 8008 samples.
Sample rate
-----------
The frequency in MHz is selected with the option -f. For example, this
would select 10.5 MHz:
# ubb-la -f 10.5
bus 10.5 MHz controller 168 MHz
Note that - unlike ubb-patgen - there are no SI prefixes or rounding
modes to select. ubb-la simply picks the frequency closest to the one
specified.
A list of available frequencies can be obtained with
# ubb-patgen -q
The default sample rate is 1 MHz.
Clock output
------------
The CLK line (CLK/TRIG) is usually configured as an input. If the
option -C is present, ubb-la outputs the MMC bus clock instead.
Trigger
-------
Capture only starts after detection of a trigger. By default, ubb-la
triggers when the CLK/TRIG line changes.
The trigger pattern can be selected with the option -t pattern/mask,
where ubb-la triggers when (pins & mask) == pattern
For example,
# ubb-la -t 2/3
would monitor the lines DAT0 and DAT1 and trigger when DAT0 is 0
while DAT1 is 1. In the pattern and mask, DAT0 has the value 1, DAT1
is 2, DAT2 is 4, DAT3 is 8, and CLK/TRIG is 16.
ubb-la turns off interrupts while waiting for a trigger. The only
ways to exit are either detection of a trigger or a button press on
the Ben's keyboard. In the latter case, ubb-la exits immediately and
does not capture any samples.
When the trigger is present, it takes roughly 550 +/- 250 ns plus one
sample time until the first sample is taken.
Known bugs
----------
At higher sample rates (observed at 42 and 56 MHz; not observed at
24 MHz), the first sample may have an incorrect value and should be
ignored.
Interrupting ubb-la while a capture is in progress could cause
memory corruption.
The passive ubb-la circuit loads the inputs such that they will only
work if there is a strong driver. In particular, signals held only by
a pull-up or pull-down resistor are likely to be compromised.
The respective resistive loads are:
Signal To GND To 3.3 V
(max) (max)
------------------------
DAT0 1.1 k 11 k
DAT1-3 10 k 10 k
TRIG 330 k 330 k