我有一个简单的PC到板连接使用串行(9600,没有奇偶校验,8位,没有hw流) 我在PC上打开了带teraterm的简单终端*并在teraterm和board中输入密钥,我只是做了
cat /dev/ttyO5
我在范围内看到了按下的字符,但是我看到了电路板控制台中的字符,只有在teraterm中按下“enter”后(好像它们存储在Linux驱动程序中的某些FIFO中,只能输入触发器)
感谢您的建议, 然
答案 0 :(得分:6)
但是只有按下"然后输入"在teraterm
您描述的行为是规范阅读(也就是阅读线)的特征 您似乎想要的行为称为非规范读取(也称为原始读取或二进制读取)。
- 为什么只有在按下回车键时才能在Linux驱动程序中收到字符?
醇>
不,Linux串口驱动程序正在接收线路上显示的每个字符
每个字符都被缓冲(通常在DMA内存中),然后转发到行规程处理程序,它也会缓冲接收到的数据。
userland程序的规范 read()系统调用将被阻止,直到行纪律处理程序检测到行终止字符。
- 有没有办法在不按回车键的情况下接收字符?
醇>
是,在发出cat
命令之前,将串行端口配置为非规范模式:
stty -F /dev/tty05 raw
或更可能是正确的设备节点
stty -F /dev/ttyO5 raw
或使用 termios 接口在板上的用户空间程序中将串行端口配置为非规范模式。示例代码为here。
有关如何正确编程串口的文档是 Serial Programming Guide for POSIX Operating Systems和Setting Terminal Modes Properly。