吴 成
(大庆钻探工程公司钻井工程技术研究院钻井仪器研究所,黑龙江 大庆 163413)
开发仪器设备需要大量的资金、时间和人力等资源。如果开发的仪器被竞争对手破解甚至复制,就会严重影响企业的市场竞争力。由此,企业的知识产权保护工作,不应停留在法律层面上,还应该在开发的仪器本身采取必要的措施,也就是提高仪器的逆向工程的成本。
因为钻井仪器需要长时间工作在高温、高压、高震动环境中,所以,仪器的处理器性能较常温设备会差一些,仪器通讯设计也需要考虑从中断恢复的问题。
本文将设计一种通讯协议,其时序、通讯格式和加密方式与通用的通讯协议不同。
本设计使用CPLD处理通讯时序,理由如下:
(1)CPLD 内置配置电路的信息不易读取,而FPGA的外接配置芯片可以直接读取;
(2)通讯时序的实时性要求较高,单片机和DSP无法胜任;
(3)处理通讯时序所需的资源不多,CPLD 处理通讯时序时,还可以同时完成其他任务。
主机和从机的通讯,是在同一条线上实现的半双工通讯,通讯接口外围电路如图1所示。需要考虑的实际问题和解决方法有:
图1 通讯接口外围电路
(1)信号冲突:如果通讯双方同时向总线发送数据,就会使引脚的电流过大,造成损坏或烧毁芯片。电路设计时,为通讯引脚串入限流电阻。
(2)通讯线破损:钻井施工的长时间高震动,会破坏线缆绝缘保护层,导致总线接触到壳体或其他线缆,导致引脚的电流过大。电路设计时,为通讯引脚串入限流电阻。
(3)通讯线靠近其他大功率信号线:大功率信号通过容性耦合和感性耦合,在邻近的其他线缆上产生干扰信号。电路设计时,使用一阶RC网络对通讯信号进行平滑滤波。考虑到RC网络对信号的延迟,需要根据电路调试情况选择电容。
(4)通讯中断:钻井施工的长时间高震动,导致通讯线瞬时接触不良,将使正在进行的通讯中断。由于多数CPU要求芯片引脚不能悬空,所以需要为通讯引脚提供一个确定的状态。电路设计时,使用上拉电阻,使总线和通讯引脚提供默认的高电平。
一些标准设备,如逻辑分析仪,可以很方便地分析和破解标准通讯协议,例如SCI、SPI和CAN等。仪器自定义通讯协议,迫使竞争对手投入人力解析,将提高破解成本。
设计实例中,通讯双方使用CPLD作为接口芯片,CPLD 的时钟频率为12MHz,每50 个时钟周期进行一次总线信号采样。通讯格式:
(1)帧起始标志:所有的通讯均由主机发起,帧起始标志的时序为200*3个时钟周期高电平-200*3个时钟周期低电平-200*3 个时钟周期高电平-200*3 个时钟周期低电平;
(2)数据位格式:逻辑1的时序,为200个时钟周期高电平-200 个时钟周期低电平;逻辑0 的时序,为200个时钟周期低电平-200个时钟周期高电平;
(3)应答标志:仅逻辑1为有效应答;
(4)主机向从机发送命令和数据的通讯格式(时序如图2所示):
图2 主机向从机传送命令、数据的通讯格式时序图
①Quab1 主机向从机发送帧起始标志,并等待从机应答。若从机应答超时,则本次通讯失败。
②从机检测到有效的帧起始标志后,向主机发送应答标志。
③主机在规定的时间内检测到有效的应答标志后,向从机发送数据。若主机应答超时,则本次通讯失败。
④从机接收数据,同时进行数据位有效性检查和生成校验数据。并在数据接收完成后,发送应答标志。
(5)从机向主机发送校验结果的通讯格式(时序如图3所示):
图3 从机向主机传送数据校验结果的通讯格式时序图
①从机检测到有效的帧起始标志后,向主机发送应答标志。
②从机向主机发送校验数据。
③主机接收校验数据,并确认校验数据有效后,发送应答标志。若主机应答超时,则本次通讯失败。
④从机在规定的时间范围内检测到有效的应答标志后,将执行主机的命令,本次通讯成功完成。若主机应答超时,则本次通讯失败。
(6)若双方检测到通讯失败,将重新发起通讯。如果出现连续多次通讯失败,就可以判定为仪器通讯稳定性出现问题。在仪器起钻后,应检查通讯线的可靠性。
数据加密,就是将明文通过密钥转换成无意义的密文,而接收方将密文解密还原成明文。钻井仪器工作在高温环境中,CPU的性能普遍不高。因此,在设计通讯协议时,不能使用复杂的加密算法。
设计实例中,通讯加密的步骤如下:
(1)取得预设的密钥:通讯加密预设的密钥是一个字节,8个字位不全为0或全为1,避免降低通讯协议的破解难度;
(2)加密明文第一个字节:将明文的第一个字节与密钥做异或,得到密文的第一个字节;
(3)加密明文其他数据:将明文的第二个字节与密文的第一个字节做异或,得到密文的第二个字节。与密文的第二个字节计算方法相同,即可得到密文之后的所有数据。
设计实例中,通讯解密的步骤如下:
(1)取得预设的密钥:通讯解密的密钥与加密的密钥相同;
(2)解密密文第一个字节:将密文的第一个字节与密钥做异或,得到明文的第一个字节;
(3)解密密文其他数据:将密文的第二个字节与密文的第一个字节做异或,得到明文的第二个字节。与明文的第二个字节计算方法相同,即可得到明文之后的所有数据。
设计实例中,校验数据密文的生成步骤如下:
(1)取得预设的密钥:校验数据使用的密钥与数据加密和解密的密钥不同。校验数据预设的密钥的各数据不能是全0或全1,否则将降低通讯协议的破解难度;
(2)校验数据的明文:将明文逐字节进行加和计算,将计算结果的最低字节作为校验数据的明文;
(3)校验数据的密文:将校验数据的明文与密钥做异或,得到校验数据的密文。
设计实例中,校验数据明文是将密文与对应的密钥做异或得到的数据。
在调试过程中,内部通讯在接线良好时,通讯稳定;在人工模拟通讯干扰时,能很好地完成通讯任务;在人工模拟通讯中断时,出现了总线冲突,未造成通讯引脚损坏和CPU工作不正常,并且成功地从错误中恢复。
参考本文的设计思路,也可以设计出其他的通讯电路和通讯加密方法,为仪器的知识产权提供一个可行的保护方案。