先引用一篇网文,作者不详,因几个地方都说自己是原创,我昏了,不知道是谁原创的
RS232 中 RTS 和 CTS 的作用
问:
以前挺明白的,今天一下子觉得以前的理解都不对了,以下三种解释哪个对呢?
解释一:
RTS:终端我已经准备就绪,有数据就发过来吧
CTS:来了,接招
解释二:
RTS:终端我准备发数据给你,快用 CTS 应答,准备好没?
CTS:好了,来吧
解释三:
CTS:主机,我有数据,请求接收
RTS:我是主机,就绪,请求发送。
我今天弄了个 SIM100 模块,我将 RTS 设置无效之后,凡是要发往主机的数据都没有发过来(包括主动数据
RING),指令和指令返回结果都没有返回,都缓存在模块之中,等我将 RTS 设置有效后,缓存的数据全发来了,
包括一大堆指令的执行结果,由此,我觉得上面的“解释一”应该正确,而“解释二”应该是错的,但“解释三”是否正
确呢?就是说 CTS 和 RTS 哪个是发起者呢?
答:
一是错的
二是 RS232 标准
三是 MODEM 的硬件流控
SIMCOM 公司的解释完全正确
很久很久以前,计算机还没有出现,那时就已经存在了(计算机)史前的串口设备(电传打字机,工控测量设
备,通信调制解调器),为了连接这些串口,EIA 制定了 RS232 标准,采用 DB25 接插件,支持同步和异步串口,
D 型的接口可以有效防止插反。标准化给使用带来了便利。
时光荏苒,个人计算机出现了,这些已有的串口设备毫无疑问地成为了最初的外设,自然而然地 RS232 标准
被个人计算机采纳。但是设备制造商倾向于体积更小,成本更低的接口,因此,将 DB25 中未使用的和支持同步模
式的引脚去掉,形成 DB9。最初的情况相当混乱,因为 DB9 只定义了信号,却没有指定信号和引脚的对应关系,
各个制造商只能自行定义。幸运的是,IBM 的 PC 成了工业标准,DB9 逐渐统一到 IBM 的定义上来。
DB9 只有 9 根线,遵循 RS232 标准。定义如下:
DTR,DSR------DTE 设备准备好/DCE 设备准备好。主流控信号。
RTS,CTS------请求发送/清除发送。用于半双工时,收发切换。属于辅助流控信号。半双工的意思是说,
发的时候不收,收的时候不发。那么怎么区分收发呢?缺省时是 DCE 向 DTE 发送数据,当 DTE 决定向 DCE 发数据
时,先有效 RTS,表示 DTE 希望向 DCE 发送,一般 DCE 不能马上转换收发状态,DTE 就通过监测 CTS 是否有效来
判断可否发送,这样避免了 DTE 在 DCE 未准备好时发送所导致的数据丢失。
全双工时,这两个信号一直有效即可。
随着计算机的日益普及,很多非 RS232 的串口也要接入 PC 机,如果为每一种新出现的串口都增加一个新的
I/O 口显然不现实,因为 PC 后面板位置有限,因此,将 RS232 串口和非 RS232 串口都通过 RS232 口接入是最佳
方案。UART 的 U(通用)指的就是这个意思。早期 ROM BIOS 和 DOS 里的通信软件都是为 RS232 设计的,在没有
检测到 DCD 有效前不会发送数据,因此,就连发送一个字符这样朴素的应用也要给出 DCD、 DTR、DSR 等控制信
号。因此,串口接头上要将一些控制线短接,或者干脆绕过系统软件自己写通信程序。
评论0