要想理解什么是DTE和DCE以及CTS、RTS的流控,那么我们要回到远古时代,现在都是用网口(RJ45)上网的,你经历过用串口(DB9、DB25)上网的年代吗?
DTE (data terminal equipment) 是数据终端设备。例如电脑,打印机。这种设备一般用 公头DB9/DB25连接器。
DCE (data communication equipment) 是数据通讯设备。例如调制解调器。这种设备上一般用母头DB9/DB25连接器。下图就是一个串口的调制解调器,用了DB25的母口。
之所以定义DCE和DTE两种设备(或者模式),是为了区分串口通信中各个信号的方向。以DB9串口为例,信号方向定义如下。仔细看一下第2脚RXD,对于公头来说是输入,但公母对接之后,对于母头来说这个就是输出了。
引脚号 | 名称 | DTE / 公头 | DCE / 母头 | 描述 |
---|---|---|---|---|
1 | DCD (data carrier detct) | - | - | 数据载波检测 |
2 | RXD (received data) | 输入 | 输出 | 串口数据输入 |
3 | TXD (trasmitted data) | 输出 | 输入 | 串口数据输出 |
4 | DTR (data terminal ready) | - | - | 数据终端就绪 |
5 | GND (signal ground) | - | - | 信号地 |
6 | DSR (data send ready) | - | - | 数据发送就绪 |
7 | RTS (request to send) | 输出 | 输入 | 发送数据请求 |
8 | CTS (clear to send) | 输入 | 输出 | 发送清除 |
9 | RI (ring indicator) | - | - | 铃声指示 |
现在很多ARM MCU或MPU都有DCE或DTE模式,这个模式就是为了切换信号方向的。如果在DTE模式,那么一般来说RXD就是输入。如果在DCE模式,那么RXD就是输出。但是也不一定,因为这个不是标准,没有标准组织来定义和维护,这个只是一个默认的规则。不管ARM的MCU或MPU如何定义,对于开发者来说,认准的是信号传输方向, 不要看名称是RXD还是TXD。