其实关于协议,最好的学习方法是直观的看波形图,这也是我这篇文章的主要演示形式。
使用某种协议,无法与某个器件成功通信,这并不是什么大问题,最不济拿到一个逻辑分析仪抓一下波形,最终就能找到问题所在。
1. IIC
iic的串行数据是在时钟线高电平时候读取,高电平期间,不允许sda发生电平改变。iic的两根线分别是时钟线和数据线,因为只有一根数据线,所以读写是互斥的,所以属于半双工通信。对器件操作,需要先发送器件地址,8bit数据的前7位标识器件地址。最后一位0表示写,1表示读。
2. SPI
根据配置spi的时钟空闲时候的默认状态和读取时机,有四种不同配置,使用spi时候需要查看器件的芯片手册,确定spi的方式,在单片机上配置为相同模式才能够正常通信。
当clk配置为空闲高电平时候,还需要选择,奇数边沿还是偶数边沿采样。当高电平奇数采样,那就是下降沿采样。否则如果是高电平偶数采样,那就是上升沿采样了。
空闲低电平同理,不做累述。
spi的数据线是sclk,miso,mosi,片选线cs。iic有发送器件地址的机制,来选中总线上众多器件中的一个。spi则使用简单的片选线cs,拉低标识选中。
至于d/c,rst这些控制线一般是对于一些特殊器件,比如tft屏,并不属于spi内容。
spi发送的串行数据宽度可以选择8bit、16bit。
3. intel 8080
8080协议多用于并口屏,相比于iic或者spi的串口单线,8080支持8bit,16bit等。速度自然会快很多。
拿st7789v做例子。
4. IIS
5. UART
UART串口协议的格式通常由以下几部分组成:
-
起始位(Start Bit):表示数据传输开始的位置,通常为一个低电平信号。
-
数据位(Data Bit):表示需要传输的数据位数,通常为5位、6位、7位或8位。
-
奇偶校验位(Parity Bit):用于检验数据传输的正确性,通常采用奇偶校验或无校验。当采用奇偶校验时,校验位可以是奇校验位或偶校验位,用于保证传输的数据中1的个数为奇数或偶数。
-
停止位(Stop Bit):表示数据传输结束的位置,通常为一个高电平信号。
例如,在一个8位数据、无校验、1位停止位的UART串口协议中,一个字节的数据传输格式如下:
起始位 + 8位数据位 + 停止位
其中,起始位通常为低电平信号,停止位通常为高电平信号