This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

High Fequency UART transmissions

I am using the nrf52832 with its Development kit to transmit trough UART to the PC a frame with 26 bytes, I have configured the port to 1MBoudRate. Once I prepare the frame I use the next instructions to transmit:

while(nrf_drv_uart_tx_in_progress()){}; nrf_drv_uart_tx(finalframe ,26);

The intention is to transmit a new frame every 250uS which implies a frequency of 4kHz. In theory if I have settled the speed to 1MboudRate this should be possible, however, the frames are not received right, 1 of every 8 frames has a byte missing. It starts to send all bits properly when the frequency decreases to 2,5kHz.

Any idea why this could be happening? Maybe can I use another transmit function to tx using UART?

Parents
  • I just saw in your first question that you actually don't use app_uart after initialization, but you use nrf_drv_uart directly:

    while(nrf_drv_uart_tx_in_progress()){}; nrf_drv_uart_tx(finalframe ,26);
    

    So the FIFO in app_uart_fifo is not used, which is why it does not make any difference if you set 1,256 or 1024 as the tx buffer size.

    nrf_drv_uart_tx_in_progress will not return until all bytes in nrf_drv_uart_tx is sent. The transmission will be delayed if CTS line is addressed in the transfer.

    Your problem is not on the nRF, but on the device in the other end of the UART. I do not have numbers on how fast the Interface/debugger chip (SEGGER chip) on the DK can send data to the computer, but your test leads me to believe that it is slower than 1MBaud (100KB/s).

    You could use RTT instead, but the interface chip is limited to 1MHz which will probably not give you 100KB/s when including the overhead. Other alternatives is to use an external debugger with higher speed than 1MHz or to use another UART-to-USB chip like the FTDI.

Reply
  • I just saw in your first question that you actually don't use app_uart after initialization, but you use nrf_drv_uart directly:

    while(nrf_drv_uart_tx_in_progress()){}; nrf_drv_uart_tx(finalframe ,26);
    

    So the FIFO in app_uart_fifo is not used, which is why it does not make any difference if you set 1,256 or 1024 as the tx buffer size.

    nrf_drv_uart_tx_in_progress will not return until all bytes in nrf_drv_uart_tx is sent. The transmission will be delayed if CTS line is addressed in the transfer.

    Your problem is not on the nRF, but on the device in the other end of the UART. I do not have numbers on how fast the Interface/debugger chip (SEGGER chip) on the DK can send data to the computer, but your test leads me to believe that it is slower than 1MBaud (100KB/s).

    You could use RTT instead, but the interface chip is limited to 1MHz which will probably not give you 100KB/s when including the overhead. Other alternatives is to use an external debugger with higher speed than 1MHz or to use another UART-to-USB chip like the FTDI.

Children
No Data
Related