打印

调试W25X16意外的艰难

[复制链接]
19362|70
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
第一次调试W25X16,失败;
然后在代码上使劲看,看来看去4根线,怎么设置也不复杂;
时钟使能IO端口;
时钟使能SPI2;
SPI2的初始化也简单(用库操作);
测试为读W25X16的ID序列号;结果应该是0xEF14;
沙发
明月小厨|  楼主 | 2013-3-1 22:09 | 只看该作者
怎么读都没有结果,总是0xFF;
是不是W25X16坏掉了?换了一粒再试;结果一样是0xFF;

使用特权

评论回复
板凳
明月小厨|  楼主 | 2013-3-1 22:10 | 只看该作者
把通讯的速度降下来再试,仍然失败;

使用特权

评论回复
地板
明月小厨|  楼主 | 2013-3-1 22:12 | 只看该作者
今天去单位把示波器搬回来看波形;我怀疑我是不是设错了IO的模式,把STM32F103的IO端口给烧了;
注:MISO端口我曾经设错了;我设为复用输出;正确的是输入(是否上拉皆可);

使用特权

评论回复
5
明月小厨|  楼主 | 2013-3-1 22:18 | 只看该作者
这一看波形发现麻烦来了;果然有一路信号没有反应;是SCK;
把STM32F103的SCK信号通道的铜皮刮一刮,就近再测;噫,竟然有输出;
再看电路板PCB部分,也没有过孔;
我这才想起来,这个W25X16的封装是SO8;我做板的时候看也没看就用了SO8的元件封装;结果买回来贴片的时候才发现,这个W25X16的尺寸明显比SO8大;
贴的时候也没有引起重视,心想引脚上多上点锡也许可以用;

换W25X16的时候,我特意把W25X16的引脚往内压缩再焊;没想到还是出问题了;

使用特权

评论回复
6
明月小厨|  楼主 | 2013-3-1 22:20 | 只看该作者
找了根线把引脚和铜皮连上,再测0xEF14出现了;
折腾了我三天;

W25X16的封装是个什么标准?**~~~~~~~~~~~~~~~~~~~~

使用特权

评论回复
7
明月小厨|  楼主 | 2013-3-1 22:22 | 只看该作者
特发此贴,希望用W25X16器件的兄弟们擦亮你的双眼,看清楚它的封装;比SO8大;

使用特权

评论回复
8
明月小厨|  楼主 | 2013-3-1 22:45 | 只看该作者
大家用这个器件,买这个器件都要小心了;8脚封装也有好几种;

使用特权

评论回复
9
dong_abc| | 2013-3-1 22:55 | 只看该作者
记住了。

使用特权

评论回复
10
smartmcu| | 2013-3-2 07:54 | 只看该作者
辛苦了:hug:!那么明显的封装不同,居然可以焊好,确实厉害,高手!佩服一下。

使用特权

评论回复
11
gaupen1186| | 2013-3-2 14:11 | 只看该作者
smartmcu 发表于 2013-3-2 07:54
辛苦了!那么明显的封装不同,居然可以焊好,确实厉害,高手!佩服一下。 ...

;P

使用特权

评论回复
12
cjhk| | 2013-3-2 20:06 | 只看该作者
封装搞错了?   是的吗  呵呵   需要细心哦

使用特权

评论回复
13
明月小厨|  楼主 | 2013-3-3 01:37 | 只看该作者
SPI_InitStructure.SPI_NSS = SPI_NSS_Hard;//硬件模式主控时,NSS为输出模式,可自动控制NSS端口
......
SPI_SSOutputCmd(SPI2, ENABLE);//硬件模式下必须调用此指令使能NSS;
......
希望达成的效果:是主控模式下,
SPI使能后,自动拉低NSS信号线;
SPI禁能后,自动拉高NSS信号线;

使用特权

评论回复
14
明月小厨|  楼主 | 2013-3-3 01:38 | 只看该作者
经过反复测试结果明天公布;

使用特权

评论回复
15
明月小厨|  楼主 | 2013-3-3 01:48 | 只看该作者

软件模式和硬件模式下,NSS都要你自己写代码控制;
软件模式:可以设主控,也可以设为从;自己说了算;
硬件模式:NSS如果已经被谁拉低了,则设置为主控模式将失败;自动更正为从模式;
反正NSS比较麻烦;
简单处理就软件模式+NSS(IO端口,手动控制);

完毕,时间比较紧张的兄弟就不要在这里浪费时间了;没有什么意义;

使用特权

评论回复
16
明月小厨|  楼主 | 2013-3-3 12:24 | 只看该作者
原以为可以到此结束;顺便彻底研究一下;
结束没有什么意外发现;可是过了一夜之后;

再测试结果5花8门;
时而测得结果0xFFEF;(14没出现);
时而测得结果0x14EF;(反了)
时而测得结果0xFF14(0xEF没出现.被0xFF顶包了);

是W25X16的问题;还是STM32F103的问题?也许两个都有问题;
时而在线调试一个结果,全速运行(不接JTAG)又是另一个结果;

使用特权

评论回复
17
pattywu| | 2013-3-3 13:48 | 只看该作者
本帖最后由 pattywu 于 2013-3-3 19:17 编辑

    LZ是"天才"。

使用特权

评论回复
18
qjy_dali| | 2013-3-3 13:58 | 只看该作者
楼主对SPI Flash的现状了解少,W25X16的这种SO8非常常见。你所说到的那种常规SO8,是指150mil宽的,在1MB以下的小容量SPI Flash中常被采用,2MB容量左右以上的,以208mil宽的这种SO8最常见,大于8MB的,以宽体SO16最常见。

使用特权

评论回复
19
cjhk| | 2013-3-3 19:13 | 只看该作者
楼主很强大   不错哦   呵呵  顶起来   谢谢你的共享资料   谢谢了   呵呵

使用特权

评论回复
20
明月小厨|  楼主 | 2013-3-3 20:14 | 只看该作者
一直没有认真看参考手册;只是猜测信号的流程;
当时翻看手册时发现,我的假设真的有错;如:
发送第一个数据时,数据被立即写入发送移位寄存器;同时,出现发送为空标志;(其实此时正在发送);
如果此时写入第二个数据,则新的数据并不立即发送,只是等上一个数据真的发送完毕,再进入移位寄存器;
发送为空的标志是发送数据进入移位寄存器后出现的标志;和真正发送完毕有一个时间差(提前出现);
这个提前出现是希望发送过程连续;不然,发一个等一下,再写入,再发送,中间有个停顿待命的状态,通讯的效率降低了;
--
我上面出现的错误就是误以为写一个数据,数据发送完毕才出现发送为空标志;
而读数据的时候,一旦一个数据移位完成即送入数据接收寄存器,出现标志待命;读一次后自动清标志位;
如果没有及时读取,下一个数据接收完成后再写入数据接收寄存器时,会出现溢出标志;
--
没有LPC213X的SPI好用;LPC213X有一个16个寄存器组的先进先出缓冲区;收发都有;

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:爱你一万年

35

主题

1072

帖子

2

粉丝