watercici 发表于 2018-6-7 11:28:53

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

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

wolfgang2015 发表于 2018-6-7 11:40:56

A、是片选信号正常,时钟也正常,可是发送的数据(即发送给FLASH的指令)出错了
1、检查通信位数设置,是否与W25Q16不匹配。
2、检查SPI程序,好像在8字节,16字节模式HAL的实现不同;

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

watercici 发表于 2018-6-7 11:53:27

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

首先对于第二问题,我说的没有时钟信号,就是在发送指令的时候没有,导致指令没有发送成功;
其次对于第一个问题,通信位数我选择的是8位的,应该是匹配的;
最后,我还想向您提供一个情况,我这个问题是在单步或若干步调试的时候会出现,如果不调试,正常运行,flash的数据是有读取成功的时候,而这个读取的过程就涉及了发送指令和读取数据两个过程,那么就说明SPI的读取和发送是有成功的时候的。但就是调试的时候会出现以上问题。

wolfgang2015 发表于 2018-6-7 12:32:24

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

す疯Ⅱ恒す 发表于 2018-6-7 13:38:22

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

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

lvwy0704 发表于 2018-6-7 15:04:39

楼主解决了没

watercici 发表于 2018-6-7 15:57:11

lvwy0704 发表于 2018-6-7 15:04
楼主解决了没

没有解决,反正就是调试的时候SPI通信会出问题?

jiangyia 发表于 2018-6-7 16:18:34

换一个存储芯片试试看?

watercici 发表于 2018-6-7 16:31:31

jiangyia 发表于 2018-6-7 16:18
换一个存储芯片试试看?

换了,一共有两个板子,用在第二个板子上也是同样的问题?

feixiang20 发表于 2018-6-8 00:54:12

我在看这么一个文章,不知对你有没有帮助
【SPI写入数据的时候记得读取,不然会一直读出0xFF!】
真的是越来越不清醒了,写一个SPI字节的时候居然忘记要读取数据了,因为SPI为双线结构,只要时钟线有信号,两条线上都会有信号,我就只发送数据,要读取的数据的时候再读取,这样子会造成溢出标志OVR被置1,因为平时的数据没有被读取,又来一个,真正要读取的时候,就会发现,怎么都是FF,因为发送OVR之后,还是DR的内容不会被修改,所以都是FF。查找原因过程:通过逻辑分析仪看到出来的数据明明是0x69,但是通过DR读取出来的数据确实0xff,进一步硬件仿真查看寄存器,发现OVR居然被置1,查手册分析得出。http://img-blog.csdn.net/20150914223444397?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center
页: [1] 2
查看完整版本: SPI通信中奇怪的问题,在线等,谢谢!