我正在做一些阅读,甚至在我的微控制器上运行了一个“主”SPI。这是我的问题,基本上如果主设备想要初始化写入我们写入SSPBUF的从设备,我们如何控制从设备响应的内容?在这种情况下,数据表似乎并不清楚事件的顺序。
即。 Master将一个char放入SSPBUF,这启动SPI模块向从器件发送数据,在移位期间,从器件返回一个字节。
在从属方面,是否有东西告诉您有传入的数据,您可以先写入SSPBUF,然后接受数据?
OR
在主人有机会发起转移之前,您是否必须向SSPBUF写入您想要发回的第一个“返回值”?
答案 0 :(得分:1)
通常我过去用SPI完成的工作是从主设备向从设备发送2个字节,两者之间的延迟最小。主设备发送:“X Y”,其中“X”是它希望从从设备读取的变量,“Y”实际上只是一个虚拟变量,用于输出来自从设备的响应。同时,从机在收到“X”时获得中断,查找输入缓冲区中的值,当收到“Y”时,对其数据包的响应将被输出到主机。
答案 1 :(得分:1)
您希望在处理从机芯片选择的GPIO线路上使用中断。确保从器件有足够的时间处理该中断并在时钟开始之前加载输出数据寄存器。
某些SPI模块不允许使用GPIO - 您需要检查SPI模块是否具有处理芯片选择的功能,或仅根据GPIO活动启用模块。
答案 2 :(得分:0)
无论您的微控制器是什么,三个可能是与接收SPI数据相关的ISR,以及一个寄存器,其中可以访问已接收的数据并将其复制到本地变量中。
答案 3 :(得分:0)
首先,您需要确认您的主设备和从设备具有SPI模式和数据大小等参数的公共值。 SPI模式将决定SPI时钟线的空闲极性和数据采样边沿,无论是第一个还是第二个。数据大小将指示它是8位还是16位,或者根据芯片可能会有所不同。
现在,当主器件通过芯片/从器件选择从器件时,器件从器件变为有效并等待时钟改变其状态,一旦时钟改变状态,器件根据SPI模式选择再次等待第1或第2边沿的时钟线。如果它是第一个边沿从器件采样MOSI线数据并放入其内部移位寄存器,如果从器件也必须传输数据,它必须在所选时钟边沿之前将数据保持在MISO线上。 根据数据大小,该过程将重复8或16次。完成后,主机和从机可以为其CPU产生中断以收集数据(在微控制器的情况下)。