时钟极性选择位 CPOL :
在设备被使能激活 后,还未进行数据传输时或两个字节数据传输间歇期间(见图 3 中的○ 1 与○ 2 处), SCLK 处于空闲( Idle )电平,通过 "CPOL 空闲状态极性控制位 " 可以选择此空闲电平电平是 0 还是 1 。
时钟相位选择位 CPHA :
该控制位用来选择数 据接收端设备的采样时刻。可能在 Idle to Active 的跳变沿(见图 3 中的红色圈处),也可能在 Active to Idle 的跳变沿(见图 3 中的蓝色圈处)。在该采样时刻,线上数据必须已经稳定可靠, 因此数据发送端设备应提前将数据移出到数据线上。为了降低设计难度,大部分接口电路都是用同一时钟周期中前一个时钟沿(即相反时钟变化方向)将数据移出。
SPI 线上的 Master , Slave 设备必须根据具体情况设置匹配的传输时序模式,时序只有匹 配,数据传输才能正常进行。如果设置的不匹配,可能导致数据接收方和发送方在同一时钟沿作用,导致数据传输失败。
我们以手机设计中非 常流行的触摸屏控制器 TSC2046 为例,介绍 SPI 接口的实际应用。
由于 TSC2046 采样触摸屏信息并量化 出最高位需要一定时间,而 SPI 总线没有握手机制, 为避免 Master 过早的启动传输,接收 无效数据, TSC2046 引入了 BUSY 信号作为 TSC2046 向 Master 的指示。
TSC2046 是在时钟的第一个 Idle to Active 沿采集数据(下图 1 处),而在第一个(下一字节) Active to Idle 沿开始移出数据(下图 2 处),这导致 Master 只能在第二个 dle to Active 沿采集到的数据才是有 效的(下图 3 处),而在第一个 Idle to Active 沿(下图 1 处)采集的数据是无效的,因此在软件中需要将该 Bit 丢弃。
可见,必须根据 Master 与 Slave 的实际时序进行匹配,软件也需要进行对应的调整,才能保证 数据传输的正常进行。
多 Slave 的应用
SPI 也支持多 Slave 应用。多个 Slave 共享时钟线、数据线,可以直接并接在一起;而各 Slave 的片选线 SS 则单独与 Master 连接,受 Master 控制。在一段时间内, Master 只能通过某根 SS 线激活一个 Slave ,进行数据传输,而此时其他 Slave 的时钟线和数据线端口则都应保持高阻状态,以免影响当前数 据传输的进行。
SPI Vs I2C
SPI 协议没有定义寻址机制,需通过外部 SS 信号线选择设备,当出现多 slave 应用时,需要多根 SS 信号线,实施起来较 I2C 要复杂。此外, SPI 总线不支持总线控制权仲裁,故只能用在单 Master 的场合;而 I2C 可以支持多 Master 的应用。
SPI 协议相对 I2C 要简单,没有握手机制,数据传输效率高,速率也更快,通常应用中可达几 Mbps ;此外 SPI 是全双工通信,可同时发送和接收数据,因此, SPI 比较适合用于数据传输的场合。比如需要较大批量数据传输的场 合(比如 MMC/SD 卡的数据传输就支持 SPI 模式),或者无需寻址传输的场合。
而 I2C 协议功能较丰富,但也相对复杂,多用在传输一些控制命令字等有意义数据的 场合。
比如 TSC2046 只有一个控制寄存器 (一个 8bit 的命令字),使用 SPI 接口即可控制,因为无需寻址。而 OV 的 Cmos Sensor 内有多个控制寄存器, 此时就必须使用 I2C 接口才能实现寻址控制 (哦,确切的是 SCCB ,一个很像 I2C 的东东)。
SPI 接口属于一种非常基本的外设接口,但是应用却很广泛。 SPI 也有所发展 ,比兔 NS 推出的 SPI 的精简接口 Microwire ,满足通常外设的扩展 需求。 Motorola 还推出了扩展功能的 QSPI ( Queued SPI )接口,应用更为广 泛。
(原创文章 转载请注明来自 手机设计天下网www.rd3721.com )