From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

Instrument Control (GPIB, Serial, VISA, IVI)

cancel
Showing results for 
Search instead for 
Did you mean: 

USBTMC Gadget driver on Embedded Linux Board and Windows 7/10 Host viOpen Issue

Hi All,

I'm currently working on the device side function driver development for TMC gadgets.

Based on my experience and reference from USBTMC Specification as well as a couple of example code from Google, I have developed this driver.

 

Now I have one weird problem with my above USB TMC function driver, It works fine under Linux host but not in case of Windows host.

 

Case-1: Linux as host.

1) On embedded board load the g_tmc driver and it creates /dev/g_tmc0 device node.

2) Make a connection between Linux host and embedded Linux board.

3) On the Host side(Ubuntu 16.04), usbtmc class driver load automatically and /dev/usbtmc0 is also created well.

4) Command string also I can send from Linux host side like

echo *IDN? > /dev/usbtmc0

5) on the device side /dev/g_tmc0 device file also give me a perfect output.

    I have attached snap for the same as tmc_read.png

 

Case-2: Windows 7/10 as Host

1) On embedded board load the g_tmc driver and it create /dev/g_tmc0 device node.

2) Make a connection between Windows 7/10 host and embedded Linux board.

3) NI-VISA / IVI Shared component successfully detect my tmc gadget and I can see the device in my DEVICE MANAGER under Test & Measurement Class category.

4) Now If I run an example from Users/Public/Documents/National Instruments/NI-VISA/Examples/C/USB path of NI-VISA then viOpen and viFindRsrc function failed to open and find my device.

 

Questions:-

Why is behaviour not same under the two different host?

Why Windows 7/10 can detect my tmc gadget but NI-VISA  fail to make a connection?

What is the different between usbtmc class driver of vanilla Linux and NI VISA usbtmc driver?

 

0 Kudos
Message 1 of 3
(3,257 Views)

May install the wireshark for usb packet  analysis the differences.

0 Kudos
Message 2 of 3
(3,230 Views)

Hi yytseng

I have looked the USB packets in the USB analyzer software called FreeDeviceMonitorStudio.

As part of gadget driver response comparison on the same board, I have started g_serial service before goto debug g_tmc. And that ACM serial connection works perfectly. At startup Windows 7 can able to send "CLASS CONTROL REQUEST" and gadget device can answer it perfectly.

 

Now in case of g_tmc function driver,

After insertion of g_tmc module, windows can detect it and T&M(IVI) entry I can see in device manager. Now If I starting NI MAX and immediately watch in the USB analyzer software, I can see a couple of entry. I have debug that entry and say that Windows 7 send "STANARD REQUEST" instead of "CLASS CONTROL REQUEST".

 

Why Windows Can send "STANARD REQUEST"?

 

Underneath VISA using ausbtmc.sys. Is something are wrong behind my NI-VISA?

0 Kudos
Message 3 of 3
(3,195 Views)