在嵌入式系统中,有许多常用的硬件通信协议,目的在于解决不同场景的设备进行数据交换。如:
- SPI(Serial Peripheral Interface) Protocol:
- I2C(Inter-Integrated Circuit) Protocol:
- USART(Universal Synchronous/Asynchronous Receiver/Transmitter) Protocol:
- CAN(Control Area Network) Protocol:
- USB(Universal Serial Bus) Protocol:
等等…
对于这些协议,有以下两个大方面组成:
- 硬件部分
- 接口标准: 几根线,那几根是传输线/状态线等等
- 电气标准:工作电压,电流,功率等等
- 机械标准: 接口的材质,线的粗细长短等等
还有实现协议的硬件功能电路之类(状态寄存器,数据寄存器,控制寄存器等等)
- 软件部分
- 对协议的时序图进行代码抽象实现设备之间的通讯,以下又有两种实现方式:
- 通过硬件驱动实现,即通过写寄存器或库函数方式(库函数的本质也是操作寄存器)。其实这部分不需理解时序图也可以实现,因为通过配置寄存器,硬件会自动实现通信功能
- 需要认真琢磨协议的时序图,通过控制GPIO高低电平时序来模拟各种协议,如模拟USB,模拟串口(uart),模拟I2C等。此方法可以在通讯引脚紧张的时候使用
这些硬件协议共有的一些需要注意的属性:
- 串行/并行
- 单工/半双工/全双工
- 一对一(uart)/一对多(I2C)
- 有无主从机
- 同步/异步(有无时钟线)
名词
- 波特率(baud):单位是bps(bit per second),即每秒传输二进制位的数量
- 符号/码元