summaryrefslogtreecommitdiffstats
path: root/firmware/fx3/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/fx3/README.md')
-rw-r--r--firmware/fx3/README.md84
1 files changed, 84 insertions, 0 deletions
diff --git a/firmware/fx3/README.md b/firmware/fx3/README.md
new file mode 100644
index 000000000..e2e8a13d4
--- /dev/null
+++ b/firmware/fx3/README.md
@@ -0,0 +1,84 @@
+INSTRUCTIONS
+================================
+
+# Building the B2xx FX3 Firmware
+
+The USRP B200 and B210 each use the Cypress FX3 USB3 PHY for USB3 connectivity.
+This device has an ARM core on it, which is programmed in C. This README will
+show you how to build our firmware source
+
+**A brief "Theory of Operations":**
+The host sends commands to the FX3, our USB3 PHY, which has an on-board ARM
+which runs the FX3 firmware code (hex file). That code translates commands into
+SPI commands to/from the AD9361. The SPI lines run through the FPGA (bin or bit
+file), where they are level-translated, and then head to the AD9361. Note that
+the FPGA takes no action on these SPI lines. They are passive pass-throughs.
+
+## Setting up the Cypress SDK
+
+In order to compile the USRP B200 and B210 firmware, you will need the FX3 SDK
+distributed by the FX3 manufacturer, Cypress Semiconductor. You can download the
+[FX3 SDK from here](http://www.cypress.com/?rID=57990).
+
+Once you have downloaded it, extract the ARM cross-compiler sub-directory from
+the zip file and put it somewhere useful. The highest level directory you need
+is `arm-2011.03/`.
+
+Now that you have extracted the cross compilation toolchain, you need to set up
+some environment variables to tell the B2xx `makefile` where to look for the
+tools. These variables are:
+
+```
+ $ export ARMGCC_INSTALL_PATH=<your path>/arm-2011.03
+ $ export ARMGCC_VERSION=4.5.2
+```
+
+Now, you'll need to set-up the Cypress SDK, as well. In the SDK, navigate to
+the `firmware` directory, and copy the following sub-directories into
+`uhd.git/firmware/fx3`: `common/`, `lpp_source/`, `u3p_firmware/`.
+
+Your directory structure should now look like:
+
+```
+uhd.git/
+ |
+ --firmware/
+ |
+ --fx3/
+ |
+ --ad9361/ # From UHD
+ --b200/ # From UHD
+ --common/ # From Cypress SDK
+ --gpif2_designer/ # From UHD
+ --lpp_source/ # From Cypress SDK
+ --u3p_firmware/ # From Cypress SDK
+ --README.md # From UHD
+```
+
+
+## Applying the Patch to the Toolchain
+
+Now, you'll need to apply a patch to a couple of files in the Cypress SDK. Head
+into the `common/` directory you just copied from the Cypress SDK, and apply the
+patch `b200/fx3_mem_map.patch`.
+
+```
+ # cd uhd.git/firmware/common/
+ $ patch -p2 < ../b200/fx3_mem_map.patch
+```
+
+If you don't see any errors print on the screen, then the patch was successful.
+
+## Building the Firmware
+
+Now, you should be able to head into the `b200/` directory and simply build the
+firmware:
+
+```
+ $ cd uhd.git/firmware/fx3/b200
+ $ make
+```
+
+It will generate a `usrp_b200_fw.hex` file, which you can then give to UHD to
+program your USRP B200 or USRP B210.
+