我在使用F28069controlstick的SPI接口读取我们的目标芯片(我们自己设计的)时,controlstick的MCU中将SPI的SPI Clocking Schemes设置为rising edge with delay,即clock polarity=0,clock phase=1。通过示波器观察发现,SPISIMO是在时钟上升沿采样数据,在下降沿发送数据,这点是符合F28069技术手册中的SPI描述;但是通过CCS5观察到,firmware采样到的数据是SPISOMI在SPICLK下降沿上的数据。导致MCU(从目标芯片)读回的数据比我们(芯片)发的数据整体右移一位。请哪位专家大牛帮忙解答,感激不尽!
Joey Mao:
你好,
你们芯片的SPI通讯在数据手册上应该有时钟信号的时序图吧,应该选择对应到SPI四种时钟配置中匹配的那一种
我在使用F28069controlstick的SPI接口读取我们的目标芯片(我们自己设计的)时,controlstick的MCU中将SPI的SPI Clocking Schemes设置为rising edge with delay,即clock polarity=0,clock phase=1。通过示波器观察发现,SPISIMO是在时钟上升沿采样数据,在下降沿发送数据,这点是符合F28069技术手册中的SPI描述;但是通过CCS5观察到,firmware采样到的数据是SPISOMI在SPICLK下降沿上的数据。导致MCU(从目标芯片)读回的数据比我们(芯片)发的数据整体右移一位。请哪位专家大牛帮忙解答,感激不尽!
Eks Wang:
问题已经解决了,是由于波特率设置问题。MCU的波特率设置过高,导致SPICLK的时钟速度比我们目标芯片的SPI时钟频率(1MHz)高,使得MCU在SPISOMI上采样数据经常发生在SPISIMO信号变化过程中,导致MCU采样到的数据有误。后来将SPI的时钟设为1MHz就没问题了。2MHz也可以读正确。
现在有点疑问,目标芯片内部的SPI模块在收发数据时,所采用的时钟难道不是MCU提供的SPICLK吗?为什么会有这种问题存在呢?请了解的大神牛人不吝赐教,谢谢
我在使用F28069controlstick的SPI接口读取我们的目标芯片(我们自己设计的)时,controlstick的MCU中将SPI的SPI Clocking Schemes设置为rising edge with delay,即clock polarity=0,clock phase=1。通过示波器观察发现,SPISIMO是在时钟上升沿采样数据,在下降沿发送数据,这点是符合F28069技术手册中的SPI描述;但是通过CCS5观察到,firmware采样到的数据是SPISOMI在SPICLK下降沿上的数据。导致MCU(从目标芯片)读回的数据比我们(芯片)发的数据整体右移一位。请哪位专家大牛帮忙解答,感激不尽!
Eks Wang:
回复 Joey Mao:
是的,我看到数据手册了,时钟信号配置跟我们目标芯片时一致的。现在发现是波特率速度设置过快,导致采样出现错误。问题已解决。谢谢您!
现在我有个感觉很低级的疑问,slave的SPI收发数据时采用的不也是MCU主机发出的SPICLK吗?为什么会有SPISIMO的信号缓慢,就是什么slave发的信号很慢?请赐教,谢谢