你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

SPI通信中奇怪的问题,在线等,谢谢!

[复制链接]
watercici 提问时间:2018-6-7 11:28 /
我这版程序之前运行SPI通信时成功的,可是最近突然出现一个问题就是,SPI通信有时成功,有时失败。用逻辑分析仪查看了一个读W25Q16的过程发现两种问题:1)是片选信号正常,时钟也正常,可是发送的数据(即发送给FLASH的指令)出错了,总是发0xFF。不知道为什么?
              2)片选正常,但是没有时钟信号,这个也不知道为什么?
但奇怪的是程序有时候是正常的,有时候会交替出现上面的两种问题?
收藏 评论16 发布时间:2018-6-7 11:28

举报

16个回答
feixiang20 回答时间:2018-6-8 00:54:12
我在看这么一个文章,不知对你有没有帮助
【SPI写入数据的时候记得读取,不然会一直读出0xFF!】

真的是越来越不清醒了,写一个SPI字节的时候居然忘记要读取数据了,因为SPI为双线结构,只要时钟线有信号,两条线上都会有信号,我就只发送数据,要读取的数据的时候再读取,这样子会造成溢出标志OVR被置1,因为平时的数据没有被读取,又来一个,真正要读取的时候,就会发现,怎么都是FF,因为发送OVR之后,还是DR的内容不会被修改,所以都是FF。

查找原因过程:通过逻辑分析仪看到出来的数据明明是0x69,但是通过DR读取出来的数据确实0xff,进一步硬件仿真查看寄存器,发现OVR居然被置1,查手册分析得出。


评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

watercici 回答时间:2018-6-7 11:53:27
wolfgang2015 发表于 2018-6-7 11:40
A、是片选信号正常,时钟也正常,可是发送的数据(即发送给FLASH的指令)出错了
1、检查通信位数设置,是否 ...

首先对于第二问题,我说的没有时钟信号,就是在发送指令的时候没有,导致指令没有发送成功;
其次对于第一个问题,通信位数我选择的是8位的,应该是匹配的;
最后,我还想向您提供一个情况,我这个问题是在单步或若干步调试的时候会出现,如果不调试,正常运行,flash的数据是有读取成功的时候,而这个读取的过程就涉及了发送指令和读取数据两个过程,那么就说明SPI的读取和发送是有成功的时候的。但就是调试的时候会出现以上问题。
watercici 回答时间:2018-6-8 11:23:09
feixiang20 发表于 2018-6-8 00:54
我在看这么一个文章,不知对你有没有帮助
【SPI写入数据的时候记得读取,不然会一直读出0xFF!】
真的是越 ...

我看到过这个,但是我的问题不是这个,这个说的是你读取数据的时候也要发送数据,因为SPI通信是由主机发起的,所以在读数据的时候,也要发送数据。但是我现在的问题是发送数据的时候有问题,比如我发的指令是0X05,结果我发现我发的是0XFF,指令不对,地址也是这样没有发送对,所以导致读取的数据不正确。而且这种情况只在调试的时候发生。
wolfgang 回答时间:2018-6-7 11:40:56
A、是片选信号正常,时钟也正常,可是发送的数据(即发送给FLASH的指令)出错了
1、检查通信位数设置,是否与W25Q16不匹配。
2、检查SPI程序,好像在8字节,16字节模式HAL的实现不同;

B、片选正常,但是没有时钟信号;
属于指令没有指令发送,没有指令发送自然不需要时钟信号。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

wolfgang 回答时间:2018-6-7 12:32:24
问题在于调试时候,寄存器中断与数据捕获时间过长导致。串行信号的调试方法最好用示波器+协议分析实现。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

疯de_恒 回答时间:2018-6-7 13:38:22
watercici 发表于 2018-6-7 11:53
首先对于第二问题,我说的没有时钟信号,就是在发送指令的时候没有,导致指令没有发送成功;
其次对于第 ...

你单步调试的时候出现的,因为你虽然暂停调试了,但是硬件SPI不一定停止,所以各种奇怪的事情都有,最好还是全速运行看波形是否正确。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

lvwy0704 回答时间:2018-6-7 15:04:39
楼主解决了没
watercici 回答时间:2018-6-7 15:57:11

没有解决,反正就是调试的时候SPI通信会出问题?
通通吃鱼 回答时间:2018-6-7 16:18:34
换一个存储芯片试试看?
watercici 回答时间:2018-6-7 16:31:31
jiangyia 发表于 2018-6-7 16:18
换一个存储芯片试试看?

换了,一共有两个板子,用在第二个板子上也是同样的问题?
watercici 回答时间:2018-6-11 11:33:07
wolfgang2015 发表于 2018-6-7 11:40
A、是片选信号正常,时钟也正常,可是发送的数据(即发送给FLASH的指令)出错了
1、检查通信位数设置,是否 ...

您好,我想问一下,我在做SPI通信的时候,CS信号有时会出现自动拉高的情况,导致我的发送和读数都异常,这是为什么呢?
watercici 回答时间:2018-6-11 11:33:29
す疯Ⅱ恒す 发表于 2018-6-7 13:38
你单步调试的时候出现的,因为你虽然暂停调试了,但是硬件SPI不一定停止,所以各种奇怪的事情都有,最好 ...

您好,我想问一下,我在做SPI通信的时候,CS信号有时会出现自动拉高的情况,导致我的发送和读数都异常,这是为什么呢?
疯de_恒 回答时间:2018-6-11 13:55:03
watercici 发表于 2018-6-11 11:33
您好,我想问一下,我在做SPI通信的时候,CS信号有时会出现自动拉高的情况,导致我的发送和读数都异常, ...

CS信号应该作为主机的一方软件控制才对,这里应该用单片机控制,软件CS,应该该IO口的电平只需要检查代码即可。

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

watercici 回答时间:2018-6-11 18:16:12
す疯Ⅱ恒す 发表于 2018-6-11 13:55
CS信号应该作为主机的一方软件控制才对,这里应该用单片机控制,软件CS,应该该IO口的电平只需要检查代码 ...

我就是按照您说的设置的,我的SPI通信挺奇怪的,有时候通信很正常,读写都没有问题,有时候通信异常,异常情况就是时钟异常,要不时钟脉冲数不够,随机,要不就是发送两个字节,发第一个字节的时候没事脉冲
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版