为什么只有在输入后才能通过串行连接接收字符?

时间:2014-11-30 15:19:01

标签: linux serial-port uart

我有一个简单的PC到板连接使用串行(9600,没有奇偶校验,8位,没有hw流) 我在PC上打开了带teraterm的简单终端*并在teraterm和board中输入密钥,我只是做了

 cat /dev/ttyO5

我在范围内看到了按下的字符,但是我看到了电路板控制台中的字符,只有在teraterm中按下“enter”后(好像它们存储在Linux驱动程序中的某些FIFO中,只能输入触发器)

  1. 为什么只有在按下回车键时才能在Linux驱动程序中收到字符?
  2. 有没有办法在不按回车键的情况下接收字符? (我们使用ascii的一些协议,所以将它作为虚拟发送是没有意义的)
  3. 感谢您的建议, 然

1 个答案:

答案 0 :(得分:6)

  

但是只有按下"然后输入"在teraterm

您描述的行为是规范阅读(也就是阅读线)的特征 您似乎想要的行为称为非规范读取(也称为原始读取或二进制读取)。

  
      
  1. 为什么只有在按下回车键时才能在Linux驱动程序中收到字符?
  2.   

不,Linux串口驱动程序正在接收线路上显示的每个字符 每个字符都被缓冲(通常在DMA内存中),然后转发到行规程处理程序,它也会缓冲接收到的数据。
userland程序的规范 read()系统调用将被阻止,直到行纪律处理程序检测到行终止字符。

  
      
  1. 有没有办法在不按回车键的情况下接收字符?
  2.   

是,在发出cat命令之前,将串行端口配置为非规范模式:

stty -F /dev/tty05 raw

或更可能是正确的设备节点

stty -F /dev/ttyO5 raw

或使用 termios 接口在板上的用户空间程序中将串行端口配置为非规范模式。示例代码为here

有关如何正确编程串口的文档是 Serial Programming Guide for POSIX Operating SystemsSetting Terminal Modes Properly