gpt4 book ai didi

go - ttyusb/uart 在传输过程中发送 'USB'

转载 作者:IT王子 更新时间:2023-10-29 01:14:37 25 4
gpt4 key购买 nike

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

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

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

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

后跟零 (0x00)。总共 22 字节。通过串行线传输的总字节数确实与我想要写入的字节数相匹配 > 所以基本上我的数据被这 22 个字节 block 屏蔽了。奇怪的是我可以将这些字节转换为 ASCII

0x55, 0x53, 0x42, 0x53, 0x70 = "USBSp"

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

[编辑]:附加信息:

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

  • 目标是 nRF52840 preview development kit ,使用 Nordic nRF5 SDK v12.3.0_d7731ad(不是最新的,我知道,但也是唯一支持其他板的)。使用 app_uart_x API

最佳答案

你必须配置串口。两个设备的波特率、开始/停止位等设置必须匹配。然后有像https://github.com/jacobsa/go-serial这样的库启用标准串行端口通信,您也可以使用任何十六进制值。

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

https://elixir.bootlin.com/linux/v4.0/source/drivers/usb/serial/usb-serial.c

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

https://elixir.bootlin.com/linux/v4.0/source/drivers/usb/serial/ftdi_sio.c

也不在 https://elixir.bootlin.com/linux/v3.3/source/drivers/usb/core/urb.c

关于go - ttyusb/uart 在传输过程中发送 'USB',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48903537/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com