1.总述
接口名称 | SPI | I2C | UART | CAN | USB | DVP | MIPI |
引脚 | MOSI MISO CLK CS GND | SDA CLK | RX TX GND | CAN_H CAN_L | VCC D+ D- GND | DATA_1~DATA8 HSYNC VSYNC CLK GND | R(T)XCP R(T)XCN R(T)XD0P R(T)XD0N R(T)XD1P R(T)XD0P |
同步方式 | CLK同步 | CLK同步 | 波特率同步 | 波特率同步 | 有帧同步包 一般是1ms | CLK同步 | 差分clk同步 |
用途 | 同步双工,一主对多从 | 同步单工,一主对多从 | 异步双工,单设备 | 多设备 | 单设备 | 单设备 | 单设备 |
速度 | <100Mbps | <1Mbps | <3Mbps | 1Mbps, 500k,250k,125k | 480,12,1.5 | <100Mbps | <600Mbps |
2.SPI
2.1 4种模式:
模式0:空闲为低电平,上升沿开始采样,最常用的模式。
模式1:空闲为低电平,下降沿开始采样。
模式2:空闲为高电平,上升沿开始采样。
模式3:空闲为高电平,下降沿开始采样。
2.2 问题处理方法:
当SPI出现异常时,常用的查找问题方式包括以下几种:
-
检查硬件连接。
-
检查时钟和数据线状态:通过示波器或逻辑分析仪等工具检查时钟和数据线的状态是否符合SPI协议中定义的模式。
-
检查主从设备配置:确保主设备和从设备的SPI配置正确,包括时钟速率、数据位宽等参数是否一致。
-
检查电源和地连接:确保主从设备之间的电源和地连接正常,避免因电源供应问题导致通信异常。
-
查看SPI协议栈和驱动程序:检查SPI协议栈或驱动程序是否正确配置和使用。可能需要检查相关的软件代码,包括初始化、数据传输和错误处理等部分。
-
考虑环境因素:某些环境因素,如电磁干扰、信号衰减等,可能影响SPI通信的稳定性。在高干扰环境中,可能需要采取额外的屏蔽措施或使用更高抗干扰能力的硬件设备。
-
日志和调试信息:通过查看系统日志和调试信息,了解SPI通信过程中是否有异常或错误提示,有助于定位问题所在。
-
逐步排除法:如果以上方法都无法解决问题,可以采用逐步排除法,逐个排查可能存在问题的因素,从而找出并解决问题。
3.I2C
3.1 I2C传输流程
1.开始信号 sda,scl拉高再拉低。
1.主机发送设备地址一般7位的ID地址(地址的最后一位用于指示读写操作,0表示写,1表示读),然后拉高 sda等待应答
2.如果匹配,从机会先发应答信号(sda拉低 就是bit0)(可能再回发ID给主机)
3.之后就可以传输数据或读寄存器的操作了。1.发送一个字节,并返回应答状态。2接收一个字节,并发送应答或非应答信号.
利用“线与”判断总线占用状态
可以将多个开漏输出的Pin脚,连接到一条线上,形成“与逻辑”关系,即“线与”功能,任意一个变低后,开漏线上的逻辑就为0了。这也是I2C,SMBus等总线判断总线占用状态的原理。
如果总线上的一个A设备将SDA拉高,这时总线上另一个B设备已将SDA拉低,这时由于1&0=0,所以A设备检查SDA的时候会发现不是高电平而是低电平,这就表明总线上已经有其他设备占用总线了,A只好放弃,如果检测是高电平那就可以使用。
4.uart
UART的一帧由起始位、数据位、校验位和停止位组成
为什么UART的传输需要起始位?
因为UART没有控制线,要让接收方知道什么时候开始接收数据,需要一些手段,UART数据的传输中,只有一根线,所以在发送数据之前,先发一位逻辑“0”作为数据发送的起始标志,接收方在空闲时,当检测到有一个低电平,则开始接逐位接收数据。
5.CAN
5.1帧类型
数据帧,帧间隔,错误帧,远程帧,过载帧。
5.2 CAN-FD和CAN
CAN的数据长度(DATA)是8个字节(11位的标识符)
下面是传统CAN的数据帧格式示意图:
| SOF | Frame Type | Identifier | RTR | Control | Data | CRC | ACK | EOF |
|-----|------------|------------|-----|---------|------|-----|-----|-----|
| 1 | 1 | 11 or 29 | 0/1 | 6 | 0-8字节| 15 | 1 | 7 |
其中:
- SOF:帧起始标识符,固定为一个始终为 recessive 的位。
- Frame Type:用于区分数据帧和远程帧。
- Identifier:消息的标识符,可以是11位(标准CAN)或29位(扩展CAN)。
- RTR:仅在远程帧中存在,用于指示数据帧或远程帧。
- Control:控制字段,包含数据长度和帧格式信息。
- Data:消息的实际数据,长度可变,最多8字节。
- CRC:循环冗余校验,用于检测数据传输错误。
- ACK:用于确认数据帧是否已被成功接收。
- EOF:帧结束标识符,表示数据帧的结束。
CAN-FD的数据长度是64个字节
5.3 当CAN通信出现问题时,可以采取以下步骤来查找问题:
-
检查物理连接:确保所有CAN设备之间的物理连接正常。检查电缆、连接器、接地等是否存在问题。
-
检查供电:确保所有CAN设备都有足够的供电。低电压或不稳定的电源可能导致通信问题。
-
检查终端电阻:在CAN网络的两端应该连接终端电阻。确保终端电阻的值正确,并且连接正常。
-
检查软件配置:检查CAN设备的软件配置,包括波特率、过滤器设置、模式等是否正确配置。
-
检查错误报告:CAN总线上的设备通常会记录错误,可以通过查看设备的错误报告来确定是否有任何通信错误发生。
-
使用调试工具:使用CAN总线分析仪或者CAN调试工具来监视CAN通信,并且诊断任何问题。这些工具可以捕获CAN帧、分析错误、检查波形等。
-
排除故障设备:通过逐个排除CAN网络中的设备,可以确定是哪个设备导致了通信问题。
-
检查电磁干扰:CAN通信可能受到电磁干扰的影响。尽量减少电磁干扰的源头,或者采取屏蔽措施来保护CAN通信。
-
软件调试:如果问题是由于软件错误导致的,可以通过调试软件代码来查找并解决问题。
-
查看文档资料:查阅CAN设备的文档资料,可能会有特定的故障排除步骤或者常见问题解决方案。
5.4 模式
-
普通模式:
- 在普通模式下,CAN控制器将发送的数据帧发送到总线上,接收到的数据帧来自总线上的其他节点。换句话说,发送的数据帧会通过总线传输到其他节点,并由其他节点接收处理。
-
回环模式:
- 在回环模式下,发送的数据帧不会真正通过总线发送到其他节点,而是会被CAN控制器直接接收,然后发送方会从本地环回中接收到这个数据帧。这样可以用于自我测试、诊断以及验证CAN控制器本地环路是否正确工作。