diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.c b/openair2/UTIL/LOG/vcd_signal_dumper.c
index 34fc8e97b8a8ede096c68451f891725ff7c91cd3..38a304acb1e3fdd1949ef2c9ea367a02d5e8a939 100644
--- a/openair2/UTIL/LOG/vcd_signal_dumper.c
+++ b/openair2/UTIL/LOG/vcd_signal_dumper.c
@@ -98,6 +98,7 @@ const char* eurecomVariablesNames[] = {
   "rxcnt",
   "trx_ts",
   "trx_tst",
+  "trx_write_flags",
   "tx_ts",
   "rx_ts",
   "hw_cnt_rx",
diff --git a/openair2/UTIL/LOG/vcd_signal_dumper.h b/openair2/UTIL/LOG/vcd_signal_dumper.h
index 0d1c507b749b5b5583c5f40e3957571f843327e8..5e3345e0059aa0f3652f28777baee192b40e89be 100644
--- a/openair2/UTIL/LOG/vcd_signal_dumper.h
+++ b/openair2/UTIL/LOG/vcd_signal_dumper.h
@@ -70,6 +70,7 @@ typedef enum {
   VCD_SIGNAL_DUMPER_VARIABLES_RXCNT,
   VCD_SIGNAL_DUMPER_VARIABLES_TRX_TS,
   VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST,
+  VCD_SIGNAL_DUMPER_VARIABLES_TRX_WRITE_FLAGS,
   VCD_SIGNAL_DUMPER_VARIABLES_TX_TS,
   VCD_SIGNAL_DUMPER_VARIABLES_RX_TS,
   VCD_SIGNAL_DUMPER_VARIABLES_RX_HWCNT,
diff --git a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
index 00d4f220b92980f8aba7a06ce47b78704567420b..2a2e09f40cbe800e7cd7fb654d059f88b1ff3113 100644
--- a/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
+++ b/targets/ARCH/USRP/USERSPACE/LIB/usrp_lib.cpp
@@ -177,17 +177,24 @@ static int trx_usrp_write(openair0_device *device, openair0_timestamp timestamp,
   s->tx_md.time_spec = uhd::time_spec_t::from_ticks(timestamp, s->sample_rate);
 
   
-  if(flags)
+  if(flags>0)
     s->tx_md.has_time_spec = true;
   else
     s->tx_md.has_time_spec = false;
 
-  if (device->openair0_cfg[0].tx_freq[0] == device->openair0_cfg[0].rx_freq[0]) {
-    // for TDD each write should be considered as a burst to trigger the switch on GPIO
+  if (flags == 2) { // start of burst
     s->tx_md.start_of_burst = true;
+    s->tx_md.end_of_burst = false;
+  }
+  else if (flags == 3) { // end of burst
+    s->tx_md.start_of_burst = false;
     s->tx_md.end_of_burst = true;
   }
-  else {
+  else if (flags == 4) { // start and end
+    s->tx_md.start_of_burst = true;
+    s->tx_md.end_of_burst = true;
+  }
+  else if (flags==1) { // middle of burst
     s->tx_md.start_of_burst = false;
     s->tx_md.end_of_burst = false;
   }
diff --git a/targets/RT/USER/lte-enb.c b/targets/RT/USER/lte-enb.c
index 43f7f76f9804849ba34bd2644164dfd1f5f6f061..c15e1043545fabf1a9e87d9a8e6da5606eed3363 100644
--- a/targets/RT/USER/lte-enb.c
+++ b/targets/RT/USER/lte-enb.c
@@ -899,26 +899,48 @@ void rx_rf(PHY_VARS_eNB *eNB,int *frame,int *subframe) {
     //    printf("trx_write -> USRP TS %llu (sf %d)\n", (proc->timestamp_rx+(3*fp->samples_per_tti)),(proc->subframe_rx+2)%10);
     VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_TST, (proc->timestamp_rx+(tx_sfoffset*fp->samples_per_tti)-openair0_cfg[0].tx_sample_advance)&0xffffffff );
     // prepare tx buffer pointers
-	
-    if ((subframe_select(fp,proc->subframe_rx+tx_sfoffset) == SF_DL) ||
-	(subframe_select(fp,proc->subframe_rx+tx_sfoffset) == SF_S)) {
-      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 1 );
+
+    lte_subframe_t SF_type     = subframe_select(fp,(proc->subframe_rx+tx_sfoffset)%10);
+    lte_subframe_t prevSF_type = subframe_select(fp,(proc->subframe_rx+tx_sfoffset+9)%10);
+    lte_subframe_t nextSF_type = subframe_select(fp,(proc->subframe_rx+tx_sfoffset+1)%10);
+    if ((SF_type == SF_DL) ||
+	(SF_type == SF_S)) {
 
       for (i=0; i<fp->nb_antennas_tx; i++)
 	txp[i] = (void*)&eNB->common_vars.txdata[0][i][((proc->subframe_rx+tx_sfoffset)%10)*fp->samples_per_tti]; 
-      
+
+      int siglen=fp->samples_per_tti,flags=1;
+
+      if (SF_type == SF_S) {
+	siglen = fp->dl_symbols_in_S_subframe*(fp->ofdm_symbol_size+fp->nb_prefix_samples0);
+	flags=3; // end of burst
+      }
+      if ((fp->frame_type == TDD) &&
+	  (SF_type == SF_DL)&&
+	  (prevSF_type == SF_UL) &&
+	  (nextSF_type == SF_DL))
+	flags = 2; // start of burst
+
+      if ((fp->frame_type == TDD) &&
+	  (SF_type == SF_DL)&&
+	  (prevSF_type == SF_UL) &&
+	  (nextSF_type == SF_UL))
+	flags = 4; // start of burst and end of burst (only one DL SF between two UL)
+     
+      VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 1 );
+      VCD_SIGNAL_DUMPER_DUMP_VARIABLE_BY_NAME( VCD_SIGNAL_DUMPER_VARIABLES_TRX_WRITE_FLAGS,flags); 
       txs = eNB->rfdevice.trx_write_func(&eNB->rfdevice,
 					 proc->timestamp_rx+eNB->ts_offset+(tx_sfoffset*fp->samples_per_tti)-openair0_cfg[0].tx_sample_advance,
 					 txp,
-					 fp->samples_per_tti,
+					 siglen,
 					 fp->nb_antennas_tx,
-					 1);
+					 flags);
       
       VCD_SIGNAL_DUMPER_DUMP_FUNCTION_BY_NAME( VCD_SIGNAL_DUMPER_FUNCTIONS_TRX_WRITE, 0 );
       
       
       
-      if (txs !=  fp->samples_per_tti) {
+      if (txs !=  siglen) {
 	LOG_E(PHY,"TX : Timeout (sent %d/%d)\n",txs, fp->samples_per_tti);
 	exit_fun( "problem transmitting samples" );
       }	
diff --git a/targets/RT/USER/rru_if4p5_usrp.gtkw b/targets/RT/USER/rru_if4p5_usrp.gtkw
index d2a435202fbbb5e0d3b45f41b9159c5db5325e84..1a13e6d15f1e243af267b137390b0145a2956bec 100644
--- a/targets/RT/USER/rru_if4p5_usrp.gtkw
+++ b/targets/RT/USER/rru_if4p5_usrp.gtkw
@@ -1,15 +1,15 @@
 [*]
 [*] GTKWave Analyzer v3.3.58 (w)1999-2014 BSI
-[*] Thu Jan  5 06:19:58 2017
+[*] Sun Jan 15 07:26:50 2017
 [*]
 [dumpfile] "/tmp/openair_dump_eNB.vcd"
-[dumpfile_mtime] "Thu Jan  5 06:09:13 2017"
-[dumpfile_size] 24570356
+[dumpfile_mtime] "Sun Jan 15 07:04:19 2017"
+[dumpfile_size] 18140627
 [savefile] "/home/uprru1/oai/openairinterface5g/targets/RT/USER/rru_if4p5_usrp.gtkw"
-[timestart] 23491157000
+[timestart] 29977510000
 [size] 1301 716
 [pos] 309 0
-*-19.793451 29983948856 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
+*-21.793451 29983948856 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
 [sst_width] 284
 [signals_width] 262
 [sst_expanded] 1
@@ -17,6 +17,9 @@
 @28
 functions.trx_read
 functions.trx_write
+@25
+variables.trx_write_flags[63:0]
+@28
 functions.trx_write_if
 functions.send_if4
 functions.trx_read_if