[ZLG-ARM] 请教LPC2103外扩SPI Flash的问题

[复制链接]
 楼主| mullife 发表于 2007-9-13 12:46 | 显示全部楼层 |阅读模式
周工,你好。请教你LPC2103外扩SPI&nbsp;Flash的问题。SPI&nbsp;Flash的型号是AT25FS040,电路接法如下图。<br />我的问题有:1、我把LPC2103设置成主机,不用P0.7/SSEL0可以吗?<br />2、我发送命令给Flash后,Flash会有1个byte返回,如果我要接收返回的数据是不是还要向S0SPDR写数据啊?按照说明书上说的,只有向S0SPDR写数据,才有SCK。<br />3、CPOL&nbsp;=&nbsp;0&nbsp;SCK为高有效,是不是说下降沿有效啊?<br />4、不知道哪里出问题了,读不回来数据。我用示波器看了,发送的时候有波形。<br />部分程序如下:<br />//初始化SPIFlash<br />void&nbsp;SPIFlashInit(void)<br />{<br />&nbsp;&nbsp;&nbsp;PINSEL0&nbsp;|=&nbsp;0x00001500;&nbsp;&nbsp;&nbsp;&nbsp;//P0.4&nbsp;P0.5&nbsp;P0.6&nbsp;连接到第二功能<br />&nbsp;&nbsp;&nbsp;IODIR&nbsp;|=&nbsp;pWP&nbsp;|&nbsp;pHold;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//WP&nbsp;HOLD&nbsp;输出<br />&nbsp;&nbsp;&nbsp;IOSET&nbsp;|=&nbsp;pWP&nbsp;|&nbsp;pHold;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//WP&nbsp;HOLD&nbsp;输出为高电平<br />&nbsp;&nbsp;&nbsp;S0SPCCR&nbsp;|=&nbsp;0x52;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;S0SPCR&nbsp;=&nbsp;(0&nbsp;&lt&lt&nbsp;3)&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;CPHA&nbsp;=&nbsp;0,&nbsp;数据在SCK&nbsp;的第一个时钟沿采样<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0&nbsp;&lt&lt&nbsp;4)&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;CPOL&nbsp;=&nbsp;0,&nbsp;SCK&nbsp;为低有效<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(1&nbsp;&lt&lt&nbsp;5)&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;MSTR&nbsp;=&nbsp;1,&nbsp;SPI&nbsp;处于主模式<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0&nbsp;&lt&lt&nbsp;6)&nbsp;|&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;LSBF&nbsp;=&nbsp;0,&nbsp;SPI&nbsp;数据传输MSB&nbsp;(位7)在先<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(0&nbsp;&lt&lt&nbsp;7);&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;SPIE&nbsp;=&nbsp;0,&nbsp;SPI&nbsp;中断被禁止&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br />//写使能<br />uint8&nbsp;WRStaRegister(uint8&nbsp;WRData)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;S0SPDR&nbsp;=&nbsp;WRData;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(0&nbsp;==&nbsp;(S0SPSR&nbsp;&&nbsp;0x80));//&nbsp;等待SPIF置位,即等待数据发送完毕&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;return(S0SPDR);<br />}<br />//读FLash的寄存器<br />void&nbsp;RDStaRegister(void)<br />{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;S0SPDR&nbsp;=&nbsp;0x05;<br />&nbsp;&nbsp;&nbsp;while(0&nbsp;==&nbsp;(S0SPSR&nbsp;&&nbsp;0x80));//&nbsp;等待SPIF置位,即等待数据发送完毕<br />&nbsp;&nbsp;&nbsp;RSPIData&nbsp;=&nbsp;S0SPDR;<br />&nbsp;&nbsp;&nbsp;}<br />//主函数<br />void&nbsp;main(void)<br />{&nbsp;&nbsp;PLL_Init();<br />&nbsp;&nbsp;&nbsp;SPIFlashInit();<br />&nbsp;&nbsp;&nbsp;WRStaRegister(0x06);<br />&nbsp;&nbsp;&nbsp;RDStaRegister();<br /><br />}<br /><br />谢谢了,麻烦你帮我看一下。
 楼主| mullife 发表于 2007-9-13 14:03 | 显示全部楼层

第一个问题我已经能够知道答案了。

 楼主| mullife 发表于 2007-9-14 12:14 | 显示全部楼层

我已经知道答案了。

我知道问题问的很白。<br /><br />难道真的一个人都不知道吗??
wangshujun 发表于 2007-9-14 21:30 | 显示全部楼层

读数据时随便写就可以了

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

20

帖子

0

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

9

主题

20

帖子

0

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