SPI具备全双工/半双工功能特性,以及可扩展特性。为了提高通讯效率,首选全双工模式。另外SPI通讯涉及主从模式,在汽车电子领域,一般将SOC端设置为主机(Master),MCU端为从机(Slave),这样的话,SPI CLK必须由主机发出。那么问题来了O(∩_∩)O哈哈~
- 主机率先发出通讯指令,CLK正常,读写正常
- 从机率先发出指令,CLK怎么处理?CLK不同步可能会丢包。
- 主机通讯即将结束时,从机发出指令,CLK怎么处理?
如上,难度在于第2、3;没有特定方案处理,主机是无法完整的读取到从机数据,甚至读取不到。
TODO
SSI(Synchronous Serial Interface)由TI公司定义的接口协议标准。
SPI(Serial Peripheral Interface)是由Motorola公司定义的接口协议标准。
SPI标准协议下(Motorola),拉低CS,主机输出CLK,进行读写操作。但是TI协议的SPI(SSI)并非如此。TI SSI串行帧同步SSIFss在发送每个帧之前产生宽度为个时钟周期的高脉冲。SSI 模块和片外从设备都在SSIClk 的上升沿驱动输出数据,在SSIClk 的下降沿锁存另一端的输入数据。如下图:

TODO
TODO
怎么设计呢:
- 增加IO口来作为双方交互?
- 增加通讯指令作为双方交互?
- 更换SPI协议/模式?
SPI标准协议下(Motorola),拉低CS,主机输出CLK,进行读写操作。

1). 通过增加EN-脉冲与每帧数据结束符处理(保证读取的数据完整性)

开机将PIN EN 默认置高,从机需要给主机发送数据时候,短暂拉低PIN EN,给予一个低脉冲信号,主机收到下降沿触发,输出CLK, 读取数据,读取到完整数据(数据结束符)后停止。
| 结束符 |
由于额外增加了一个IO操控,主机通讯即将结束时,通过3.1.1方法操作有效。
不排除增加多个IO(两个)来处理交互逻辑, ̄□ ̄||,有些公司确实这样处理,考虑到IO的高低电平,并未采用IO脉冲方式。
主机轮询操作:
主机不定时的寻问从机的操作是否完成,是否已经准备好数据,准备好之后,则需要发送时钟给从机,才能把从机中的数据收上来。
TODO
TODO
TODO
TODO