串口:
全双工
异步
串行发送
发送端 tx ,接收端 rx
数据帧: 1位起始位 8位数据位 1位奇偶校验位 1位停止位
IIC:
半双工
串行通信
时钟线SCL ,数据线SDA
数据格式: 起始信号 设备地址 从机响应 ... 停止信号
SCL为低时,改变SDA信号,SCL为高时,保持SDA信号稳定供采集
主机如果需要从从机接收一位数据: SDA口切换为输入模式,SCL先拉底持续一段时间,然后再拉高,持续一段时间,开始读取SDA线的信号,为高则代表1,为低则代表0
在标准模式下,SCL的低电平时间tLOW和高电平时间tHIGH需要满足最小要求,比如tLOW≥4.7μs,tHIGH≥4μs,而快速模式下可能分别为1.3μs和0.6μs
因此有些直接把高低电平都取5us
只要SCL的高/低电平时间满足从设备的最小要求,通信即可正常进行,占空比是否对称并不影响协议本身
下面自己画了一个时序图:
标准模式:≤ 100 kHz 传感器、EEPROM
快速模式:≤ 400 kHz 显示器、高速传感器
SPI
全双工
串行通信
MISO MOSI CS SCK
环形缓冲区 导致 主机发一位的同时也接一位
主机想从从机接收一位数据,则需要往从机发送一位任意数据即可
时钟极性和时钟相位
边沿切换和采集数据
SPI时钟占空比由主设备配置决定,协议未强制要求50%,仅需满足最小高/低电平时间
低速设备:几十kHz 至 1MHz(如传感器、EEPROM)
中速设备:1MHz 至 10MHz(如显示屏、ADC/DAC)
高速设备:10MHz 至 100MHz+(如高速Flash存储器) 如: W25Q128时钟达80M
FR:徐海涛(hunkxu)