前面几期的内容,大都是讲一讲IOL的基础知识,从本期开始,我们就要逐渐接近IOL通信内部核心逻辑了。而本期,就要讲一讲IOL通信主从之间要做的第一件事——通信建立。
在前面的内容中我们已经知道,IOL通信是由主站主导控制的点对点通信,基本上从站所有的指令控制与状态机的切换,均依赖主站控制。因此,在第一步建立通信连接时,仍然是主站主导。所以我们按照指令或者动作的先后顺序进行分析。
·线缆接口
首先我们来了解一下物理层,这是主从之间的直接物理连接,是IOL通信的物理基础。
IOL通信的物理接口采用的是至多五线芯标准线缆(M12-5),也有使用四线芯线缆(M12-4、M5、M8),其中M12-4与M12-5两种线缆是市面上使用较多的,这里我们也重点讲这两种接口。两者唯一差别是M12-5接口比M12-4接口在中心位置多了一根5号线芯。主站必须采用M12-5接口以满足设备可选的M12-5与M12-4接口的通用性。
IOL的端口连接方式按照类型划分有两种:CLass-A与Class-B。两者区别见下方定义:
定义1:
无论四线芯还是五线芯,1号线恒常为工业24V电源的正极;3号线恒常为工业24V的负极;4号线恒常为通信线路。
定义2:
在定义1供电配置下满足系统需求时,2号线可以悬空或建议作为DIO配置或模拟量输入输出配置;若选择四线芯,5号线不做定义;若选择五线芯,5号线可以悬空——Class-A。虽然官方文档定义5号线在CLass-A中为NC,按照官方的期望,如果5号线没有功能,从站应该直接采用4线芯线缆。但是实际市面上众多厂家对5号线也有功能设置,因此,2号线与5号线其实差不多功能趋于一致性,即可以悬空,可以作为DIO,也可以作为模拟量输入输出。而即便是2号线与5号线都悬空,较多设备供应商也都是统一使用5线芯线缆以减少多种线缆库存与维护的开销。
定义3:
在定义1供电配置下无法满足系统需求时,必须选择5线芯线缆,2号线作为额外的工业24V正极(P24),5号线作为额外的工业24V负极(N24)——Class-B。此种类型适用于高功率设备,例如阀岛,连接众多电磁阀继电器等,一组24V供电满足不了功率需求,就需要额外的高功率供电。
实际上,上述的连接规则都是依赖PHY芯片的支持。市面上众多PHY芯片,都是按照上述规定提供了线路接口,承受24V,部分芯片内置LDO或者DCDC,将24V降压稳压到5V或者3.3V以满足MCU使用。
·物理层PHY
通过上述说明我们从物理接口来到了设备内部,接口连接着PHY,PHY连接着MCU,类同485的PHY与CAN的PHY,具有相似功能。
完成IOL通信的最小PHY连接,MCU与PHY之间有四根线路:WURQ、TXD、RXD、TXEN。其中TXD、RXD、TXEN将在后续的通信过程中描述作用,本期只讲述与通信连接建立相关的WURQ线路。
在前面文章中我们了解到,主站在与从站建立连接时,会发送唤醒信号,然后以COM3-COM2-COM1三种传输速度循环发送握手序列,紧接着回过头来唤醒-COM3-COM2-COM1。WURQ就是为唤醒信号服务的。
首先,从站在上电初始化时,CQ线路被初始化为SIO模式。主站通过在CQ线路上进行一次电平翻转向从站的PHY发起一次唤醒脉冲,该脉冲时长典型值为80us。由上图所示,若CQ线路为初始低电平,则翻转电平到高电平,维持75-85us(虽然表格内未标出,但是典型值80us),再切换到低电平等待从站PHY识别到唤醒脉冲。如果初始电平为高电平,则直接翻转电平到低电平,从下降沿时刻开始80us,从站PHY识别唤醒脉冲。
从电平翻转时刻开始,等待500us,之后主站便发起COM3-COM2-COM1的握手序列。
在PHY识别到唤醒脉冲后,会将与MCU连接的WURQ线路拉高,MCU需要配置该引脚为上升沿诊断的外部中断,在获取到WURQ的上升沿信号后,软件配置PHY的CQ线路到接收方向,用以接收主站的握手序列。此时,PHY从SIO模式切换到SDCI通信模式。这个切换的过程,就在主站唤醒后等待的500us内。
·握手序列
从站MCU在处理完毕PHY的WURQ信号后,将PHY切换到接收方向,此后主站按照COM3-COM2-COM1的速度发来握手序列,从站接收到握手序列会诊断序列字节数值的准确性。
那么主站发的是什么?
主站的握手序列:0xA2 0x00。实际上,从站主要识别的第一个字节0xA2,这包含了主站的信息:0xA2 = 1010 0010。意思是,读方向-直接参数页通信通道-地址为2。这里就涉及到握手后的直接参数页的操作,我们分到后面详细讲解,在这里只简单说明这是在读取设备直接参数页1内存放的设备最小循环时间这一参数。所以实际上从站只要在唤醒后的第一个字节确定主站要读取设备的最小循环时间,那么从站就能够顺利发出后续的回复。
之后,从站根据开发人员定义的最小循环时间,在计算CKS后组装成M序列返回给主站。主站能够成功收到从站的回复,便确定主从之间顺利建立连接,切换状态机进行后续的动作。
以上是本节的全部内容,如果各位读者仍然存在疑惑可以私信发送问题,笔者会一一解答并积累一期文章的内容更新出来。
笔者内容也许会存在错误,欢迎志同道合的开发者一起讨论。我们共同进步!
喜欢我的文章请关注我的微信公众号,我会不定期更新更多干货知识!