Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Go ttyusb/uart发送';USB';转移期间_Go_Usb_Uart_Tty - Fatal编程技术网

Go ttyusb/uart发送';USB';转移期间

Go ttyusb/uart发送';USB';转移期间,go,usb,uart,tty,Go,Usb,Uart,Tty,我正在为一个项目使用Go,并通过串行端口(ttyusb)将数据传输到嵌入式设备。在快速和“大”传输过程中,我注意到传输的数据与我想要发送的值不匹配 我尝试了各种可用的库,最后它们都使用系统调用进行读写。所以我附加了一个逻辑分析仪来看看发生了什么 然后我注意到输出中的数据不匹配有一个清晰的模式:串行端口将使用以下值交错我的数据,而不是发送数据: 0x55、0x53、0x42、0x53、0x70、0x02 后跟零(0x00)。总共22个字节。通过串行线传输的总字节数与我想写入的字节数匹配>,因此基本

我正在为一个项目使用Go,并通过串行端口(ttyusb)将数据传输到嵌入式设备。在快速和“大”传输过程中,我注意到传输的数据与我想要发送的值不匹配

我尝试了各种可用的库,最后它们都使用系统调用进行读写。所以我附加了一个逻辑分析仪来看看发生了什么

然后我注意到输出中的数据不匹配有一个清晰的模式:串行端口将使用以下值交错我的数据,而不是发送数据:

0x55、0x53、0x42、0x53、0x70、0x02

后跟零(
0x00
)。总共22个字节。通过串行线传输的总字节数与我想写入的字节数匹配>,因此基本上我的数据被这22个字节块屏蔽了。奇怪的是我可以把这些字节转换成ASCII码

0x55、0x53、0x42、0x53、0x70=“USBSp”

现在我的问题是:我不能通过串行端口发送任意数据(十六进制值),或者是否有一些我应该知道的控制字符会使串行端口发送身份信息或类似信息

[编辑]:其他信息:

  • 主机是运行GoV1.10的MacOS;尝试使用
    go.bug.st/serial.v1
    github.com/tarm/serial
    ,各种通信设置(比特率等)

  • 目标是,使用Nordic nRF5 SDK v12.3.0u d7731ad(据我所知,这不是最新的,但也是唯一支持其他板的)。使用
    app\u uart\u x
    API


您必须配置串行端口。两个设备的波特率、启动/停止位等设置。。。必须匹配。go中还有一些库,它们支持标准串行端口通信,您也可以使用任何十六进制值

我说不出为什么会发送
USBSp
,因为您没有发布任何代码,也没有提供您使用的库的信息。这很可能不是由内核模块生成的,而是由高层软件生成的,因为所使用的内核模块是
usb串行
,并且
USBSp
没有出现在源代码中:

也不在内核模块
ftdi sio
(如果使用ftdi芯片)


也不在

中,通信设置相同(经过三次检查),正常通信工作没有问题。想不出一个有用的剪报,因为它实际上是串行的。一边写,另一边读。可能的问题是板上的USB到串行转换:它集成在硅中,这是一个工程示例。。。仍在调查中。感谢linux发行版上的输入关闭此:我们已经切换了MCU,因此似乎nRF的USB确实存在问题,新MCU没有此问题,并且可以删除所有的解决方法。我看到了完全相同的问题!nRF52840 DK(不是预览版)。除了在我的例子中,它是大写P的“USBSP”。当发送大消息时,随机块会被“USBSP\0\0\…”覆盖。任何帮助都将不胜感激!我在从PC到DK的通信中遇到了这个问题,我在另一方面没有遇到这个问题。我最后做的是在PC端添加等待状态,所以我只是在发送数据块后添加了<1毫秒的微小延迟(不过不记得大小)。我建议使用这些参数(块大小和超时),并考虑时不时刷新序列。此外:这可能有助于将数据包大小减少到64位,中间很少有超时