void SPI1_IRQHandler(void) {
    static rt_uint8_t is_cmd;
    static rt_uint8_t cmd;

    rt_interrupt_enter();
    if(spi_is_rx_nonempty(spi1.c_dev())) {
        nvic_irq_disable(NVIC_SPI1);
        if(!is_cmd) {
            cmd = spi1.read();
        }
        is_cmd = !is_cmd;
        wrtnode2r_spi_bridge_rx_isr(cmd, is_cmd);
        nvic_irq_enable(NVIC_SPI1);
    }
    rt_interrupt_leave();
}
//------------------------------------------------------------------------------
void SdSpi::send(const uint8_t* buf , size_t n) {

#if USE_STM32F1_DMAC
//  spiDmaTX(buf, n);
//  while (SPI_DMA_TX_Active) {}
  SPI.dmaSend(const_cast<uint8*>(buf), n);
  //  uint32_t m = millis();
  //  while (SPI_DMA_TX_Active) {
  //    if ((millis() - m) > STM32F1_DMA_TIMEOUT)  {
  //      dmac_channel_disable(SPI_DMAC_TX_CH);
  //      break;
  //    }
  //  }
#else  // #if USE_STM32F1_DMAC
  SPI.write (buf, n);
  if (spi_is_rx_nonempty(SPI1)) {
    uint8_t b = spi_rx_reg(SPI1);
  }
#endif  // #if USE_STM32F1_DMAC
  // leave RDR empty
  //  while (spi_is_rx_nonempty(SPI1))
//  uint8_t b = SPI.read();
//  uint8_t b = spi_rx_reg(SPI1);
}