STM32和一个器件进行SPI通讯时,最后一位出错。

[复制链接]
 楼主| any012 发表于 2016-3-19 09:53 | 显示全部楼层 |阅读模式
主设备是STM32F103,从设备是AD7193模数转换芯片,读取时不对,以下为读的波形的最后几位时对应的SCLK和MOSI波形。
按说芯片应该是SCLK下降沿时MISO改变数据,SCLK上升沿时MISO采样。前边的波形都是这样的,就最后一位,SCLK上升沿时,MISO来了个正跳变。

怀疑是CS片选最后被拉高时,MISO也被拉高了,于是修改了下SPI读写函数,CS被拉低后,延时一段时间,再惊醒SPI读写,SPI读写结束后,延时一段时间CS再拉高。
结果,波形依旧。



本帖子中包含更多资源

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

×
19840312 发表于 2016-3-20 14:09 | 显示全部楼层
SCLK下降沿时MISO改变数据,SCLK上升沿时MISO采样。
说明:SCLK下降沿后读数据,上升沿后数据就不对了。因此最后一个clk的上升沿应该就是MISO拉高!

评分

参与人数 1威望 +3 收起 理由
any012 + 3

查看全部评分

NE5532 发表于 2016-3-21 10:39 | 显示全部楼层
你用的硬件SPI口,还是软件模拟的?
 楼主| any012 发表于 2016-3-21 10:59 | 显示全部楼层
NE5532 发表于 2016-3-21 10:39
你用的硬件SPI口,还是软件模拟的?

用的软件SPI。
 楼主| any012 发表于 2016-3-21 11:03 | 显示全部楼层
19840312 发表于 2016-3-20 14:09
SCLK下降沿时MISO改变数据,SCLK上升沿时MISO采样。
说明:SCLK下降沿后读数据,上升沿后数据就不对了。因 ...

我的理解是:
主设备控制SCLK电平高低,当SCLK下降沿时,从设备响应,改变MISO引脚电平,直到下个SCLK下降沿时再次改变MISO引脚电平。
在两次下降沿之间,MISO电平应当是稳定的,而主设备在两个下降沿的中间采样,比较稳定,也就是在上升沿时采样。
NE5532 发表于 2016-3-21 11:19 | 显示全部楼层
软件SPI你就只有找自己的问题了呗,你这个时序明显是“上升沿采样”,时钟的最后终止应该是“下降沿”,人家还没采样完成,你就把数据给人家断了,咋可能正确呢?

评分

参与人数 1威望 +3 收起 理由
any012 + 3

查看全部评分

 楼主| any012 发表于 2016-3-21 16:59 | 显示全部楼层
本帖最后由 any012 于 2016-3-21 17:00 编辑
NE5532 发表于 2016-3-21 11:19
软件SPI你就只有找自己的问题了呗,你这个时序明显是“上升沿采样”,时钟的最后终止应该是“下降沿”,人 ...

为何说是我给人家断了?
我看了下CS波形,是要延后一段时间的,不是在MISO的最后一个正跳变。

MOSI波形:


MISO波形:


CS波形:

本帖子中包含更多资源

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

×
NE5532 发表于 2016-3-22 11:19 | 显示全部楼层
你自己软件写的SPI,又是MOSI上的数据,你说不是你自己写错了还能是啥原因??而且你的问题不是CS,是MOSI的最后一位。

评分

参与人数 1威望 +3 收起 理由
any012 + 3

查看全部评分

 楼主| any012 发表于 2016-3-22 13:56 | 显示全部楼层
NE5532 发表于 2016-3-22 11:19
你自己软件写的SPI,又是MOSI上的数据,你说不是你自己写错了还能是啥原因??而且你的问题不是CS,是MOSI ...

我这里是读啊,是MISO,从设备控制MISO引脚电平的。
NE5532 发表于 2016-3-22 17:02 | 显示全部楼层
你最后再多发一个时钟,看是啥效果?

评分

参与人数 1威望 +1 收起 理由
any012 + 1

查看全部评分

 楼主| any012 发表于 2016-3-23 10:19 | 显示全部楼层
NE5532 发表于 2016-3-22 17:02
你最后再多发一个时钟,看是啥效果?

试了,最后又加了个SCLK时钟,但没有读取。
看到的效果是倒数第二个SCK上升沿,MISO仍然做了负跳变。
可以对比下两图,上是多加了个SCK时钟,下是原来的。




本帖子中包含更多资源

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

×
NE5532 发表于 2016-3-23 14:08 | 显示全部楼层
这个就确实比较奇怪了,因为你多发一个时钟以后并没有其他的数据送出来,请仔细参考你的从器件的数据手册,看是否有对这个现象的描述,另外需要咨询你从机的厂家技术支持了,主机这边你只有检查自己是否有低级错误,如果没有,也无计可施。
 楼主| any012 发表于 2016-3-23 14:43 | 显示全部楼层
NE5532 发表于 2016-3-23 14:08
这个就确实比较奇怪了,因为你多发一个时钟以后并没有其他的数据送出来,请仔细参考你的从器件的数据手册, ...

谢谢了。
感觉也是从设备的事,估计是有地方设置的不对。
 楼主| any012 发表于 2016-3-23 17:16 | 显示全部楼层
NE5532 发表于 2016-3-23 14:08
这个就确实比较奇怪了,因为你多发一个时钟以后并没有其他的数据送出来,请仔细参考你的从器件的数据手册, ...

这个可能是这个芯片的特性,最后一个上升沿时,MISO会被立时拉高。
所以,软件SPI对这个芯片读取时,应在SCK拉高前读取MISO。
我之前是在SCLK拉高后读取MISO,所以是大部分时间读取的不对,偶尔正确一两次。
通过这次真是吸取教训了,卡了很多天啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

232

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部