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



我正在使用GO进行项目,并通过串行端口(TTYUSB(将数据传输到嵌入式设备。在快速和"大"传输期间,我注意到传输数据与我要发送的值不符。

我尝试了各种可用的库,最后它们都使用syscall读写。因此,我已经附上了逻辑分析仪以查看发生了什么。

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

0x55, 0x53, 0x42, 0x53, 0x70, 0x02

接着是零(0x00(。总共22个字节。通过串行线传输的字节的总数确实与我想编写的字节数量匹配>从本质上讲,我的数据被这22个字节块掩盖了。奇怪的是,我可以将这些字节转换为ASCII

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

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

[编辑]:其他信息:

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

  • 目标是NRF52840预览开发套件,使用Nordic NRF5 SDK v12.3.0_d7731ad(我知道不是最新的,但也不是唯一支持其他板的一个(。使用app_uart_x API

您必须配置串行端口。两种设备的baud速率设置,启动/停止位,...必须匹配。然后,go中有图书馆,例如https://github.com/jacobsa/go-serial,可以使用标准的串行端口通信,您也可以使用任何HEX值。

我不能说为什么要发送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/source/usb/core/core/urb.c

最新更新