about bus
总线,
计算机的组成部件间用于传输数据或者指令的物理(软件逻辑)线路,以下列举一些嵌入式中常见的总线和其他总线
MIPI
HDMI
SPI
标准的SPI总线是有CS(chip select)/SS(slave select), CLOCK, MISO(Master IN Slave out), MOSI 四条线,用于nor flash的扩展的SPI额外多了两条引脚 WP(write protect),HOLD(用于禁止主机和flash器件的所有通讯)
常见的1-wire(只用一条数据线,bitbang,只能单工), 2-wire(可以双工), 4-wire(使用WP和HOLD脚作为额外的两条数据线) 都是说用来传输数据的线的数量
标准的是2-wire, 1-wire 为了节约引脚,4-wire为了提升速率
SPI通信的开始总是以CS引脚电平拉低开始,拉高而结束
SPI clock的极性(ploar)和相位(phase) 各有0,1两种排列组合出来共有4种,所以spi有4种工作模式
四种模式的差异在于读取数据的时机是在第一个还是第二个跳变沿,是上升
沿还是下降沿
| 模式别名 | CPOL | CPHA | 特性点 |
|---|---|---|---|
| mode 0 | 0 | 0 | 空闲(没传输数据)时,时钟线是处于低电平,从第一个上升沿开始采集数据 |
| mode 1 | 0 | 1 | 空闲(没传输数据)时,时钟线是处于低电平,从第二个上升沿开始采集数据 |
| mode 2 | 1 | 0 | 空闲(没传输数据)时,时钟线是处于高电平,钟线是处于低电平,从第一个下降沿开始采集数据 |
| mode 3 | 1 | 1 | 空闲(没传输数据)时,时钟线是处于高电平 ,从第二个下降沿开始采集数据 |
时钟的极性
CPOL = 0:表示空闲时是低电平
CPOL = 1:表示空闲时是高电平
由于数据传输往往是从跳变沿开始的,也就表示开始传输数据的时候,是下降沿还是上升沿。
时钟的相位
CPHA = 0:表示从第一个跳变沿开始采样
CPHA = 1:表示从第二个跳变沿开始采样
一个时钟周期会有2个跳变沿。而相位,直接决定SPI总线从那个跳变沿开始采样数据。
至于跳变沿究竟是上升沿还是下降沿,这取决于 CPOL。记住, CPHA 只决定是哪个跳变沿采样。
数据发送应该是MSB first
ps:
关于SPI的通讯可以参考一些SPI Nor Flash的器件手册,手册上有清晰易懂的图形,或者参考文末的参考博客链接
I2C (IIC)
发音 I two see 或者 I square see 全拼写为 Inter-Integrated Circuit
飞利浦公司发明的,只用两条线,一条clock,一条data,支持多主机多从机的模式,需要固定的设备地址,因为只需要用到两条线,所以很在嵌入式设备(板子上)很流行
I2C总线支持的速率有几种
| I2C Mode | Speed | 特性 |
|---|---|---|
| Standard Mode | 100 Kbps | Similar in Implementation, with different timing requirements |
| Fast Mode | 400 Kbps | Similar in Implementation, with different timing requirements |
| Fast Mode Plus | 1Mbps | Similar in Implementation, with different timing requirements |
| High Speed Mode | 3.4Mbps | Reques controller code for high speed transfre |
| Ultra-Fast Mode | 5 Mbps | Write-only, Omits some standard I2C features |
I2C的时序图如下

I2C上的数据仅在时钟线为高电平的时候有效(SCLline high, SDA is Stable),其取值为1&0 = 0 , 1 & 1 = 1
I2C上的ACK = 逻辑 ‘0’
I2C上的NACK = 逻辑’1’
R = 逻辑’1’
W = 逻辑 ‘0’
发送数据是从MSB..LSB的顺序
ps:
参考资料 来自德州仪器网站的
slides-i2c-protocol.pdf