diff options
author | Ashish Chaudhari <ashish@ettus.com> | 2015-04-23 15:48:00 -0700 |
---|---|---|
committer | Ashish Chaudhari <ashish@ettus.com> | 2015-04-23 15:48:00 -0700 |
commit | 95681449a363de2b3c4f5c9a12c19cfe2633e85b (patch) | |
tree | 4bacfb14e4b68a1d1f5b5413ed12545c6a5c2131 /firmware | |
parent | 407e30867802fe67bf7fc3c7e5d7e53fb84110c4 (diff) | |
parent | 0eac5ac12dd92c90921633f89e2228972f74aade (diff) | |
download | uhd-95681449a363de2b3c4f5c9a12c19cfe2633e85b.tar.gz uhd-95681449a363de2b3c4f5c9a12c19cfe2633e85b.tar.bz2 uhd-95681449a363de2b3c4f5c9a12c19cfe2633e85b.zip |
Merge branch 'maint'
Conflicts:
host/lib/usrp/b200/b200_impl.cpp
host/lib/usrp/b200/b200_impl.hpp
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/fx3/README.md | 10 | ||||
-rw-r--r-- | firmware/fx3/b200/b200_main.c | 35 | ||||
-rw-r--r-- | firmware/fx3/b200/b200_main.h | 4 | ||||
-rw-r--r-- | firmware/fx3/b200/b200_usb_descriptors.c | 84 |
4 files changed, 125 insertions, 8 deletions
diff --git a/firmware/fx3/README.md b/firmware/fx3/README.md index 84a895059..29d72a9ad 100644 --- a/firmware/fx3/README.md +++ b/firmware/fx3/README.md @@ -19,16 +19,16 @@ distributed by the FX3 manufacturer, Cypress Semiconductor. You can download the [FX3 SDK from here](http://www.cypress.com/?rID=57990). *Note*: You *must* use SDK version 1.2.3! -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/`. +Once you have downloaded it, extract the ARM cross-compiler from the tarball +`ARM_GCC.tar.gz` and put it somewhere useful. The highest level directory you +need is `arm-2013.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_INSTALL_PATH=<your path>/arm-2013.03 $ export ARMGCC_VERSION=4.5.2 ``` @@ -61,7 +61,7 @@ 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/ + # cd uhd.git/firmware/fx3/common/ $ patch -p2 < ../b200/fx3_mem_map.patch ``` diff --git a/firmware/fx3/b200/b200_main.c b/firmware/fx3/b200/b200_main.c index 077ee251b..cb0172af3 100644 --- a/firmware/fx3/b200/b200_main.c +++ b/firmware/fx3/b200/b200_main.c @@ -2034,6 +2034,7 @@ void b200_usb_init(void) { /* Check to see if a VID/PID is in the EEPROM that we should use. */ uint8_t valid[4]; + uint8_t vidpid[4]; CyU3PMemSet(valid, 0, 4); CyFxUsbI2cTransfer(0x0, 0xA0, 4, valid, CyTrue); if(*((uint32_t *) &(valid[0])) == 0xB2145943) { @@ -2041,7 +2042,6 @@ void b200_usb_init(void) { /* Pull the programmed device serial out of the i2c EEPROM, and copy the * characters into the device serial string, which is then advertised as * part of the USB descriptors. */ - uint8_t vidpid[4]; CyU3PMemSet(vidpid, 0, 4); CyFxUsbI2cTransfer(0x4, 0xA0, 4, vidpid, CyTrue); b200_usb2_dev_desc[8] = vidpid[2]; @@ -2055,6 +2055,35 @@ void b200_usb_init(void) { b200_usb3_dev_desc[11] = vidpid[1]; } + /* We support two VIDs: + * Ettus Research: 0x2500 + * National Instruments: 0x3923 + * + * We support three PIDs: + * Ettus B200/B210: 0x0020 + * NI USRP-2900: 0x7813 + * NI USRP-2901: 0x7814 + */ + uint8_t *mfr_string = NULL; + uint8_t *product_string = NULL; + if((vidpid[3] == 0x25) && (vidpid[2] == 0x00)) { + mfr_string = b200_usb_manufacture_desc; + product_string = b200_usb_product_desc; + } else if((vidpid[3] == 0x39) && (vidpid[2] == 0x23)) { + mfr_string = niusrp_usb_manufacture_desc; + + if((vidpid[1] == 0x78) && (vidpid[0] == 0x13)) { + product_string = niusrp_2900_usb_product_desc; + } else if((vidpid[1] == 0x78) && (vidpid[0] == 0x14)) { + product_string = niusrp_2901_usb_product_desc; + } else { + product_string = unknown_desc; + } + } else { + mfr_string = unknown_desc; + product_string = unknown_desc; + } + uint8_t ascii_serial[9]; CyU3PMemSet(ascii_serial, 0, 9); CyFxUsbI2cTransfer(0x4f7, 0xA0, 9, ascii_serial, CyTrue); @@ -2101,10 +2130,10 @@ void b200_usb_init(void) { (uint8_t *) b200_string_lang_id_desc); CyU3PUsbSetDesc(CY_U3P_USB_SET_STRING_DESCR, 1, - (uint8_t *) b200_usb_manufacture_desc); + (uint8_t *) mfr_string); CyU3PUsbSetDesc(CY_U3P_USB_SET_STRING_DESCR, 2, - (uint8_t *) b200_usb_product_desc); + (uint8_t *) product_string); CyU3PUsbSetDesc(CY_U3P_USB_SET_STRING_DESCR, 3, (uint8_t *) dev_serial); diff --git a/firmware/fx3/b200/b200_main.h b/firmware/fx3/b200/b200_main.h index 2c6f178ec..61048abc9 100644 --- a/firmware/fx3/b200/b200_main.h +++ b/firmware/fx3/b200/b200_main.h @@ -128,6 +128,10 @@ extern const uint8_t b200_usb_ss_config_desc[]; extern const uint8_t b200_string_lang_id_desc[]; extern const uint8_t b200_usb_manufacture_desc[]; extern const uint8_t b200_usb_product_desc[]; +extern const uint8_t niusrp_usb_manufacture_desc[]; +extern const uint8_t niusrp_2900_usb_product_desc[]; +extern const uint8_t niusrp_2901_usb_product_desc[]; +extern const uint8_t unknown_desc[]; extern uint8_t dev_serial[]; diff --git a/firmware/fx3/b200/b200_usb_descriptors.c b/firmware/fx3/b200/b200_usb_descriptors.c index e8a765b24..03dbce74a 100644 --- a/firmware/fx3/b200/b200_usb_descriptors.c +++ b/firmware/fx3/b200/b200_usb_descriptors.c @@ -458,6 +458,39 @@ const uint8_t b200_usb_manufacture_desc[] __attribute__ ((aligned (32))) = 'C',0x00 }; +/* NI Manufacturer String Descriptor */ +const uint8_t niusrp_usb_manufacture_desc[] __attribute__ ((aligned (32))) = + { + 0x36, /* Descriptor Size */ + CY_U3P_USB_STRING_DESCR, /* Device Descriptor Type */ + 'N',0x00, + 'a',0x00, + 't',0x00, + 'i',0x00, + 'o',0x00, + 'n',0x00, + 'a',0x00, + 'l',0x00, + ' ',0x00, + 'I',0x00, + 'n',0x00, + 's',0x00, + 't',0x00, + 'r',0x00, + 'u',0x00, + 'm',0x00, + 'e',0x00, + 'n',0x00, + 't',0x00, + 's',0x00, + ' ',0x00, + 'C',0x00, + 'o',0x00, + 'r',0x00, + 'p',0x00, + '.',0x00 + }; + /* Standard Product String Descriptor */ const uint8_t b200_usb_product_desc[] __attribute__ ((aligned (32))) = @@ -475,6 +508,57 @@ const uint8_t b200_usb_product_desc[] __attribute__ ((aligned (32))) = '0',0x00 }; +/* NI-USRP 2900 Product String Descriptor */ +const uint8_t niusrp_2900_usb_product_desc[] __attribute__ ((aligned (32))) = + { + 0x1A, /* Descriptor Size */ + CY_U3P_USB_STRING_DESCR, /* Device Descriptor Type */ + 'N',0x00, + 'I',0x00, + ' ',0x00, + 'U',0x00, + 'S',0x00, + 'R',0x00, + 'P',0x00, + '-',0x00, + '2',0x00, + '9',0x00, + '0',0x00, + '0',0x00 + }; + +/* NI-USRP 2901 Product String Descriptor */ +const uint8_t niusrp_2901_usb_product_desc[] __attribute__ ((aligned (32))) = + { + 0x1A, /* Descriptor Size */ + CY_U3P_USB_STRING_DESCR, /* Device Descriptor Type */ + 'N',0x00, + 'I',0x00, + ' ',0x00, + 'U',0x00, + 'S',0x00, + 'R',0x00, + 'P',0x00, + '-',0x00, + '2',0x00, + '9',0x00, + '0',0x00, + '1',0x00 + }; + +const uint8_t unknown_desc[] __attribute__ ((aligned (32))) = + { + 0x10, /* Descriptor Size */ + CY_U3P_USB_STRING_DESCR, /* Device Descriptor Type */ + 'U',0x00, + 'n',0x00, + 'k',0x00, + 'n',0x00, + 'o',0x00, + 'w',0x00, + 'n',0x00 + }; + /* Microsoft OS Descriptor. */ const uint8_t CyFxUsbOSDscr[] __attribute__ ((aligned (32))) = { |