SPI读写Flash问题

用的是LPC2106其中4567引脚是复用引脚,可GPIO可SPI我用GPIO模拟SPI可以成功对SPIFLASH进行读写但是改成SPI之后却读写有问题。CSW25Q64... 用的是LPC2106 其中4567引脚是复用引脚,可GPIO可SPI

我用GPIO模拟SPI可以成功对SPI FLASH进行读写
但是改成SPI之后却读写有问题。
CS W25Q64_SCS P0.3/SDA

CLK W25Q64_SCLK P0.4/CLK
DO W25Q64_MISO P0.5/MISO
DI W25Q64_MOSI P0.6/MOSI

下面是GPIO模拟程序
void W25Q64_CS(uchar ON)
{
PINSEL0 = PINSEL0&0xFFFFFF3F;//0.3设置管脚连接GPIO
IODIR = IODIR|0x00000008;
if(ON==1)
IOSET=IOSET|0x10000008;
else
IOCLR=IOCLR|0x10000008;


void SPI_Send_Byte(uchar outDat)
{
uchar i = 0;
W25Q64_CS(0);
for (i = 0; i < 8; i++)
{
if ((outDat & 0x80) == 0x80)
W25Q64_DI(1);
else
W25Q64_DI(0);
W25Q64_CLK(1);
outDat = (outDat << 1);
W25Q64_CLK(0);
}
}

uchar SPI_Get_Byte(void)
{
uchar i=0, in=0, temp=0;
W25Q64_CS(0);
for (i = 0; i < 8; i++)
{
in = (in << 1);
temp = W25Q64_DO();
W25Q64_CLK(1);
if (temp == 1)
in |= 0x01;
W25Q64_CLK(0);
}
return in;
}
下面是使用SPI的时候对读写做出的修改,其余不变,但是读写有问题。
void SPIInit(void)
{
/* 初始化SPI引脚 */
PINSEL0|=0x00005500;
SPI_SPCCR = 0x52; // 设置SPI时钟分频
SPI_SPCR |= 0x30;
}
uchar SPI_Send_Byte(uchar data)
{
W25Q64_CS(0);
SPI_SPDR = data;
while ((SPI_SPSR & 0x80) == 0); /* 等待数据帧发送完毕 */
W25Q64_CS(1);
return (SPI_SPDR);
}
展开
 我来答
cloudreaching
2013-07-30 · TA获得超过168个赞
知道小有建树答主
回答量:187
采纳率:0%
帮助的人:128万
展开全部
看上去象管脚没有配置全,DA,CS,DI等。如果有示波器最好用示波器看一下
更多追问追答
追问
CS片选没问题
MISO,MOSI,以及CLK,在示波器观察下无变化
上电到高电平,然后就没变化了。
即使循环读取写入,也一直出于高电平。
追答
那时你spi在写入数据到SPI_SPDR时,不能触发spi动作,从这里判定,应该是spi模块的功能配置上没有弄好
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式