本帖最后由 KC1314 于 2017-10-12 17:38 编辑
关于串口硬件控制流DTR/DSR,RTS/CTS的用法,网上查了很多资料,感觉还是很混乱
对于这两对控制信号有两种理解法,存在两个问题。
分数不多,麻烦各位大神能够指点迷津,万分感谢!!!
目标:通过串口来读取安捷伦34401A的数据。
问题一:这RTS/CTS作用的原理是什么,有两种理解。
问题二:RTS/CTS这组信号与DTR/DSR这组信号它们两对又是怎么配合作用的。
问题三:“在RS232中本来CTS 与RTS 有明确的意义,但自从贺氏(HAYES ) 推出了聪明猫(SmartModem)后就有点混淆了,不过现在这种意义为主流意义的,各大芯片制造厂家对UART控制器的流控基本采用HAYES MODEM流控解释。“,那串口通信我到底是用RS232的标准还是贺氏的标准。
查资料说RS232中,DTR/DSR是进行主流控的,RTS/CTS是进行半双工切换的;而贺氏标准是RTS/CTS进行硬件流控。可是我进行试验就PC与安捷伦34401A用全交叉线进行连接,串口助手上要勾选DTR数据才能接收的到。但勾不勾选RTS,都不影响数据的接收。感觉没用上RTS/CTS这对信号。
心都搞碎了,好多东西讲的都是模棱两可,查的资料好多都是一样的。。。
针对问题一的两种理解如下。
第一种,它的作用机理。
A要发送数据,即Request To Send “请求发送”(数据),B看到RTS有效了,决定,如果自己要做准备工作,就设置CTS无效,如果本身准备好了,就设置CTS,Clear To Send,表示对于你的Send发送(数据)来说,我已经Clear(忙清了)。所以A看到CTS有效就可以发送数据了。然后接下来的每一个从A发送到B的字节数据都是这么个过程。中间有可能遇到说,B的buffer full 缓存满了,所以要设置CTS无效,A发现后,就停止发送数据,继续检测CTS直到有效,才继续发送数据。正常数据发送完成后,A就把最开始设置为有效的RTS这个标示清除掉,即设置RTS无效,表示数据传完了。 由此,整个A发送数据到B的过程就Over了。
第二种,它的作用机理。A接收数据,B发送数据
当A的RTS有效时,B的CTS检测到有效,则数据由B发给A。在数据不断的从B发给A过程中,B不断检测B的CTS是否有效,一旦B的CTS无效,则B停止向A发数据。见图2
|