Jump to content

USB2.0 High Speed Serial Communications


Recommended Posts

LV2016 64-bit

I have inherited a LabVIEW Interface that talks thru a USB2 Interface to a micro-Controller at 921,600 baud.

This opens a new world of possibilities as USB2 can handle data at much higher rates than a typical RS232 interface.

I have been tasked with rewriting the LabVIEW code as it is difficult to maintain.  I have an application that will talk to the uC at 230 kbaud but can't attain the 921,600 baud. I have tried copying the pertinent VIs from the supplied code into my app but still can not attain 921,600 baud. Plus I don't have a serial line analyzer capable of handling USB2, so I can only trial and error with the uC. Is there a setting I have to do in LabVIEW to allow serial communications at the higher rates? At the moment, I am trying to get the Find Controllr VI to work. I have included the support VIs for the Find Controllr.vi. The Find Controllr VI attempts to find the correct port and baud rate and then obviously communicate with the uC.

Find Controllr.vi

Packet TR.vi

Get Available Ports.vi

Serial Data.vi

Check For Packet.vi

Open Port.vi

Create Packet.vi

Extract Packet ID.vi

PTI CRC.vi

Link to post
Share on other sites

I've heard of people getting that kind of speed but I've never used it on any device.  I found a couple of articles you probably already found talking about high speed serial stuff.

http://www.ni.com/white-paper/52915/en/

http://digital.ni.com/public.nsf/allkb/D37754FFA24F7C3F86256706005B9BE7

I'm not aware of any special work that needs to be done to achieve a fast baud rate.

Link to post
Share on other sites

I feel like USB is a bit of a red herring. It sounds like your microcontroller has a USB to serial converter on it. With real USB communication, you don't have to specify a baud rate. Here's some more info on USB raw http://digital.ni.com/public.nsf/allkb/E3A2C4FE42D7ED0D86256DB7005C65C9

When you say it can't attain 921kbaud, what do you mean? Are you getting an error code from VISA? Is it possible that the microcontroller doesn't support those baud rates?

Edited by infinitenothing
Link to post
Share on other sites

The uC works at 921600 baud with the LabVIEW interface that I have inherited. I don' have a serial line analyzer so I am restricted to trial and error with the uC. So, I try it and see if I get a response. I will try to use to laptops tomorrow and see if I can get them to talk to each other. I do have the uC set to 921600 baud. If I set the uC to 230kbaud my LabVIEW App can talk to it, but no faster. But the LabVIEW app I have inherited can talk at 921600 baud. That's what has me bewildered.

Link to post
Share on other sites

It sounds like "can't attain" means that your application doesn't get a response. That could easily be caused by an application error. Which is likely, seeing as how you misuse locals. Also, I noticed your Packet TR isn't opening the port or setting a baud rate. I think you need to get rid of the response ID checking and improve error handling. Ideally it would be as simple as "Open Port, create packet, wire that straight into the visa write, wait a second, get all the bytes off the port. View the bytes as hex and see if you can figure out what it's sending back." If you get a good packet back, then you know it's probably just an application error. If you get nothing back, you might want to take apart the uC and see if you can find out what pins to probe or what's going on at the serial end somehow, I guess I'd want to know what was working before. There is some chance it's a driver issue and you have to live with it. if you get back a visa error, then we can look at solving them.

Link to post
Share on other sites
  • 1 month later...

Most Uart devices don't support that data rate. I guess maybe make sure that the USB device supports it. I have only seen one that support this baud rate. I think it was an NI device. Your generic USB to uart usually caps at 115200.

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Similar Content

    • By Dawid
      Hello everyone,
       
      I have a small problem with SPI communication. I'm using NI USB 8452 module and LabView 2013 with driver NI USB 845x 14.0. As a first step I ran the example from attached library called "Atmel AT25080A Write.vi". The problem manifests as logic "0" all the time on MOSI and MISO lines. No Data transferred. CS and CLK works properly. I never use pull ups when using SPI but maybe I should? The question is did anybody meet the same problem while using this usb 8452 module? All 4 SPI lines connected directly to oscilloscope. Waiting for any reply. Thanks in advance.
       

       


    • By ThomasGutzler
      Hi,
       
      I have several USB instruments (Agilent/Keysight optical power meters) which I can talk to via USB.
      To minimise the time "wasted" by transferring data between the instruments and the PC I would like to query them in parallel. Unfortunately, LabVIEW doesn't agree with that strategy and reliably crashes when doing so. It doesn't matter which command I send, so here's a sample snippet, where I just query the instrument ID repeatedly. I don't even have to read the answer back (doing so won't make a difference):

      This will kill LabVIEW 2012 and 2014, both 64bit without even popping up the "We apologize for the inconvenience" crash reporter dialog.
       
      Has anyone had similar experiences?
      I've seen LabVIEW crash while communicating over RS232 (VISA) but it's much harder to reproduce.
        Is it outrageous to assume that communication to separate instruments via different VISA references should work in parallel?
      All my instrument drivers are separate objects. I can ensure that communication to a single type of instrument is done in series by making the vi that does the communication non-reentrant. But I have to communicate with multiple instruments of different types, most of which use some flavour of VISA (RS232, USB, GPIB).
       
      Am I just lucky that I haven't had more crashes when I'm talking to a lot of instruments?
      Could it be a bug specific to the USB part of VISA? I've only recently changed from GPIB to USB on those power meters to get faster data transfer rates. In the past everything went via GPIB, which isn't a parallel communication protocol anyway afaik.
       
      Tom
    • By codcoder
      Hi guys,
       
      Long time reader, first time writer.
       
      I'm currently trying to develop a data gathering system using a NI sbRIO-9606.
       
      The premise is quite straight-forward; I have a digital signal (data and clock) with a bitrate of 10 Mbit/s which I want to store to a USB flash drive in real time. The single-board RIO has no problem reading and processing the bitstream but storing the data to the USB flash drive is apparently not as easy as I thought.
       
      According to the manual the USB port supports a transfer speed up to 480 Mbit/s (USB 2.0 standard?) but I've been unable to achieve any faster transfer speed than around 1 Mbit/s (1.3 Mbit/s worst-case). This is unaccaptable for my application!
       
      I'v tried to disabeling buffering for the Open/create file function and only storing files in multiples of the sector size but it does not seem to help. Are there any preferrable USB flash drives one must use? Or am I unaware of any "high speed file streaming" options in LabVIEW?
       
      Sincerley,
      CC
       
    • By bigjoepops
      All,
       
      I am having some issues with errors when I am writting to an external USB drive.  The errors appear to be random.  I was able to get a log of the errors.  I have attached the VI that I am having issues with.  The code number for the error is 1.
       
      Endless File Write_rev1.vi
       
      6/23/2014  18:55:9.864 : 8 : 1 : Get File Size in Endless File Write_rev1.vi:2590003->SPI User Interface test1_rev1.vi : Indicator of multiple errors : 2
      6/23/2014  18:55:10.886 : 0 : 6 : Open/Create/Replace File in Endless File Write_rev1.vi:2590003->SPI User Interface test1_rev1.vi<APPEND>
      H:GDataGDaqData HS_00039.efd : Indicator of multiple errors : 2
      6/23/2014  18:55:11.910 : 1 : 6 : Open/Create/Replace File in Endless File Write_rev1.vi:2590003->SPI User Interface test1_rev1.vi<APPEND>
      H:GDataGDaqData HS_00040.efd : Indicator of multiple errors : 2
      6/23/2014  18:55:12.934 : 1 : 6 : Open/Create/Replace File in Endless File Write_rev1.vi:2590003->SPI User Interface test1_rev1.vi<APPEND>
      H:GDataGDaqData HS_00041.efd : Indicator of multiple errors : 2
       
      The error appears to start with the "Get File Size" vi in the VI that I have attached.  Once that happens it appears that I can't access the file or hard drive.  Not sure if the real problem is with the "Get File Size" vi or if is just when the drive access is messed up.
       
      The VI will write to a file until it's size is greater than 62.5K.  Once that happens the file is closed and the file name is indexed and the new file is open.  The errors appear to have happened on a file index increment becuase the last file that was written was 62.5K.
       
      The only error handling that is part of this VI is that if there is an error opening the file the file name is indexed and used for the next time the data is written.  I wanted to know is there was any other kind of error handling that I should put in this to handle file errors.  Or maybe to reset the USB port possibly?  Are there possibly any waits that I should put into this sequence of step?
       
      The drive I am using is from imation and the model number is H100 1TB.  I am also using LabVIEW 2013 SP1.
       
      If you need any more information or have questions please let me know.
       
      Thanks for your help.
      Joe
    • By bbean
      I am working on an RT app and hardware that uses more than 50 USB devices connected via USB hubs to an NI rackmount computer.  After a hard reboot of the rack mount computer, the USB devices and hubs take more than 5 minutes to enumerate.  
       
      I am looking for a way to verify all the USB devices have enumerated.  Polling VISA Find Resources appears to cause the entire system to lockup if we start it immediately in RT app.  If we manually delay for 10 minutes or so in the application and then call VISA Find Resources, it appears to work OK as long as all of the devices have successfully enumerated.  A hard-coded 10 minute delay is not optimal because on soft reboots, the delay is unnecessary.  
       
      Are there any other ways to get the state of system USB enumeration other than VISA Find Resource?
       
      During reboots, the NI boot loader takes a minute or so to "Enumerate USB devices" but it appears it only enumerates each USB hub before it completes and moves on.
       
       
       
      PS. I know there are latency issues using USB on an RT system.  We chose to use the RT platform for stability (no windows updates, etc) vs determinism.  This may or may not be a good reason, but its what we have now.
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.