背景
在使用底层通信协议的时候,常会遇到一些问题,那么如何调试,应该考虑一些什么问题,就很值得思考,对底层协议的调试应从以下几个方面入手
其实首先应该考虑的是
换一个设备再试试,也许就是设备问题
合规的电源
应满足通信双方的电源需求,电压,可提供的功率等,避免通信过程中受电源的影响,这类其他器件的问题往往是难以考虑到的,不希望出现拍头才会有的大悟,浪费的时间不值得
- 电源的电压,可提供的功率
应注意电压是否满足要求通信双方的要求,同时应注意通信时双方支持的电压是否一样,考虑隔离措施,电平标准间的转换措施,同时应注意电源可提供的最大功率,是否满足刷个双方通信的需求 - 电源的稳定性
电源再不同功率下的纹波(主要是大电流下,接近芯片满功率时的纹波),,请确保电源的稳定 - 电源的动态响应
在通信功率突然增大,或有其他负载的突然增大,可能会有电源补偿不及时,倒是在瞬时电压低于要求的电压,引起设备重启,也可能会有过补偿,导致出现超过可承受的电压,会有烧毁设备的风险 - 是否需要供地 ,参考地的漂移
很多时候,通信双方需要有同一个地平面作为参考,而地平面流过比较大的电流时,会有不同程度的压降,取决于电流通路的载流能力(通路最窄处,板材线材阻抗),参考地保持抬高或者拉低其实影响不太大,更严重的危害在于,地平面由于电流方向大小的变化,产生了波动,不断漂移震荡
信号完整性
高频滤通信,或者在一些不太好的电磁环境下,或者pcb画得不太好,回事高低电平跳变的时候,产生 下冲、过冲、振铃等,常由于以下几个原因
- 阻抗未匹配
● 信号出现过冲,下冲,振铃等现象,其实就是阻抗的不连续而产生的反射,多次反射叠加在一起就形成了震荡 - 被强信号干扰
● 信号毛刺
● 随着其他信号波动而波动 - 线路阻抗过大,(分布电感,分布电容,线材电阻率过高,线路过长)
● 高电平/低电平建立时间过长
● 高电平时电压低,低电平时电压过高(不符合ttl电平、RS485电平未反转)
mcu/soc的通信配置
一些细节问题往往会被忽视,以下是需要考虑的一些问题
- gpio 配置
是否需要内部配置上下拉电阻,开漏推挽,复用等,或者外部配置上下拉电阻,甚至在一些单片机中,可以配置上下拉电阻的阻值 - 考虑使用软件模拟 /硬件模块 来进行通信
在近些年的国产mcu中均可见一斑,例如灵动等,使用芯片自带的spi,iic等片上外设时,其信号完整性往往比较差,甚至相比于pwm,示波器上的波形更难看,在使用软件gpio模拟时,往往会有更好的效果,不妨尝试。 - 启动时时钟信号
在使用一些有时钟信号的通信协议时,是否需要为另一台设备提供时钟信号供其完成初始化或者唤醒,例如内存卡使用spi通信时,需要接近一百个时钟 - 通信速率
太高的的bit传输速率可能会使通信另一方给应接不暇而无法响应,也会使信号完整性上欠考虑的问题爆发
程序正确性
有可能程序与设备的版本并不能匹配,或者设备所需要特定信号,有特定要求,而不能完成通信,应该考虑如下几个方面
- 地址(ID)及特殊处理
在涉及到设备通信双方在总线上的地址时,需要再三核对地址(ID)是否正确 ,同时会有一些其他要求,举个栗子,左移右移添加读写位,crc校验… - 通信的间隔
通信太频繁,间隔时间太短可能会导致通信中的另一方来不及处理而无法回应,或者回应错误数据 - 设备的初始化命令
很多设备需要发送一些命令来使通信的另一方完成一些动作,从而进入我们所期望的工作状态,请确保这些命令的正确性,同时请注意软件版本以及硬件版本
遇到了新的问题接着写