在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 4637|回复: 13

[求助] 关于spi cpol 和 cpha 四种模式

[复制链接]
发表于 2017-12-15 10:18:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
以前做过spi的master 和 slave 模式现在想把两个结合到一块  然后做出四种模式
目前遇到最大的问题就是时钟的问题

spi的sck由master发出  假如说一个byte的数据 master就发出8个sck(一次上升一次下降沿)
那么我的问题来了

在slave我用的是 异步 fifo接收
在接收到最后一个bit后 sck没了  所以在接收完最后一个bit 没了时钟边没办法写入到fifo的ram里头
后来我想到的办法就是 在接收到第七个bit就给写信号 然后写数据我直接拼接
但是还有问题
fifo的controller  在接收完数据后还需要时钟把最后的地址寄存一下 然后随时等待读时钟来同步

一切就是说 sck 由master来掌控 多少个bit就多少个sck 根本没多余的时钟给到slave的fifo controller 里头作寄存 同步之类的操作

有没人可以给我提点意见什么的
发表于 2017-12-15 13:29:07 | 显示全部楼层
1. 實作SPI Master/Slave最基礎的方式是, 有一個內部的clock; 作為Master的時候, SCK是由這個clock除頻而得; 作為Slave的時候, 這個clock用來sampling外部灌進來的SCK. 由於這個clock一直存在, 所以即使作為Slave, 還是有clock將MOSI的資料移位進來. 缺點是, (設計得當的話) 能夠接受到最快的SPI頻率, 是內部clock的一半.
2. 假如SPI Slave的部分完完全全是由外部的SCK提供, 那麼就需要考慮與Chip Select合併使用判斷. 利用Chip Select的上升或下降沿, 來做第一或最後一個bit的移位.
 楼主| 发表于 2017-12-15 14:32:18 | 显示全部楼层
回复 2# hyperpicc

我是16年初才开始在IC这块边学边工作 所以有些还不太懂
关于第一点你说的内部clock 我可以理解为总线的时钟吗
还有第二点 我应该已经用上了  例如 cpol=0 cpha=0 的模式
第一个sck沿就要采数据 然而第一个沿之前sck还没生效 我就是用chip select来发第一个bit

只是我现在的问题是当我slave接收完了数据 这时候sck也没了  但是我要写到ram里头  需要的信号
: clk  cen wen addr data   
这里的clk是由sck给的 已经没了 所以数据也写不进去

我q号  458363548   方便的话加我q给我点意见
 楼主| 发表于 2017-12-15 14:33:10 | 显示全部楼层
458363548   这是我qq  
方便的话可以加我好友  给我点意见
 楼主| 发表于 2017-12-15 14:33:46 | 显示全部楼层
这是我QQ  方便的话可以加我一下 给我点思路
 楼主| 发表于 2017-12-15 14:35:24 | 显示全部楼层
458363548  我QQ号
发了两次好像发不出去。。
发表于 2017-12-15 16:51:08 | 显示全部楼层
本帖最后由 hyperpicc 于 2017-12-15 16:55 编辑

回复 3# 小稀

1. 是的. 你可以用總線的時鐘
2. 發第一個bit? 作爲Slave的時候, 我估計你指的應該是MISO.你可以去看看一些其他的設計, 大部分的SPI Slave Mode 0或Mode 3, 通常是SCK下降沿把MISO推出去, 上升沿把MOSI收進來
发表于 2017-12-15 16:52:28 | 显示全部楼层
回复 1# 小稀

相当于高频时钟去采样低频时钟,或者分频为低频时钟
 楼主| 发表于 2017-12-15 17:44:12 | 显示全部楼层
回复 7# hyperpicc


   关于数据进出这部分我可以解决 然后最让我困扰的是我作为slave模块要接收N个byte数据时  关于最后一个数据的处理  slave 模块 有一个异步rx_fifo  
其中wclk连的是master 的 sck
      rclk连的是总线的 clk
然后在mode3 (cpol=1,cpha=1) 这种模式下 sck的上升沿为采数据
在master 给到 slave的sck  最后一个沿就是上升沿 然后一直保持着1
页就是说当slave 在最后一个上升沿接收到最后一个bit后 sck 就停止了
然而在我接收完最后一个bit后 我要把完整的一个byte压到fifo里面
可是如我上面说的 我的rx_fifo 写时钟连的是sck 而slave 接收完最后一个bit的时候 master不会再给时钟了
我也没办法把最后一个数据压到fifo里面了
 楼主| 发表于 2017-12-15 17:45:25 | 显示全部楼层
回复 8# 谁枫而飘


   明白  我现在想知道的是作为slave 怎么去处理接收到的数据
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-5-1 14:47 , Processed in 0.027115 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表