Commit 99115c26 authored by Benoit Rat's avatar Benoit Rat

doc: update for v1.1 release

update new packages
Correct some bugs
Add the new IO mode for each channel
Improve GM explanation
Correct /tools/ to ./tools/ so we can use copy/paste
parent 1517e0b3
% WR SPEC Starting Kit
% Benoit RAT, Javier Diaz (Seven Solutions)
% Benoit RAT, Jose Jimenez, Javier Diaz (Seven Solutions)
Introduction
=============
......@@ -102,8 +102,8 @@ in the package[^standardssk] :
* AXGE-1254-0531 (blue)
* AXGE-3454-0531 (violet)
* 1x LC-LC cable (2m)
* 2x LEMO cable (2m)
* 2x LEMO-BNC Adaptor
* 3x LEMO cable (2m)
* 3x LEMO-BNC Adaptor
![The components of the starting kit](ssk_components.jpg)
......@@ -169,7 +169,7 @@ The first step is to install all the tools that you will need:
You can also run this command[^debian]:
~~~~{.sh}
sudo apt-get install git build-essential linux-source minicom texinfo emacs texlive
sudo apt-get install git build-essential linux-headers-$(uname -r) linux-source minicom texinfo emacs texlive
~~~~~~~~~
[^debian]: This sample command is for debian's like distributions.
......@@ -192,7 +192,7 @@ includes the [spec-sw] project.
>:$ cd wr-starting-kit
## Checkout the stable release
>:$ git checkout -b wr-starting-kit-v1.0 wr-starting-kit-v1.0
>:$ git checkout -b wr-starting-kit-v1.1 wr-starting-kit-v1.1
## Obtain the spec-sw project using submodules
>:$ git submodule init
......@@ -280,13 +280,17 @@ You need to install the gateware[^version] to `/lib/firmware/fmc`
### Manual installation
First you need to download the gateware/firmware files from our website:
<http://www.sevensols.com/dl/wr-starting-kit/bin/v1.1.tar.gz>
~~~~{.sh}
## Create the gateware folder
>:$ mkdir firmware
>:$ cd firware
## Download all the firware files (from OHWR website).
>:$ wget -nv http://www.ohwr.org/attachments/download/1815/wr-starting-kit-v1.0_gw.tar.gz -O- | tar -xvz
## Extract to the gateware folder
>:$ tar -xzf wr-starting-kit-v1.1_gw.tar.gz -C ./firmware
~~~~~~~~~~~
Once you have the file you need to install them to your system in order to make them load automatically
......@@ -382,8 +386,8 @@ the information is given for the next versions. See [Known Bugs sections](#known
Thus, for each board you can open a terminal and run the following command:
~~~~~{.sh}
>:$ sudo tools/spec-vuart -b 02 #For the first SPEC board
>:$ sudo tools/spec-vuart -b 03 #For the second SPEC board
>:$ sudo ./tools/spec-vuart -b 02 #For the first SPEC board
>:$ sudo ./tools/spec-vuart -b 03 #For the second SPEC board
~~~~~~~~~~
......@@ -558,6 +562,8 @@ the same order as the experiments.
> **Notes:** Before each experiment you should make sure that you set
up your boards in *master/slave* mode and that the PTP daemons are running on both.
You cand find how to do it in subsection [4.3](#configure-in-slave-master-mode).
A basic explanation is included in [Frequently Added Questions](#frequently-added-questions) section (first one).
Playing with the DIO channels
......@@ -587,20 +593,53 @@ time.
The available modes are:
* `I/i`: input (`I` with 50-ohm termination resistor and `i` without)
* `0/1`: output, steady state fixed at `0` low or `1` high.
* `D/d`: DIO core output (`D` with 50-ohm termination resistor and `d` without)
* `I/i`: Input
* `0/1`: Output, steady state fixed at `0` low or `1` high.
* `D/d`: DIO core output
* `P/p`: Output PPS (Pulse Per Second) Generator from PTP core
* `C/c`: Clock Input to PTP core: (only for channel 4, allow to input a high frequency signal without interruption throwing)
>> Notes: If the Letter is capitalized the I/O channel is connected to 50-ohm termination resistor, otherwise it is not. i.e, The `I` is input with 50-ohm termination resistor and `i` is without it.
For example you can set it up like this
~~~~~{.sh}
## Configure channel 0 as input with termination, 1 as input, 4 as fixed low
>:$ sudo wr-dio-cmd wr0 mode Ii--0
>:$ sudo ./tools/wr-dio-cmd wr0 mode Ii--0
~~~~~~~~~~~~~~~~
> ***Notes:*** please note that the `pulse` command activates the [FMCDIO] mode (without changing the termination)
### Default Mode
After reprogramming/rebooting the FGPA, the channels are set up by default as:
#. Channel 0 (connector #1) low state: `0`.
#. Channel 1 (connector #2) same as ch0: low state: `0`.
#. Channel 2 (connector #3) output a PPS signal: `P/p`.
#. Channel 3 (connector #4) is configured as input with termination impedance: `P/p`.
#. Channel 4 (connector #5) is in Clock Mode with termination: `C`.
To reset to the default mode you can reset/reprogram the FPGA or set it back with:
~~~~~{.sh}
## Revert back to default mode
>:$ sudo ./tools/wr-dio-cmd wr0 mode 00PIC
~~~~~~~~~~~~~~~~
### Disabling PPS on channel 2
> ***Important:*** For the following experiments we recommend to disable PPS mode on channel 2
this can easily be done by setting it on another working mode.
~~~~~{.sh}
## Disable PPS on channel 2
>:$ sudo ./tools/wr-dio-cmd wr0 mode 2 0
~~~~~~~~~~~~~~~~
### Generating pulse
The command is used in the following formats:
......@@ -614,16 +653,19 @@ You should plug the LEMO cable in the connector #5 (channel 4), and connect the
Finally you need to active a trigger pulse in your oscilloscope. Then you can try the following commands:
~~~~~{.sh}
## Set channel 4 as Input
>:$ sudo ./tools/wr-dio-cmd wr0 mode 4 D
## Pulse channel 4 for 0.1 seconds now
>:$ sudo wr-dio-cmd wr0 pulse 4 .1 now
>:$ sudo ./tools/wr-dio-cmd wr0 pulse 4 .1 now
## Pulse for 10 microseconds in the middle of the next second
>:$ sudo wr-dio-cmd wr0 pulse 4 .00001 +1.5
>:$ sudo ./tools/wr-dio-cmd wr0 pulse 4 .00001 +1.5
## Pulse for 1ms at 17:00 today
## Set the datetime of the next event (60 seconds from now)
## NOTE: this only work if the date is correctly set in the master SPEC,
>:$ sudo wr-dio-cmd wr0 pulse 4 .001 $(date +%s --date 17:00)
>:$ sudo ./tools/wr-dio-cmd wr0 pulse 4 .001 $(date +%s --date 17:00)
~~~~~~~~
......@@ -633,7 +675,7 @@ Finally you need to active a trigger pulse in your oscilloscope. Then you can tr
Once you have generated the pulse you can retrieve its timestamp by executing:
~~~~~{.sh}
>:$ sudo wr-dio-cmd wr0 stamp 4
>:$ sudo ./tools/wr-dio-cmd wr0 stamp 4
ch 4, 378.788588536
ch 4, 381.268701864
ch 4, 387.284885816
......@@ -645,6 +687,9 @@ ch 4, 534.500000000
ch 4, 542.500000000
~~~~~~~~
> ***Notes:*** If you see other timestampings messages coming from channel 2 this mean you don't
have disable the PPS mode. Check [Disabling PPS](#disabling-pps-on-channel-2) section.
### Time stamping input & output.
......@@ -657,25 +702,26 @@ The configuration is done as indicated in the figure below:
![Time-stamping configuration](ssk_playdio.png)
~~~~~{.sh}
## Configure channel 2 of both boards (wr0 & wr1) as input with termination
>:$ sudo wr-dio-cmd wr0 mode 2 I
>:$ sudo wr-dio-cmd wr1 mode 2 I
## Configure 1 & 5 as ouput and channel 3 as input with termination on wr0.
>:$ sudo ./tools/wr-dio-cmd wr0 mode D-I-D
## Configure channel 2 as input on wr1
>:$ sudo ./tools/wr-dio-cmd wr1 mode 2 I
## Then flush the previous timestamp
>:$ sudo wr-dio-cmd wr0 stamp &> /dev/null
>:$ sudo wr-dio-cmd wr1 stamp &> /dev/null
>:$ sudo ./tools/wr-dio-cmd wr0 stamp &> /dev/null
>:$ sudo ./tools/wr-dio-cmd wr1 stamp &> /dev/null
## Schedule the pulse to the next common event on two outputs
>:$ sudo wr-dio-cmd wr0 pulse 0 .00001 +2
>:$ sudo wr-dio-cmd wr0 pulse 4 .00001 +2
>:$ sudo ./tools/wr-dio-cmd wr0 pulse 0 .00001 +2
>:$ sudo ./tools/wr-dio-cmd wr0 pulse 4 .00001 +2
## Then (after 60s), you should run stamp on the wr0
>:$ sudo wr-dio-cmd wr0 stamp
>:$ sudo ./tools/wr-dio-cmd wr0 stamp
ch 0, 2267.500000000
ch 2, 2267.500000008
ch 4, 2270.500000000
>:$ sudo wr-dio-cmd wr1 stamp
>:$ sudo ./tools/wr-dio-cmd wr1 stamp
ch 2, 2270.500000008
~~~~~~~~~~~~~~~~~
......@@ -685,7 +731,7 @@ the timestamp between sending a pulse and receiving is of 8 nanoseconds[^8ns] fo
This is a very simple example to show how the two [SPEC]s are synchronized.
[^dionum]: The connector on the [FMC-DIO] panel are enumerated from 1 to 5 and correspond to the channel 0 to 4 on the `wr-dio-cmd`.
[^dionum]: The connector on the [FMC-DIO] panel are enumerated from #1 to #5 and correspond to the channel 0 to 4 on the `wr-dio-cmd`.
[^8ns]: The DIO core work at a frequency of 125Mhz, therefore the minimum difference between two timestamped events is of 8ns.
However with the next experiment you will find out that the synchronization is better.
......@@ -710,12 +756,14 @@ Once the synchronization is enabled, you just need to run the PPS from the comma
This program just fires a 1ms-long *pps* pulse on one of the output
channels.
> ***Notes:*** To generate a PPS signal the PLL has to be lock. See "I can't generate a PPS signal" on [Frequently Added Questions](#frequently-added-questions) .
~~~~~~{.sh}
## run pps on channel 2 of the default SPEC card
>:$ sudo tools/wr-dio-pps wr0 4
## run pps on channel 4 of the default SPEC card
>:$ sudo ./tools/wr-dio-cmd wr0 mode 4 P
## run pps on channel 0 of the "second" card
>:$ sudo tools/wr-dio-pps wr1 0
>:$ sudo ./tools/wr-dio-cmd wr1 mode 0 P
~~~~~~~~~~
......@@ -729,11 +777,11 @@ retrieved from two different *simple-DIO* cards.
To avoid the unstable signal after the pps go high you can
add a 50-ohm resistor termination if the oscilloscope allows it.
To stop the PPS you need to set the channel in output mode (low/high)
To stop the PPS you need to set the channel in any other mode. For instance, in output mode (low/high)
~~~~~{.sh}
sudo tools/wr-dio-cmd wr0 mode 4 0
sudo tools/wr-dio-cmd wr1 mode 0 0
sudo ./tools/wr-dio-cmd wr0 mode 4 0
sudo ./tools/wr-dio-cmd wr1 mode 0 0
~~~~~~~~
> ***Notes:*** In some cases, it
......@@ -799,11 +847,11 @@ sends the forward frame and reports data as soon as it gets a reply.
~~~~~{.sh}
## On a terminal run
>:$ sudo tools/stamp-frame wr0 listen
>:$ sudo ./tools/stamp-frame wr0 listen
tools/stamp-frame: Using interface wr0, with all timestamp options active
## On another terminal (maybe on another host) run
>:$ sudo tools/stamp-frame wr1
>:$ sudo ./tools/stamp-frame wr1
tools/stamp-frame: Using interface wr1, with all timestamp options active
timestamp T1: 1891.948736656
timestamp T2: 1892.038390176
......@@ -922,28 +970,29 @@ delay of 50 microseconds).
### The setup
Then we should run the "dumb" agent[^agentbg] on the slave board in charge of forwarding *ioctl* packet to the *DIO* core:
Then we should run the "dumb" agent on the slave board in charge of forwarding *ioctl* packet to the *DIO* core:
$ sudo wr-dio-agent wr1 &
~~~~~~{.sh}
>:$ sudo ./tool/wr-dio-agent wr1 &
~~~~~~~~~~
Then you need to connect the output of the generator[^fake100hz] to channel 0 of the master [SPEC+FMCDIO] board.
The generated waveform should be a 0-5V pulse at ~100Hz (5ms at 5V then 5ms at 0V)
<!-- TOJAVI: le hemos probado y no hemos tenido problema aqui-->
[^fake100hz]: If you lack a wave form generator, you can make an output pulse with
`wr-dio-pps` or other means and use it as a trigger. Check the [Two PCs example](#two-pcs-example).
`wr-dio-cmd <if> mode <ch> P` or other means and use it as a trigger. Check the [Two PCs example](#two-pcs-example).
You should setup the channel 0 as input and check if the 100Hz signal is correctly timestamped:
~~~~~~{.sh}
## Set channel 0 of master board as Input.
>:$ sudo wr-dio-cmd wr0 mode 0 I
## Set channel 0 of master board as Input and disable PPS signal (if the FPGA is reflashed).
>:$ sudo ./tools/wr-dio-cmd wr0 mode I-0--
## Retrieved the time stamped value
>:$ sudo wr-dio-cmd wr0 stamp
>:$ sudo ./tools/wr-dio-cmd wr0 stamp
ch 0, 3573.281851462
ch 0, 3573.291851460
ch 0, 3573.301851460
......@@ -956,7 +1005,7 @@ ch 0, 3573.341851454
Here we can see that we have correctly timestamped each 10ms (+/- 10ns)[^10ns].
[^10ns]: The 10 nanosecon jitter is due to our waveform generators used in the experiments.
[^10ns]: The 10 nanoseconds jitter is due to our waveform generators used in the experiments.
This should disappear by using a good quality waveform generator.
......@@ -965,8 +1014,14 @@ event on channel 0 and replicate them with a delay of 1ms
on both the local (channel 3) and the remote card (channel 1)
~~~~~~{.sh}
## Set local3 as Output
>:$ sudo ./tools/wr-dio-cmd wr0 mode 3 D
## Set remote1 as Output (and disable 2)
>:$ sudo ./tools/wr-dio-cmd wr1 mode -D0--
## Creating the ruler to forward from input 0 to local3 and remote1
>:$ sudo wr-dio-ruler wr0 IN0 L3+0.001 R1+0.001
>:$ sudo ./tools/wr-dio-ruler wr0 IN0 L3+0.001 R1+0.001
wr-dio-ruler: configured for local channel 3, delay 0.001000000
wr-dio-ruler: configured for remote channel 1, delay 0.001000000
~~~~~~~~~~~~~
......@@ -977,7 +1032,7 @@ To check if the experiment works well you can compare the timestamp of the two o
~~~~~~~~{.sh}
## Checking the timestamp on local ouput
>:$ sudo wr-dio-cmd wr0 stamp 3
>:$ sudo ./tools/wr-dio-cmd wr0 stamp 3
ch 3, 5340.004864960
ch 3, 5340.014864960
ch 3, 5340.024864968
......@@ -985,7 +1040,7 @@ ch 3, 5340.034864964
...
## Checking the timestamp on remote ouput
>:$ sudo wr-dio-cmd wr1 stamp 1
>:$ sudo ./tools/wr-dio-cmd wr1 stamp 1
ch 1, 5340.004864962
ch 1, 5340.014864960
ch 1, 5340.024864968
......@@ -1021,28 +1076,28 @@ channel 0.
~~~~~{.sh}
>spusa:# wr-dio-pps wr0 0
>spusa:# sudo ./tools/wr-dio-cmd wr0 mode 0 P
>tornado:# wr-dio-agent wr0 &
>tornado:# sudo ./tools/wr-dio-agent wr0 &
>spusa:# wr-dio-ruler wr0 IN4 L3+.001 R4+.001 R2+.001
>spusa:# ./tools/wr-dio-ruler wr0 IN4 L3+.001 R4+.001 R2+.001
wr-dio-ruler: configured for local channel 3, delay 0.001000000
wr-dio-ruler: configured for remote channel 4, delay 0.001000000
wr-dio-ruler: configured for remote channel 2, delay 0.001000000
[... wait a few seconds ...]
>spusa:# wr-dio-cmd wr0 stamp 3
>spusa:# ./tools/wr-dio-cmd wr0 stamp 3
ch 3, 385.001000000
ch 3, 386.001000000
ch 3, 387.001000000
ch 3, 388.001000000
>tornado:# wr-dio-cmd wr0 stamp 2
>tornado:# ./tools/wr-dio-cmd wr0 stamp 2
ch 2, 385.001000000
ch 2, 386.001000000
ch 2, 387.001000000
ch 2, 388.001000000
>tornado:# wr-dio-cmd wr0 stamp 4
>tornado:# ./tools/wr-dio-cmd wr0 stamp 4
ch 4, 385.001000000
ch 4, 386.001000000
ch 4, 387.001000000
......@@ -1132,12 +1187,14 @@ You will therefore obtain your golden firmware called as `spec-init.bin`
WRPC-SW (LM32 firmware)
-----------------------
> *Dep*: lm32 compiler
> ***Notes***: The steps in this section are not needed as we already provide the `wrc.ram` in the [wr-nic] repository.
However we provide here a simple resume of the steps required to compile the firmware specifically for the wr-nic.
You should also look at the [wrpc.pdf] to understand how to use it and
how to compile new firmware for other configurations.
You can download it from [wr-nic-v1.0.tar.gz](http://www.ohwr.org/projects/wr-nic/files) file or you can try to compile it following the instructions below:
You can download it from [wr-nic-v1.1.tar.gz](http://www.ohwr.org/projects/wr-nic/files) file or you can try to compile it following the instructions below:
You first need to install the **lm32** compiler as suggested in
[wrpc.pdf], and then you need to compile it using the specific configuration as bellow:
......@@ -1151,7 +1208,7 @@ git clone git://ohwr.org/hdl-core-lib/wr-cores/wrpc-sw.git
cd wrpc-sw
## Checkout the stable release
git checkout -b wr-nic-v1.0 wr-nic-v1.0
git checkout -b wr-nic-v1.1 wr-nic-v1.1
~~~~~~~~~~
......@@ -1178,25 +1235,27 @@ cp wrc.ram <wr_root_folder>/wr-nic/syn/spec
WR-NIC (HDL-gateware)
----------------------
> *Dep*: hdlmake, Xilinx ISE 14
This step shows us how to prepare the WR-NIC bitstream ([SPEC+FMCDIO]) with
the wrpc-sw (`wrc.ram` file) embedded inside.
~~~~~~{.sh}
~~~~~~{.bash}
## Checkout the code
git clone git://ohwr.org/white-rabbit/wr-nic.git
cd wr-nic
git checkout -b wr-nic-v1.1 wr-nic-v1.1
## Checkout the stable release
git checkout -b wr-nic-v1.0 wr-nic-v1.0
## Create and update the submodules
git submodule init
git submodule update
## Go to the main directory
cd wr-nic/syn/spec/
## Synthetize using hdlmake
hdlmake --fetch
hdlmake --fetch
hdlmake -l
hdlmake --make-ise --ise-proj
make
~~~~~~~~~~~
You should finally obtain the bitstream to import in your [FMC] driver folder.
......@@ -1215,9 +1274,24 @@ free-running oscillator as a time reference. However, you can also
discipline your Master [SPEC] with external 10 MHz and 1-PPS signal by
connecting them to the appropriate LEMO connectors of [FMC-DIO] board:
![Grandmaster setup](ssk_grandmaster.png)
The requirement for the applied signals are:
* ~[1.5V to 3V][^aroundval] without termination
* ~[2.5V to 4V] with 50Ohm termination.
* PPS pulse width must be at least one 10MHz period (>100ns).
[^aroundval]: These values are given on an indicative basis because they depend on the source and
connection you are using.
An example of typical signal generated for GM mode is displayed below:
* Green signal is PPS.
* Pink signal is 10MHz.
![Grandmaster signals](ssk_gm_signals.png)
Then in the wrc console just execute the following commands:
~~~~~~{.sh}
......@@ -1225,6 +1299,36 @@ wrc# mode grandmaster
wrc# ptp start
~~~~~~~~~~~~~
And you should obtained:
~~~~~~{.sh}
SPLL_Init: running as GrandMaster, 1 ref channels, 2 out channels
PLL locking .................. LOCKED
~~~~~~~~~~~~~
For more information about grandmaster mode you can take a look at: [wr_external_reference.pdf].
This document has been written for the WR switch, but timing/accuracy/stability requirements are
similar for the SPECs.
### PCIe mode
By default the SPEC+DIO should be configured to be run in GM setup, but if you are not sure please
reset the default value. See [Default Mode](#default-mode) Section.
### Standalone mode
You can also run GM in a full standalone mode in order to transmit WR clock without the need of a PC.
* The setup of the cable is exactly the same as above, and you do not need to setup the mode because it is
correctly configured for GM by default at power up.
* Then you need to run grandmaster mode from wrc console, as above.
* (Optional) Finally, if you need to keep this configuration at power up, you can write a small script
on the EEPROM to boot in grandmaster mode.
Please refer to *Writing EEPROM and calibration* Section of the [wrpc.pdf] document.
FAQS & Bugs
============
......@@ -1306,6 +1410,13 @@ We also recommand the lecture of the online FAQ:
* <http://www.ohwr.org/projects/wr-cores/wiki/Wrpc_faq>
### I can't generate a PPS signal or any point in section 5 is not working
In all of those cases the PLL has to be locked. That means your card has to be either in Master Mode, Grand Master or Slave Mode.
When you have only one card (or some but unconnected) it should be working as Free Running Master. If you have two of them (or more), one of them has to work as master, the others as Slaves and all of them have to be synced via PTP as explained en section [4.3](#configure-in-slave-master-mode). To say that is running Grand Master Mode is to make sure the PLL has already been locked to the external reference (see [Appendix](#appendix)).
### I don't see the interface using ifconfig
Please check if you see them using `ifconfig -a`, if you see them by using the `-a` option you just need
......@@ -1358,6 +1469,14 @@ If you have blocked your two boards in calibration mode and they stay in this mo
you might need to format the EEPROM.
### I can't detect any level on my inputs.
You should first try to desactivate the termination resistance that can
consume most of the current if this one is really low.
Otherwise you should configure the DAC to setup a different threshold, however this option is not actually implemented.
### How can I format the EEPROM?
Generate an empty file of 64kb (the extension must be .bin)
......@@ -1389,6 +1508,12 @@ Many people ask us about the latency in the WR-NIC.
The answer depends really on what you want to measure: The only "relevant" delay might be the time between the SFP and the PCIe which is less than 20 cycles.
However the delay introduced by your nondeterministic OS is much more important.
### Why am I getting "Warning: tx timestamp never became available" message form the UART?
This warning seems to appear after unnistalling wr-nic driver if PTP has already been started. It can be easily solved by reinstalling the driver.
After that the device keeps working as was previously specified.
Glossary
===========
......@@ -1447,6 +1572,7 @@ References
* SFPs information <http://www.ohwr.org/projects/white-rabbit/wiki/SFP>
* White Rabbit Calibration: <http://www.ohwr.org/documents/213>
* [spec-2-spec]: SPEC-2-SPEC demo
* [wr_external_reference.pdf]: How to use the grandmaster mode in the switch.
<!-- List of links -->
......@@ -1459,7 +1585,8 @@ References
[wrpc-sw]: http://www.ohwr.org/projects/wrpc-sw/
[spec-golden]: http://www.ohwr.org/projects/spec/repository/show/trunk/hdl/golden
[spec-2-spec]: http://www.ohwr.org/projects/wr-cores/wiki/spec-to-spec
[wrpc.pdf]: http://www.ohwr.org/attachments/download/1762/wr-nic-v1.0.pdf
[wr-nic.pdf]: http://www.ohwr.org/attachments/download/1761/wr-nic-v1.0.tar.gz
[spec-sw.pdf]: http://www.ohwr.org/attachments/download/1760/spec-sw-2012-12-14-v2.2.pdf
[wrpc.pdf]: http://www.sevensols.com/dl/wrpc/latest_stable.pdf
[wr-nic.pdf]: http://www.sevensols.com/dl/wr-nic/latest_stable.pdf
[spec-sw.pdf]:http://www.sevensols.com/dl/spec-sw/latest_stable.pdf
[fmc-bus.pdf]: http://www.ohwr.org/attachments/download/1656/fmc-bus-2012-10-12-v1.0.pdf
[wr_external_reference.pdf]: http://www.ohwr.org/attachments/1647/wr_external_reference.pdf
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment