※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

「USRP2の設定」の編集履歴(バックアップ)一覧に戻る

USRP2の設定 - (2011/07/10 (日) 16:56:19) の1つ前との変更点

追加された行は青色になります

削除された行は赤色になります。

 今まであまり深堀していなかったUSRP2について調査をする。
 *pick_bitrate.py
 **_pick_bitrate()
 xrate(interpolation)及びsamples_per_symbolが決まっている場合、ビットレートを以下の式で決定している。
 ビットレート = converter_rate(100Mbps) / xrate / samples_per_symbol
 
 *新しく買ったUSRP2が動かない。。
 以下、./benchmark_tx.pyを実行すると発生するエラー。
  >>> gr_fir_ccf: using SSE
  dac_rate= 100M
  samples/symbol= 2
  Requested TX Bitrate: 100k Actual Bitrate: 100k
  interp_rates= 500
  Failed to set Rx frequency to 2.45G
  Traceback (most recent call last):
    File "./test_cdma_tx.py", line 174, in <module>
      main()
    File "./test_cdma_tx.py", line 162, in main
      tb = my_top_block(mods[options.modulation], options)
    File "./test_cdma_tx.py", line 74, in __init__
      self._setup_usrp_sink(options)
    File "./test_cdma_tx.py", line 116, in _setup_usrp_sink
      raise ValueError, eng_notation.num_to_str(options.tx_freq)
  ValueError: 2.45G
 USRP2の送信周波数を2.45Gにセットできないそう。。ドーターボードを取り換えても
 だめなので、どうやら本体に原因がある?
 エラーを出している元、usrp2_impl.cc
   bool
   usrp2::impl::set_tx_center_freq(double frequency, tune_result *result)
   {
     op_config_tx_v2_cmd cmd;
     op_config_tx_reply_v2_t reply;
  
     init_config_tx_v2_cmd(&cmd);
     cmd.op.valid = htons(CFGV_FREQ);
     u2_fxpt_freq_t fxpt = u2_double_to_fxpt_freq(frequency);
     cmd.op.freq_hi = htonl(u2_fxpt_freq_hi(fxpt));
     cmd.op.freq_lo = htonl(u2_fxpt_freq_lo(fxpt));
  
     pending_reply p(cmd.op.rid, &reply, sizeof(reply));
     if (!transmit_cmd_and_wait(&cmd, sizeof(cmd), &p, DEF_CMD_TIMEOUT)) //ここでfalseが戻ってしまう。
       return false;
  
     bool success = (ntohx(reply.ok) == 1);
     if (result && success) {
       result->baseband_freq =
         u2_fxpt_freq_to_double(
  	  u2_fxpt_freq_from_hilo(ntohl(reply.baseband_freq_hi),
  				 ntohl(reply.baseband_freq_lo)));
   
       result->dxc_freq =
         u2_fxpt_freq_to_double(
  	  u2_fxpt_freq_from_hilo(ntohl(reply.duc_freq_hi),
  				 ntohl(reply.duc_freq_lo)));
  
       result->residual_freq =
         u2_fxpt_freq_to_double(
  	 u2_fxpt_freq_from_hilo(ntohl(reply.residual_freq_hi),
  				ntohl(reply.residual_freq_lo)));
  
        result->spectrum_inverted = (bool)(ntohx(reply.inverted) == 1);
     }
  
     return success;
   }
 
   bool
   usrp2::impl::transmit_cmd_and_wait(void *cmd, size_t len, pending_reply *p, double secs)
   {
     d_pending_replies[p->rid()] = p;
  
     if (!transmit_cmd(cmd, len)){
       d_pending_replies[p->rid()] = 0;
       return false; //こいつか(たぶんこいつ)
     }
  
     int res = p->wait_for_completion(secs); //それともこいつか
     d_pending_replies[p->rid()] = 0;
     return res == 1;
   }
   bool
   usrp2::impl::transmit_cmd(void *cmd_, size_t len_)
   {
     const void *cmd = cmd_;
     int len = len_;
     unsigned char tmp[64];
  
     if (len_ < 64){		// pad to minimum ethernet frame size
       memset(tmp, 0, sizeof(tmp));
       memcpy(tmp, cmd_, len_);
       cmd = tmp;
       len = sizeof(tmp);
     }
  
     return d_eth_buf->tx_frame(cmd, len) == eth_buffer::EB_OK;
   }
 
 [[ここ>http://mach123.wordpress.com/2010/10/24/usrp2-%E5%8B%95%E4%BD%9C%E7%A2%BA%E8%AA%8D/]]が参考になるかも
+-結局分らなかったので、Ettus Resarchの人に聞いてみた
+以下の回答の通り、XCVR2450用のファームウェアをSDカードにインストールしたら動いた!
+If you're using the "classic" USRP2 interface, you'll need to use the XCVR2450-specific firmware on the USRP2:
+
+http://code.ettus.com/redmine/ettus/attachments/71
+
+Since "benchmark_tx.py" uses the "classic" raw-ethernet interface, you'll need the XCVR-specific firmware.
+
+インストールコマンド
+ ./u2_flash_tool --dev=/dev/sdb -t s/w ~/txrx_xcvr_raw_eth_20100608.bin -w
 
 ----