- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我希望有人能帮助我。我正在尝试在 ARM 中进行串行端口通信(我正在使用 Linux)。问题是我在 Windows 中使用名为终端的程序,我用它来查看输出。
我有两条电缆从我的 ARM 连接到我计算机的 USB。我所做的是打开两个终端程序窗口,然后连接各自的串口,直到这里一切正常。
现在在其中一个窗口中我有 ARM 控制台(这是 ttymxc1 串行端口),我在其中写了例如“echo hello >/dev/ttymxc2”(ttymxc2 是其他窗口中的另一个端口)。当我执行它时,出现了一些东西,像这样:“<0><0><0><0><0><0><0>”。我正在阅读,发现这通常是波特率问题,所以我将“ttymxc2”的波特率更改为 115200,就像“ttymxc1”一样,两者的速度相同。一旦我这样做了,我试图再次发送相同的回声,出现这个:<0>©::*ë<0> 所以,somethig 正在改变。
我得到了两个串口的所有参数,它是输出:
stty -a -F /dev/ttymxc1
speed 115200 baud;stty: /dev/ttymxc1
line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = ^J;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon ixoff
-iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon -iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
-echoctl echoke
stty -F /dev/ttymxc2 115200
stty -a -F /dev/ttymxc2
speed 115200 baud;stty: /dev/ttymxc2
line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
而且我不知道可以更改哪个参数,我在终端程序中使用两个窗口中的 115200 8n1 无握手配置。
还有当我执行这个
setserial /dev/ttymxc2 -v autoconfig
/dev/ttymxc2, UART: undefined, Port: 0x0000, IRQ: 60
和
setserial /dev/ttymxc0 -v autoconfig
/dev/ttymxc0, UART: undefined, Port: 0x0000, IRQ: 58
所以我被调查了,我知道我必须设置这样的东西:
setserial /dev/ttymxc2 uart 16550A
这是输出:
setserial: can't set serial info: Invalid argument
但我不确定这是不是问题所在,因为 ttymxc1 端口也是未定义的,我可以看到 ARM 输出非常好,所以我很茫然,我希望有人能帮助我。
希望解释清楚
非常感谢
dmesg 的输出 | grep tty:
Kernel command line: noinitrd loglevel=7 no_console_suspend console=ttymxc1,115200
fec_mac=00:05:51:07:B3:B5 mtdparts=gpmi- nand:512k(NBoot)ro,2m(UBoot)ro,256k(UBootEnv),256k
(UserDef),6m(Kernel)ro,-(TargetFS) gpmi_debug_init enable_wait_mode=off ubi.mtd=TargetFS root=ubi0:rootfs rootfstype=ubifs rootwait rw
bootconsole [ttymxc1] enabled
imx-uart.0: ttymxc0 at MMIO 0x2020000 (irq = 58) is a IMX
imx-uart.1: ttymxc1 at MMIO 0x21e8000 (irq = 59) is a IMX
console [ttymxc1] enabled, bootconsole disabled
imx-uart.2: ttymxc2 at MMIO 0x21ec000 (irq = 60) is a IMX
/proc/tty/driver 的输出
/dev/tty /dev/tty 5 0 system:/dev/tty
/dev/console /dev/console 5 1 system:console
/dev/ptmx /dev/ptmx 5 2 system
/dev/vc/0 /dev/vc/0 4 0 system:vtmaster
rfcomm /dev/rfcomm 216 0-255 serial
IMX-uart /dev/ttymxc 207 16-23 serial
pty_slave /dev/pts 136 0-1048575 pty:slave
pty_master /dev/ptm 128 0-1048575 pty:master
pty_slave /dev/ttyp 3 0-255 pty:slave
pty_master /dev/pty 2 0-255 pty:master
unknown /dev/tty 4 1-63 console
我点击这个 cat/proc/tty/driver/IMX-uart,这是输出:
0: uart:IMX mmio:0x02020000 irq:58 tx:0 rx:0 DSR|CD
1: uart:IMX mmio:0x021E8000 irq:59 tx:12075 rx:358 RTS|DTR|DSR|CD
2: uart:IMX mmio:0x021EC000 irq:60 tx:0 rx:0 DSR|CD
最佳答案
根据 /proc/tty/driver/IMX-uart 测试的积极结果和收到的垃圾数据,可以安全地假设您的 ARM 板上的 Linux 正在发送输出,当您发出 shell 命令 echo hello >/dev/ttymxc2
。我们知道您在主机 PC 和串行控制台 /dev/ttymxc2 之间有良好的串行连接。
第 Ia 部分
通常,第一个要检查的项目是 imx-uart.2 在电路板上的连接器上的输出。您将需要一个示波器,并可以确认逻辑电平或 RS-232 电压是否正常。此检查还用于确认您已连接到正确的 PIN 码。
第 Ib 部分
在您所描述的设置和结果(到目前为止)中,您有一个工作串行链路和另一个未知条件的串行链路。工作串行链接是:
<PC COM port_A> ----------(cable_A)-----------<imx-uart.1>
另一个串行链路包括:
<PC COM port_B> ----------(cable_B)-----------<imx-uart.2>
此测试假设所有四个串行端口都配置为 115200 8n1。
通过选择性替换到工作链接中,您可以验证第二个链接的组件是否正常工作。
例如,第一个替代品可能是更换电缆:
<PC COM port_A> ----------(cable_B)-----------<imx-uart.1>
如果到控制台的链接仍然有效,那么下一个替换可能是交换 PC 端口连接:
<PC COM port_B> ----------(cable_B)-----------<imx-uart.1>
然后另一个串行链接现在将包含
<PC COM port_A> ----------(cable_A)-----------<imx-uart.2>
所以现在第二个串行链路由以前已知的工作组件和一个未知组件组成,即 ARM 板上的端口。
重做你的测试。
第二部分
如果您仍然无法从交换中获得积极的结果,那么您需要提供有关您的设置的更多详细信息。你提到了一些关于 USB 的事情。那么显然 PC COM port_A 和 PC COM port_B 都是 USB 端口和某种 RS-232 转 USB 适配器的组合?
请提供imx-uart.1 和imx-uart.1 电路板连接的详细信息。
这些接口(interface)是 RS-232 电压还是逻辑电平?
如果是逻辑电平,那么你用什么来转换成 RS-232?
如果您使用的是 FTDI USB 转 TTL 串行“电缆”,那么这可能是个问题。我在连接到一个 SoC 的 FTDI“电缆”时遇到了问题,该 SoC 的波特率和转换率都比较慢。问题是接收到的数据总是完全是垃圾字符。用 USB 到 RS232 适配器和 MAX3232 转换器(RS-232 到 3.3V 逻辑)替换 FTDI“电缆”解决了这个连接问题。
与 Sparkfun 板和 FTDI“电缆”(及其变体和仿制品)相比,我建议使用真正的 TTL 到 RS232 转换器(使用 MAX3232 或类似芯片)以提高可靠性。只有在您或其他人确认设置确实有效后,才能使用 Sparkfun 开发板或 FTDI“电缆”。
在我遇到的那种情况下,一个串行端口(在 SoC 上)固定为 115200 波特。
但是您可以完全控制自己的情况。
因此,当您收到垃圾数据时,可以尝试的一项测试是将波特率(在串行链路的两端)降低到 9600 甚至 1200。
关于linux - Linux下两个串口之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24041776/
我想用 python 与我的串口通信。我为 linux 安装了 pyserial 和 uspp: import serial ser = serial.Serial('/dev/pts/1', 192
如何实现 IP 串行,反之亦然。 我听说可以用 SOCAT 做到这一点(9600 N,8,1)--> 串口 --> 网络 --> 串口 -->(9600 N81) 请求人们帮助我解决这个问题 最佳答案
ATtiny88初体验(三):串口 ATtiny88单片机不包含串口模块,因此只能使用软件方式模拟串口时序。 串口通信时序通常由起始位、数据位、校验位和停止位四个部分组成,常见的
我有一个 c# 应用程序,它通过串行端口将 pc 连接到设备。 当我向设备发送数据时,如果设备发回数据,则会触发 datareceived 事件。 我想问这个。 有没有办法模拟设备的数据发送? 我的意
所以我将数据从 Arduino 传输到 C# Winform,后者将数据输出到文本框并将其保存到文件中。传输数据格式如下18|25|999|100~;第一部分是以秒为单位的时间,它让我知道什么时候跳过
规范模式状态的 Termios 手册页 ( http://man7.org/linux/man-pages/man3/termios.3.html ): Input is made available
串口代码有问题。 我只是这样做: opencomm(); send(); closecomm(); ClearCommError()(在 recv() 内) 返回comstat.cbInQue 发送的
我想通过音频插孔使用串行端口获取数据。我对此一无所知。但是我找到了一个应用audioserial可以发送数据到。所以,我认为应该获取像 audioserial 这样的数据。 .是否有相同的项目或对此很
串口有问题 我写了一个程序,可以读取端口 COM1 到 COM9,但可以打开 COMXX(如 com10、com11 等) 我搜索并了解到 tCOM1–COM9 是 NT 命名空间中保留名称的一部分。
我正在尝试在 Linux 中使用串口组织 nob-blocking 读写功能。这是我的代码:http://pastebin.com/RSPw7HAi一切正常,但已缓冲。这意味着,如果我通过控制台 +
我想将出现在 Arduino 中的数据传输到我的 C# 应用程序,但不知道我的代码有什么问题。Arduino 代码来了: int switchPin = 7; int ledPin = 13; boo
我正在编写一个网络驱动程序,它应该使用串行通信将数据包发送到 Arduino。这是一项家庭作业,仅用于教育目的。请在建议一切都可以在用户空间中完成之前考虑到这一点。 这answer说明了 filp_o
我想在笔记本电脑和模块之间进行通信。为此,我创建了一个 python 文件,它将一些数据包发送到 UART,它必须读取它们。我有一个创建数据包的 python 脚本(笔记本电脑): SOF= '24'
正在寻找正确的方法来在主板启动消息期间检测一个关键字。检测到关键字后,一秒后发送 Enter 键。内核是Linux。 # Serial port inisialisation is finished
我尝试通过串口读取数据,但读取操作总是返回0。 // Opening COM port and m_fd returned a valid number m_fd = open (m_com_por
微 Controller :dsPIC33EP512MU810 编译器:MikroC 我正在尝试通过 UART 从远程设备请求多个字节。要获得所需的信息,您发送一个请求字节以接收一个数据字节。当请求超
我计划很快开始围绕串行设备的输入进行编码,很高兴找到 Ruby-serialport . API 看起来很容易使用,但我对如何采用基于事件的方法来接收数据有点困惑。 每当 \n 出现时,我想对数据做一
我想在 Linux 中实现一个驱动程序,它有一个以太网堆栈,但在硬件上输出的数据将是一个串行端口。基本上,我想将我的串行端口注册为以太网驱动程序。有谁知道这是否可能?我希望能够将 IPv6 和/或 U
我正在开发一个项目,其中有许多硬件传感器通过 RS232 串行端口连接到部署机器。 但是……我正在一台没有物理 RS232 串行端口的机器上进行开发,但我想制作假的串行端口,我可以连接到这些端口并
我正在制作一个非常简单的 c++ 程序,它通过串行端口向 arduino 发送一个角度,然后 arduino 将该角度应用于伺服电机。我知道 Unix 把串口设备看成一个文件,实际上这是 c++ 代码
我是一名优秀的程序员,十分优秀!