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);
} 展开
我用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);
} 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询