diff options
| -rw-r--r-- | host/docs/dboards.rst | 44 | ||||
| -rw-r--r-- | host/lib/usrp/dboard/db_unknown.cpp | 43 | 
2 files changed, 74 insertions, 13 deletions
| diff --git a/host/docs/dboards.rst b/host/docs/dboards.rst index b39c587f6..7f205c404 100644 --- a/host/docs/dboards.rst +++ b/host/docs/dboards.rst @@ -157,7 +157,7 @@ Modification usually involves moving/removing a SMT component  and burning a new daughterboard id into the eeprom.  ^^^^^^^^^^^^^^^^^^^^^^^^^^^ -DBSRX +DBSRX - Mod  ^^^^^^^^^^^^^^^^^^^^^^^^^^^  Due to different clocking capabilities, @@ -187,3 +187,45 @@ With the daughterboard plugged-in, run the following commands:  * <args> are device address arguments (optional if only one USRP is on your machine)  * <slot> is the name of the daughterboard slot (optional if the USRP has only one slot) + +^^^^^^^^^^^^^^^^^^^^^^^^^^^ +RFX - Mod +^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Older RFX boards require modifications to use the motherboard oscillator. +If this is the case, UHD will print a warning about the modification. +Please follow the modification procedures below: + +**Step 1: Disable the daughterboard clocks** + +Move R64 to R84, Move R142 to R153 + +**Step 2: Connect the motherboard blocks** + +Move R35 to R36, Move R117 to R115 +These are all 0-ohm, so if you lose one, just short across the appropriate pads + +**Step 3: Burn the appropriate daughterboard id into the EEPROM** + +With the daughterboard plugged-in, run the following commands: +:: + +    cd <prefix>/share/uhd/utils +    ./usrp_burn_db_eeprom --id=<rx_id> --unit=RX --args=<args> --slot=<slot> +    ./usrp_burn_db_eeprom --id=<tx_id> --unit=TX --args=<args> --slot=<slot> + +* <rx_id> choose the appropriate RX ID for your daughterboard + +  * **RFX400:** 0x0024 +  * **RFX900:** 0x0025 +  * **RFX1800:** 0x0034 +  * **RFX1200:** 0x0026 +  * **RFX2400:** 0x0027 +* <tx_id> choose the appropriate TX ID for your daughterboard + +  * **RFX400:** 0x0028 +  * **RFX900:** 0x0029 +  * **RFX1800:** 0x0035 +  * **RFX1200:** 0x002a +  * **RFX2400:** 0x002b +* <args> are device address arguments (optional if only one USRP is on your machine) +* <slot> is the name of the daughterboard slot (optional if the USRP has only one slot) diff --git a/host/lib/usrp/dboard/db_unknown.cpp b/host/lib/usrp/dboard/db_unknown.cpp index a342471c4..d0359d124 100644 --- a/host/lib/usrp/dboard/db_unknown.cpp +++ b/host/lib/usrp/dboard/db_unknown.cpp @@ -24,19 +24,47 @@  #include <uhd/usrp/dboard_manager.hpp>  #include <boost/assign/list_of.hpp>  #include <boost/format.hpp> +#include <boost/foreach.hpp> +#include <boost/tuple/tuple.hpp> +#include <vector>  using namespace uhd;  using namespace uhd::usrp;  using namespace boost::assign;  /*********************************************************************** + * Utility functions + **********************************************************************/ +static void warn_if_old_rfx(const dboard_id_t &dboard_id, const std::string &xx){ +    typedef boost::tuple<std::string, dboard_id_t, dboard_id_t> old_ids_t; //name, rx_id, tx_id +    static const std::vector<old_ids_t> old_rfx_ids = list_of +        (old_ids_t("Flex 400 Classic",  0x0004, 0x0008)) +        (old_ids_t("Flex 900 Classic",  0x0005, 0x0009)) +        (old_ids_t("Flex 1200 Classic", 0x0006, 0x000a)) +        (old_ids_t("Flex 1800 Classic", 0x0030, 0x0031)) +        (old_ids_t("Flex 2400 Classic", 0x0007, 0x000b)) +    ; +    BOOST_FOREACH(const old_ids_t &old_id, old_rfx_ids){ +        std::string name; dboard_id_t rx_id, tx_id; +        boost::tie(name, rx_id, tx_id) = old_id; +        if ( +            (xx == "RX" and rx_id == dboard_id) or +            (xx == "TX" and tx_id == dboard_id) +        ) uhd::warning::post(str(boost::format( +            "Detected %s daughterboard %s\n" +            "This board requires modification to use.\n" +            "See the daughterboard application notes.\n" +        ) % xx % name)); +    } +} + +/***********************************************************************   * The unknown boards:   *   Like a basic board, but with only one subdev.   **********************************************************************/  class unknown_rx : public rx_dboard_base{  public:      unknown_rx(ctor_args_t args); -    ~unknown_rx(void);      void rx_get(const wax::obj &key, wax::obj &val);      void rx_set(const wax::obj &key, const wax::obj &val); @@ -45,7 +73,6 @@ public:  class unknown_tx : public tx_dboard_base{  public:      unknown_tx(ctor_args_t args); -    ~unknown_tx(void);      void tx_get(const wax::obj &key, wax::obj &val);      void tx_set(const wax::obj &key, const wax::obj &val); @@ -71,11 +98,7 @@ UHD_STATIC_BLOCK(reg_unknown_dboards){   * Unknown RX dboard   **********************************************************************/  unknown_rx::unknown_rx(ctor_args_t args) : rx_dboard_base(args){ -    /* NOP */ -} - -unknown_rx::~unknown_rx(void){ -    /* NOP */ +    warn_if_old_rfx(this->get_rx_id(), "RX");  }  void unknown_rx::rx_get(const wax::obj &key_, wax::obj &val){ @@ -177,11 +200,7 @@ void unknown_rx::rx_set(const wax::obj &key_, const wax::obj &val){   * Unknown TX dboard   **********************************************************************/  unknown_tx::unknown_tx(ctor_args_t args) : tx_dboard_base(args){ -    /* NOP */ -} - -unknown_tx::~unknown_tx(void){ -    /* NOP */ +    warn_if_old_rfx(this->get_tx_id(), "TX");  }  void unknown_tx::tx_get(const wax::obj &key_, wax::obj &val){ | 
