USB 上位机 通过C#实现通讯功能 发送接收数据

勿勿 2013-05-16 04:10:00
最近一直有个产品想实现USB 接口通讯,产品通过电脑向USB数据线发送接收上位机的数据,上位机属于应答型的,发送一个数据包过去就会返回一个来。 最近在网上找了很多,但是没有我想要的。 希望大家给点意见最好是做过相关开发的朋友指点下。


分不是问题,希望大家给出宝贵的意见。多谢!!!
...全文
8745 46 打赏 收藏 转发到动态 举报
写回复
用AI写文章
46 条回复
切换为时间正序
请发表友善的回复…
发表回复
PiKaQiuPiKaPi 2014-07-15
  • 打赏
  • 举报
回复
那个例子能发我一份吗,那个分太多了
lolilolikong 2014-02-24
  • 打赏
  • 举报
回复
mark一下以后能找到
yuanmeixiang 2013-07-15
  • 打赏
  • 举报
回复
你好有个问题问一下你我下的你的源代码,怎么跑不起来呢

device = CreateFile(deviceList[i], DESIREDACCESS.GENERIC_READ | DESIREDACCESS.GENERIC_WRITE, 0, 0, CREATIONDISPOSITION.OPEN_EXISTING, FLAGSANDATTRIBUTES.FILE_FLAG_OVERLAPPED, 0);
                    if (!device.IsInvalid)
                    { // strDevicePath = GetDevicePath(hInfoSet, ref oInterface);
                        HIDD_ATTRIBUTES attributes;
                        //IntPtr serialBuff = Marshal.AllocHGlobal(512);
                        HidD_GetAttributes(device, out attributes);
                        //HidD_GetSerialNumberString(device, serialBuff, 512);
                        //string deviceStr = Marshal.PtrToStringAuto(serialBuff);
                        //Marshal.FreeHGlobal(serialBuff);
                        if (attributes.VendorID == vID && attributes.ProductID == pID)   // && deviceStr == serial
                        {
                            IntPtr preparseData;
                            HIDP_CAPS caps;
                            HidD_GetPreparsedData(device, out preparseData);
                            HidP_GetCaps(preparseData, out caps);
                            HidD_FreePreparsedData(preparseData);
                            outputReportLength = caps.OutputReportByteLength;
                            inputReportLength = caps.InputReportByteLength;

                            hidDevice = new FileStream (device, FileAccess.ReadWrite, inputReportLength, true);
                            deviceOpened = true;
                            //BeginAsyncRead();
                            Guid gHid = HIDGuid;
                            IntPtr hInfoSet = SetupDiGetClassDevs(ref gHid, null, IntPtr.Zero, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT);
                            DeviceInterfaceData oInterface = new DeviceInterfaceData();
                            strDevicePath = GetDevicePath(hInfoSet, ref oInterface);
                            return HID_RETURN.SUCCESS;
                        }
                    }
这个IF语句总是进不去能帮忙解释一下吗?
勿勿 2013-05-30
  • 打赏
  • 举报
回复
问题已经处理了,原来在发送数据的时候write方法中的byte[]数组的第一个必须是1打头。谢谢各位的意见。我已经把USB Hid 访问上位机的实例上传到这里了 如果有需要可以给大家提供支持 。 http://download.csdn.net/detail/szstephenzhou/5481587
chengjlbd 2013-05-27
  • 打赏
  • 举报
回复
在这里凑个热闹,如果是采用网线,电脑向上位机发送指令并接收上位机返回的数据,采用UDP协议,又该如何着手?
勿勿 2013-05-27
  • 打赏
  • 举报
回复
顶住。。。。。
Saleayas 2013-05-20
  • 打赏
  • 举报
回复
HidD_FlushQueue
Saleayas 2013-05-20
  • 打赏
  • 举报
回复
如果是 Hid 的话,那么包大小是有限制的。 还有,就是让你的硬件工程师看看,他是用什么去测试他的 USB 的。 也就是说,不能发送可能是硬件的问题。 硬件工程师在测试自己的 USB 传输的时候是有测试工具的。
勿勿 2013-05-20
  • 打赏
  • 举报
回复
引用 35 楼 yuerhb_1 的回复:
你应该是有好几个设备,都是相同的VID和PID号,你必须设定好你要通信的到底是哪一个
是的。当然 通过这两个可以找到这个设备 可以打开关闭设备 和读取设备 就是不能发送。
勿勿 2013-05-20
  • 打赏
  • 举报
回复
引用 38 楼 Saleayas 的回复:
如果是 Hid 的话,那么包大小是有限制的。 还有,就是让你的硬件工程师看看,他是用什么去测试他的 USB 的。 也就是说,不能发送可能是硬件的问题。 硬件工程师在测试自己的 USB 传输的时候是有测试工具的。
他给了我这个Bus Hound 我用这个测试是可以的 发送数据和接收用这个工具是没问题的。
勿勿 2013-05-18
  • 打赏
  • 举报
回复
引用 32 楼 porenasckx 的回复:
或者还有没有其他方法可以发送!
肯定是按照他的参数来的。
冰冰九公主 2013-05-18
  • 打赏
  • 举报
回复
推荐你一个USB调试的工具,很好用,usb-monitor,你在网上搜搜看,有下载的
冰冰九公主 2013-05-18
  • 打赏
  • 举报
回复
你应该是有好几个设备,都是相同的VID和PID号,你必须设定好你要通信的到底是哪一个
冰冰九公主 2013-05-18
  • 打赏
  • 举报
回复
根据你这种情况我判断是不是你同一个VID和PID号,对应的不只是一个设备。
勿勿 2013-05-17
  • 打赏
  • 举报
回复
引用 11 楼 livjian 的回复:
[quote=引用 8 楼 swdraven2013 的回复:] winddk的HID.LIB应该有你想要的。
以前用过,c++实现的,HidD_GetHidGuid SetupDiGetClassDevs CreateFile 楼主可以搜下,用winapi[/quote] 现在在已经在网上找了个libUSB 可以找到USB设备,打开设备关闭设备。就是不可以发送数据。 我用USB监控软件发送数据用 libusb 可以接收。就是不能发送。 有大神的可以指点下
不可触碰 2013-05-17
  • 打赏
  • 举报
回复
引用 8 楼 swdraven2013 的回复:
winddk的HID.LIB应该有你想要的。
以前用过,c++实现的,HidD_GetHidGuid SetupDiGetClassDevs CreateFile 楼主可以搜下,用winapi
勿勿 2013-05-17
  • 打赏
  • 举报
回复
引用 8 楼 swdraven2013 的回复:
winddk的HID.LIB应该有你想要的。
是吗?可以提供下吗
勿勿 2013-05-17
  • 打赏
  • 举报
回复
引用 7 楼 wodegege10 的回复:
现在不确定你的USB目的,要是仅仅转串口使用的话,装上驱动,以直接操作串口方式即可 要是其它的通信模式,尽量找可靠的通信库 cyusb是塞普拉斯提供的一个库 网上有很多例子 重要的还是跟电子工程师沟通啊
不需要转串口,直接通过USB数据线跟上位机发收指令。 现在的上位机是发什么数据返回什么数据,根据网上很多资料看了,都只能找到设备但是发指令不出去。用USB监控工具都看不到发出的指令。求DEMO
E次奥 2013-05-17
  • 打赏
  • 举报
回复
或者还有没有其他方法可以发送!
E次奥 2013-05-17
  • 打赏
  • 举报
回复
那你就要看Write方法需要什么参数,你就把你要发的东西转换成Write需要的!
加载更多回复(25)

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧