• 05-SA8155 QNX SPI 全双工通讯


    1. 背景

    SPI具备全双工/半双工功能特性,以及可扩展特性。为了提高通讯效率,首选全双工模式。另外SPI通讯涉及主从模式,在汽车电子领域,一般将SOC端设置为主机(Master),MCU端为从机(Slave),这样的话,SPI CLK必须由主机发出。那么问题来了O(∩_∩)O哈哈~

    • 主机率先发出通讯指令,CLK正常,读写正常
    • 从机率先发出指令,CLK怎么处理?CLK不同步可能会丢包。
    • 主机通讯即将结束时,从机发出指令,CLK怎么处理? 

    如上,难度在于第2、3;没有特定方案处理,主机是无法完整的读取到从机数据,甚至读取不到。

      

    2. 问题

    TODO

    2.1 SPI协议Motorola版跟TI版本区别

    SSI(Synchronous Serial Interface)由TI公司定义的接口协议标准。

    SPI(Serial Peripheral Interface)是由Motorola公司定义的接口协议标准。

    SPI标准协议下(Motorola),拉低CS,主机输出CLK,进行读写操作。但是TI协议的SPI(SSI)并非如此。TI SSI串行帧同步SSIFss在发送每个帧之前产生宽度为个时钟周期的高脉冲。SSI 模块和片外从设备都在SSIClk 的上升沿驱动输出数据,在SSIClk 的下降沿锁存另一端的输入数据。如下图:

    TODO

    2.2 DMA使用

    TODO

    3. 框架

    怎么设计呢:

    • 增加IO口来作为双方交互? 
    • 增加通讯指令作为双方交互?
    • 更换SPI协议/模式?

    3.1 增加IO口交互设计思路:

    SPI标准协议下(Motorola),拉低CS,主机输出CLK,进行读写操作。

    3.1.1 从机率先发出指令,CLK怎么处理?

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

    开机将PIN EN 默认置高,从机需要给主机发送数据时候,短暂拉低PIN EN,给予一个低脉冲信号,主机收到下降沿触发,输出CLK, 读取数据,读取到完整数据(数据结束符)后停止。

    结束符

    3.1.2 主机通讯即将结束时,从机发出指令,CLK怎么处理? 

    由于额外增加了一个IO操控,主机通讯即将结束时,通过3.1.1方法操作有效。

    3.1.3 增加多个IO

    不排除增加多个IO(两个)来处理交互逻辑, ̄□ ̄||,有些公司确实这样处理,考虑到IO的高低电平,并未采用IO脉冲方式。

    3.2 增加通讯指令作为双方交互? 

    主机轮询操作: 

    主机不定时的寻问从机的操作是否完成,是否已经准备好数据,准备好之后,则需要发送时钟给从机,才能把从机中的数据收上来。 

    TODO

    3.3 更换SPI协议/模式? 

    TODO

    4. 验证

    TODO

    5. 总结 

    TODO

  • 相关阅读:
    构造函数_Date构造函数
    8 个有效的安卓数据恢复软件——可让丢失的文件起死回生!
    网工内推 | 急聘网络运维,周末双休,厂商认证优先
    6.S081环境配置-问题解决
    如何使用Github的Action实现博客的自动部署
    python 多个proto文件import引用时出现ModuleNotFoundError错误
    HashMap和Hashtable的区别源码对比(一)
    Splunk 之 filed 恢复
    python爬虫
    数据仓库和数据湖的区别
  • 原文地址:https://blog.csdn.net/liaochaoyun/article/details/127404999