GPIO
- 通用型输入输出(General-purpose input/output)
- input: 读外围HW的电平信号,例如读取按键信号
- output: 控制HW行为,例如控制外围芯片供电,控制外围LED亮灭等等
- 可以SW模拟其他对外接口,例如I2C/SPI等
- HW线路:1根管脚
参考下图: 
针对某个GPIO的通常用法:
- register 设置 GPIO模式(通常GPIO可复用其他功能)
- register 设置input/output 功能
- register 读取/写入 input/output 电平
- 其他:上拉/下拉/悬空状态设置
UART
- 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)
- TX/RX
- 收发两端需要预先指定传输信息,例如波特率/位数(putty/securecrt)
- 起始位/数据位/校验位/停止位
- RS232、 RS449、 RS423、 RS422
和 RS485 不同的模拟电气特性 - HW: 2根管脚

默认高电平,拉低表示起始位,然后按照固定的波特率采样信号线上的电平 
I2C/IIC Bus
- Inter-Integrated Circuit Bus:IC之间总线
- SDA:双向数据线
- SCL:时钟线
- 低速,半双工,由主机发起读写信号
- HW: 2根线
 一般流程:
- 默认SDA/SCL为高电平
- master 拉低SDA表示传输开始START
- 在SCL上升沿时,采样SDA的数据信号,表示读取一位数据
- 读完8位数据,slave会拉低SDA,表示ACK,如果不拉低,表示slave读取失败,master需要重传数据
- ACK 以后,master可以继续发送下一个byte的数据
- 在SCL高电平期间,拉高SDA线,表示传输结束STOP
常用场景: 1 读写外部IC的寄存器 
SPI
- Serial Peripheral interface 串行外围设备接口
- 高速的,全双工
- MISO: 主设备输入/从设备输出引脚。
- MOSI: 主设备输出/从设备输入引脚。
- SCLK:串行时钟信号,由主设备产生。
- CS/SS:从设备片选信号,由主设备控制。它的功能是用来作为“片选引脚”,也就是选择指定的从设备,让主设备可以单独地与特定从设备通讯,避免数据线上的冲突。



常用场景: SPI flash的读/写/擦除,通常为块操作, 所以读写速度较快,I2C为寄存器操作,需要双向发送地址/命令,速度较慢。
I2S
- I2S(Inter—IC Sound)总线, 又称集成电路内置音频总线
- 串行时钟SCK,也叫位时钟(BCLK),每bit一个方波
- 帧时钟WS/LRCLK,与采样率一致,控制左右声道数据
- 串行数据信号SD,通常两根信号,录音与放音
- MCLK 可选,有时master需要提供clock给slave

CAN
SDIO
USB
|