用Linux连接两个串口
我希望有一个人可以帮助我.我正在尝试在ARM中进行串行端口通信(我正在使用
Linux).问题是我在Windows中使用称为终端的程序,我用它来查看输出.
我有两条电缆从我的ARM连接到我的电脑的USB.我所做的是打开两个终端程序窗口,我连接相应的串口,直到这里一切正常. 现在在其中一个窗口中,我有ARM控制台(这是ttymxc1串口),我在其中编写了例如“echo hello> / dev / ttymxc2”(ttymxc2是其他窗口中的另一个端口).当我执行它时,somenthing出现,像这样的somenthing:“< 0>< 0>< 0>< 0>< 0>< 0>< 0>< 0>< 0>< 0>< 0>< 0>< 0>我正在阅读,我发现它通常是一个波特率问题,因此我将“ttymxc2”的波特率更改为115200,就像“ttymxc1”一样,速度相同.一旦我这样做并且我试图再次发送相同的回声,出现这个:< 0>?:: *?< 0>所以,somenthig正在改变. 我得到了两个串口的所有参数,它是输出: 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,IRQ: 58 所以我被调查了,而且我是红色的,我必须像这样设置somenthing: 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 adn这是输出: 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测试的正面结果和收到的垃圾数据,可以安全地假设当您发出shell命令echo hello>时ARM板上的Linux正在发送输出.的/ dev / ttymxc2.我们知道您在主机PC和/ dev / ttymxc2(串行控制台)之间有一个良好的串行链接.
第Ia部分 通常,要检查的第一项是imx-uart.2在电路板上的连接器上的输出.您需要一台示波器,并且可以确认逻辑电平或RS-232电压似乎没问题.此检查还要确认您已使用正确的引脚连接. 第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板上的一个未知端口组成. 第二部分 如果您仍然无法从交换中获得积极的结果,那么您需要提供有关设置的更多详细信息. 请提供imx-uart.1和imx-uart.1的电路板连接的详细信息. 如果您正在使用FTDI USB-to-TTL串行“电缆”,那么这可能是一个问题.我遇到了连接到一个SoC的FTDI“电缆”的问题,它具有稍慢的波特率和慢的转换速率.问题是收到的数据总是垃圾字符总数.用USB-to-RS232适配器和MAX3232转换器(RS-232到3.3V逻辑)替换FTDI“电缆”解决了连接问题. 与Sparkfun板和FTDI“电缆”(及其变体和仿冒品)相比,我建议使用真正的TTL到RS232转换器(使用MAX3232或类似芯片)来提高可靠性.只有在您或某人确认设置确实有效后,才能使用Sparkfun板或FTDI“电缆”. 在那种情况下,我有一个串口(在SoC上)固定在115200波特.但是你可以完全控制你的情况.因此,当您接收垃圾数据时,要尝试的一项测试是将波特率(在串行链路的两端)降低到9600甚至1200. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |