模块串口RTS与CTS的理解与测试
RTS: Request To Send
CTS : Clear To Send
SIMCOM公司解释:
RTS是模块的输入端,用于MCU通知模块,MCU是否准备好,模块是否可向MCU发送信息,RTS的有效电平为低。
CTS是模块的输出端,用于模块通知MCU,模块是否准备好,MCU是否可向模块发送信息,CTS的有效电平为低
正常标准理解:
RTS (Require ToSend,发送请求)为输出信号,用于指示本设备准备好可接收数据,低电平有效,低电平说明本设备可以接收数据。
CTS (Clear ToSend,发送允许)为输入信号,用于判断是否可以向对方发送数据,低电平有效,低电平说明本设备可以向对方发送数据。
以上理解都不错,见下图:
SIMCOM公司模块芯片,EVB与PC串口连接示意图
如上图所示:
SIMCOM官方解释为EVB与PC通信时,RTS作为模块的输入端,CTS作为模块的输出端。
而正常标准理解为芯片内部与PC通信,RTS作为芯片的输出端,CTS作为芯片的输入端
上述理解差别在于SIMCOM公司设计模块时,把芯片内部的RTS和CTS与EVB上的RTS和CTS交叉连接,导致理解歧义。
测试硬件流控时,主要测试的是串口与串口中间的通信,也即模块串口与PC串口(如SSCOM)的通讯过程,TCP的透传只是作为辅助测试的内容,不影响硬件流控的测试结果。
如下测试需提前打开硬件流控:at+ifc=2,2
RTS测试:
由于RTS作为模块的输入端,当PC端(SSCOM)拉高或者拉低RTS时,输出的高低电平作用于模块的输入端,也即EVB的RTS,也即芯片内部的CTS。
CTS为低电平有效,故当CTS拉高时,若通过SSCOM发送AT指令,但串口无上报,则证明RTS硬件流控有效。
由于SSCOM运行在电脑上,理论上来说缓存无限大,人为的拉高RTS后,AT发送后,模块会正常执行AT指令,只是执行内容以及结果都在模块内部缓存暂放,当RTS为低时,会一次性把缓存数据输出到SSCOM中
CTS测试:
一般可以直接通过SSCOM给模块发送文件,但此时发送的数据都会当作AT指令处理,导致一直返回error且发送速率慢。所以使用透传的方式辅助测试,发送文件。
模块连接到透出模式后,选在一个文件,进行发送,同时使用示波器测量CTS的电平,
发送文件时,尽量把模块的波特率改到一个比较大的数值,如921600,at+ipr=921600;
需要多次测量,抓取CTS的高电平。
如果模块的缓存不满,CTS不会输出高电平。
下图为测的CTS起效的示波器波形