UART(串口通信)
通信目的
- 获取数据
- 写入数据
通信对象
- 外设
- SD卡
- 加速度传感器
- 屏幕
- GPS
- 温湿度传感器
- 等等
- Other MCU
- PC
常见通信方式
- UART
- IIC
- SPI
- RS232
- 等等
缺点
- 不能远距离传输信号——RS232
- 通信速度慢——SPI
- 不能一对多通信——IIC
IIC(串行通信总线)
对比UART
- 节约单片机IO资源
- 降低PCB布线成本
通信规则
画电路图需要注意什么
- 如何控制电压——开漏输出
- 上拉电阻取值
写代码又需要注意什么
-
起始和停止条件:
- 起始条件:SCL(串行时钟线)为高时,SDA(串行数据线)从高变低。
- 停止条件:SCL为高时,SDA从低变高。
-
数据位和时钟:
- 数据在SCL的下降沿被发送方写入SDA,并在SCL的上升沿被接收方读取。
- 通常每个字节有8位数据,随后是一个应答位(ACK/NACK)。
-
应答位(ACK/NACK):
- 在第9个SCL周期(即字节后的第一个时钟周期),接收方通过在SDA上拉低(ACK)或保持高(NACK)来响应发送方。
- 发送方必须释放SDA线以便接收方可以产生应答位。
-
地址和数据:
- I²C设备有一个或多个7位或10位的地址,发送方在发送数据之前必须先发送地址。
- 地址位后通常跟随一个读写位(R/W),0表示写操作,1表示读操作。
-
重试和仲裁:
- 如果多个I²C设备同时尝试启动通信(即同时产生起始条件),则时钟线SCL将被拉低,直到只有一个设备保持起始条件,这被称为仲裁。
- 如果设备未能成功传输数据(如由于NACK),则可能需要重试。
-
总线速度和模式:
- I²C支持多种速度模式,包括标准模式(100 kbit/s)、快速模式(400 kbit/s)、高速模式(3.4 Mbit/s)和超高速模式(5 Mbit/s或更高)。
- 根据使用的模式和速度,需要确保SCL和SDA线的正确时序。
-
超时和错误处理:
- 编写代码时应考虑超时和错误处理机制,以处理如总线锁定、通信失败等异常情况。
-
中断和轮询:
- I²C通信可以使用中断驱动或轮询方式实现。中断方式更为高效,但可能需要更复杂的硬件和软件设计。
-
电源管理:
- 如果I²C设备支持电源管理功能(如待机模式),则需要在代码中正确管理这些功能。
-
兼容性:
- 确保你的I²C代码与目标设备(如微控制器、传感器等)兼容。不同的设备可能有不同的I²C实现和特性。
-
调试和测试:
- 使用示波器、逻辑分析仪等工具来调试I²C通信,确保SCL和SDA线的时序和电平正确。
- 编写测试代码来验证I²C通信的可靠性和稳定性。
-
文档和参考手册:
- 仔细阅读目标设备和微控制器的I²C文档和参考手册,了解特定于硬件的实现细节和限制。